The number of method references in xxx.dex file cannot exceed 64K问题
背景:最近给移动公司写的项目,随着时间的推移,需求越来越多,引入的library越来越多,项目也越来越大,某一天编译工程时,出现了dex 64k问题。
问题1:某一天,当引入一个library以后,编译工程,出现了错误:The number of method references in xxx.dex file cannot exceed 64K.
分 析:当引入的内容太多达到android工程构建的极限时,便会遇到dex exceed 64K的构建错误。
解决方案:需要在.gradle文件中,配置multiDexEnabled属性为true。这样配置以后,可以将dex文件进行分包处理,Android 构建工具根据需要,会构建主 dex (classes.dex) 和 辅助 dex(classes2.dex、classes3.dex)。随后构建系统会将它们打包成一个 APK 文件进行分发。反编译一些稍大的app,会发现,里面通常会有几个.dex文件,就是进行了分包处理。(前提是:Android SDK Build Tools >=21.1,小于21.1的构建工具不支持分包处理)。
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 110
versionName "x.x.x"
multiDexEnabled true
}
分 析:进行分包配置以后,在构建项目时,需要消耗更多的时间和内存,当内存超过最大限制时,就会OOM。
解决方案:扩展最大的memory限制,在.gradle文件中配置dex操作的max heap size。这里按照google各位大神的推荐,用了4g。
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 110
versionName "x.x.x"
multiDexEnabled true
}
dexOptions{
javaMaxHeapSize "4g"
}