专治AndroidStudio中Gradle疑难杂症

gradle
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
    5
    android {
    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
    3
    compile(xxx) {
    exclude group: "com.android.support", module: "support-v4"
    }

重复依赖

引用依赖时,出现文件重复:如引用RxJavaAdapter和RxJava

  • 去掉其中一个文件,去掉rxjava:2.0.8

    1
    2
    compile '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
    7
    android {
    sourceSets {
    main {
    jniLibs.srcDirs = ['libs']
    }
    }
    }

中文乱码

  • Android设备上运行显示中文乱码

    1
    2
    3
    android {
    compileOptions.encoding = "GBK"
    }
  • 编码 UTF-8 的不可映射字符
    gradle2.0+是JavaCompile,否则是Compile

    1
    2
    3
    tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
    }
    1
    2
    3
    tasks.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
    6
    android {
    lintOptions {
    checkReleaseBuilds false
    abortOnError false
    }
    }

运行内存溢出

AndroidStudio运行APK时,出现java.lang.OutOfMemoryError:GC overhead limit exceeded

  • 解决方法:

    1
    2
    3
    4
    5
    android {
    dexOptions {
    javaMaxHeapSize "4g"
    }
    }

    AndroidStudio运行内存溢出

谢谢老板,请尽情用红包来蹂躏我吧!!!
0%