原因
当app的方法数超过65535时生成的apk将无法安装,此时需要进行分包,在打包时将应用的代码分成多个dex,使住dex的方法数不超过系统限制。应用在启动或运行过程中,首先是主dex启动运行,再加载从dex。
分包
Gradle是android studio的构建工具。随着Gradle的升级完善,功能越来越强大,但改变也随之而来。具体不知道是从哪个Gradle版本开始的原先使用的在afterEvaluate区域配置分包的方式没法使用了,更加简单化的dexOptions分包配置出现了。
某Gradle版本之前
afterEvaluate {
tasks.matching {
it.name.startsWith('dex')
}.each { dx ->
def listFile = projectDir+'/maindexlist.txt'
if (dx.additionalParameters == null) {
dx.additionalParameters = []
} else {
dx.additionalParameters += '--multi-dex'
dx.additionalParameters += '--main-dex-list='+listFile
dx.additionalParameters += '--minimal-main-dex'
}
}
}
某Gradle版本之后
dexOptions {//dex配置
javaMaxHeapSize "4g"
preDexLibraries = false
additionalParameters = [//dex参数详见 dx --help
'--multi-dex',//多分包
'--set-max-idx-number=60000',//每个包内方法数上限
'--main-dex-list='+projectDir+'/maindexlist.txt',//打包进主classes.dex的文件列表
'--minimal-main-dex'//使上一句生效
]
}
其中打包进主classes.dex的文件列表放在build.gradle同目录下的maindexlist.txt中
com/sjl/multidexdemo/MainActivity.class