DexException: Too many classes in --main-dex-list, main dex capacity exceeded

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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组成:

这个task会读取项目的AndroidManifest.xml文件中注册的application、Activity、servi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值