Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Groovy编写。AndroidStudio在使用过程中常见的Gradle问题
方法数超过64K
工程中,包括引用的library的方法数超过65536(64K)时出现
- 删除不用的方法,删除不使用的jar;
compile fileTree(dir: 'libs', include: ['*.jar'])
,会编译libs下所有的jar,使用compile files()
依次添加需要的依赖 - 分包,配置build.gradle文件,通过在defaultConfig中设置multiDexEnabled可以开启分包模式,分包之后的Dex就低于了限制数,保证了正常的打包
1
2
3
4
5android {
defaultConfig {
multiDexEnabled true
}
}
包冲突
1.Android Studio遇到transformClassesWithDexForDebug错误
2.Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)
- 去掉相同的依赖包
- 将
compile files()
替换为provided files()
- 使用如下方式,防止v4等包冲突
1
2
3compile(xxx) {
exclude group: "com.android.support", module: "support-v4"
}
重复依赖
引用依赖时,出现文件重复:如引用RxJavaAdapter和RxJava
去掉其中一个文件,去掉rxjava:2.0.8
1
2compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
compile 'io.reactivex.rxjava2:rxjava:2.0.8'更换为兼容的依赖库版本
修改rxjava2为rxjava,如compile 'io.reactivex:rxjava:1.2.2'
依赖so异常
1 | java.lang.UnsatisfiedLinkError: Couldn't load ktvDb_jni from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.test-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.example.test-2, /system/lib]]]: findLibrary returned null |
- 在build.gradle文件里添加依赖的.so库
1
2
3
4
5
6
7android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
中文乱码
Android设备上运行显示中文乱码
1
2
3android {
compileOptions.encoding = "GBK"
}编码 UTF-8 的不可映射字符
gradle2.0+是JavaCompile,否则是Compile1
2
3tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}1
2
3tasks.withType(Compile) {
options.encoding = "UTF-8"
}控制台Logcat打印乱码
File->Settings->Editor->File Encodings->修改项目编码为GBK
找不到HttpClient方法
Android Studio 使用ApachHttp传输下载时,找不到HttpClient
- 在build.gradle里面添加
1
useLibrary 'org.apache.http.legacy'
Gradle编译禁用Lint报错
- 在build.gradle里添加
1
2
3
4
5
6android {
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
运行内存溢出
AndroidStudio运行APK时,出现java.lang.OutOfMemoryError:GC overhead limit exceeded
解决方法:
1
2
3
4
5android {
dexOptions {
javaMaxHeapSize "4g"
}
}