Too many classes in --main-dex-list

本文介绍了在使用Android Studio生成APK时遇到的com.android.dex.DexException异常的解决方法,通过在build.gradle中添加特定配置来启用多dex功能,并从maindexlist.txt文件中获取需要包含在第一个dex文件中的类。

在解决完方法数超过65535的问题后,由于项目一直在更新增加代码,后来在使用android studio生成apk时会报出:

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

 此异常是说生成的第一个classes.dex文件中类超限了。。。。。。

解决此问题目前的一个思路是(已测试成功):

在build。gradle中添加一下配置内容

    afterEvaluate {

        tasks.matching {

            it.name.startsWith('dex')

        }.each { dx ->

            if (dx.additionalParameters == null) {

                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


转载于:https://my.oschina.net/u/992018/blog/482963

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值