在解决完方法数超过65535的问题后,因为项目一直在更新增长代码,后来在使用android studio生成apk时会报出:android
com.android.dex.DexException:Too many classes in --main-dex-list, main dex capacity exceededapp
此异常是说生成的第一个classes.dex文件中类超限了。。。。。。ide
解决此问题目前的一个思路是(已测试成功):测试
在build。gradle中添加一下配置内容gradle
afterEvaluate {ui
tasks.matching {lua
it.name.startsWith('dex')spa
}.each { dx ->debug
if (dx.additionalParameters == null) {code
dx.additionalParameters = []
}
//容许生成多个dex文件
dx.additionalParameters += '--multi-dex' // enable multidex
// 设置multidex.keep文件中class为第一个dex文件中包含的class,若是没有下一项设置此项无做用
dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString()
//此项添加后第一个classes.dex文件只能包含-main-dex-list列表中class
dx.additionalParameters += '--minimal-main-dex'
}
}
固然,咱们不能本身去一个一个添加classes.dex中的class,要否则还不得累死。。。。
multidex.keep文件中的内容经过如下方式获取:当运行项目报标题错误时,进入如下目录:
项目\build\intermediates\multi-dex\release(或debug)\maindexlist.txt
将maindexlist.txt中没有再application中初始化的类删除一部分以后,剩余的复制到multidex.keep文件中,将multidex.keep放到项目目录下就ok了。
multidex.keep中部分文件:
android/media/ThumbnailUtils.class android/support/multidex/MultiDex$V14.class android/support/multidex/MultiDex$V19.class android/support/multidex/MultiDex$V4.class android/support/multidex/MultiDex.class