main_dex 撑爆问题
这是一个众所周知的问题,很难在不久的将来得到修复。问题是 Dalvik 只支持65535(2 ^ 16 - 1)个类。一旦所有设备都使用原生ART,它就不再是问题了。其实是Dalvik的bug
方案分析:
1.将app/gradle中minSdkVersion改为21。(这个是趋势,但是不适用所有企业,有的企业为了更宽广的用户面,会要求兼容到4.x)
(ps:一,Android 4.4开始开始引入ART,到5.0已经成为默认选择. 二,Android 5.0 21 LOLLIPOP)
2.将dx参数中keepRuntimeAnnotatedClasses设为false。特别是用到了注解的项目要记得配置这个属性.
android {
...
dexOptions {
// annotation keep,即是否保留运行时的注解
keepRuntimeAnnotatedClasses false
}
}
部分同学添加这个属性后可以解决,部分同学添加主dex依然撑爆,请同时使用最终解决方案
3.先来看下Multidex的编译过程,它由三个不同的gradle task组成:
1、collect{variant}MultiDexComponents task
这个task会读取项目的AndroidManifest.xml文件中注册的application、Activity、servi

当遇到DexException: Too many classes in --main-dex-list错误时,这是由于Dalvik仅支持65535个类导致的。文中详细分析了Multidex的编译过程,包括collectMultiDexComponents、shrinkMultiDexComponents和createMainDexClassList任务,并提出通过修改maindexlist.txt文件的解决方案,具体包括新增gradle任务,排除不需要的类,然后替换maindexlist.txt。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



