欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android studio2.3.3升级到3.1.2坑(小记)

程序员文章站 2023-12-03 13:39:46
1.grade配置error: could not find com.android.tools.build:gradle:2.2.1. 解决方法与maven仓库有点...

1.grade配置error: could not find com.android.tools.build:gradle:2.2.1.

解决方法与maven仓库有点像:进入

d:\software\android\android-studio-ide-145.3276617-windows\android-studio\gradle\m2repository\com\android\tools\build\gradle

将项目中的build.gradle文件中

dependencies { classpath 'com.android.tools.build:gradle:2.2.1'}

改为

dependencies { classpath 'com.android.tools.build:gradle:3.1.2'}

2.all flavors must now belong to a named flavor dimension.

在module下的build.gradle中添加一行代码即可解决:

android{ ... flavordimensions "versioncode" ...}

3.升级到android studio 3.1,重新构建项目时报错,主要错误为:

the sourceset 'instrumenttest' is not recognized by the android gradle plugin. perhaps you misspelled something?
instrumenttest已被废弃,新的gradle插件已经不支持。instrumenttest需要修改为androidtest。

修改后,sourcesets相关内容类似:

android { buildtoolsversion "27.0.3" compilesdkversion 24 sourcesets { main { manifest.srcfile 'androidmanifest.xml' java.srcdirs = ['src'] aidl.srcdirs = ['src'] renderscript.srcdirs = ['src'] res.srcdirs = ['res'] assets.srcdirs = ['assets'] jnilibs.srcdirs = ['libs'] } androidtest.setroot('tests') }}

4. aapt2 编译报错 aapt2 error

报错

error:java.util.concurrent.executionexception: com.android.tools.aapt2.aapt2exception: aapt2 error: check logs for details
解决:在gradle.properties中关闭appt2 编译

android.enableaapt2=false

注:如果是eclipse转到as上的项目,可能没有gradle.properties文件,请在项目根目录中手动创建

5.升级完android stadio 3.1以后

将所有的compile变为implementation 后,clean和rebuild都没有发现错误,唯独在run的时候出现了以下错误:

原因及解决办法

原因:按照android stadio 3.1的要求,需要把gradle版本升级为 4.4及以上,但是gradle 4.4及以上要求将依赖api的compile换成implementation。而implementation声明的依赖没办法传递到module以外,即该module 以外module没办法引用到implementation声明的api。

即:module a implementation liba,而 moduleb implementation module a,那么module b 引导 liba 中的api,不然在build的时候会报org.gradle.api.internal.tasks.compile.compilationfailedexception。
解决办法:将compile 替换为 api即可,也就是如果有外部引用,则换成:api,剩下的换成:implementation。

示例:

dependencies { api filetree(dir: 'libs', include: ['*.jar']) testimplementation 'junit:junit:4.12' api 'com.android.support:support-v4:26.1.0' api 'com.android.support:appcompat-v7:26.1.0' api 'com.google.code.gson:gson:2.8.2' api 'com.j256.ormlite:ormlite-core:4.48' api 'com.j256.ormlite:ormlite-android:4.48'

ps:解决办法:

android 6.0(api 23)已经不支持httpclient了,在build.gradle中 加入 uselibrary 'org.apache.http.legacy'就可以了,如图:

error:(633, 16) 错误: 找不到符号 符号: 方法 sqrt(float) 位置: 类 floatmath

解决方案

原因是android6.0不支持floatmath.sin()了,主要有两个方法可以解决。

方法一:

用23一下的sdk版本进行编译。将gradle.build文件里(包括project的gradle.build和module的gradle.build)的compilesdkversion设为23以下。

方法二:

将上面报错的地方,即 用math类替换floatmath类,math.sin();

方法三 :

(float)math.sqrt 替换 floatmath.sqrt

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。