本文共 1627 字,大约阅读时间需要 5 分钟。
项目在很早之前方法数就超过65535,就加了google的Multidex。在第一次加入的无非就是根据api文档中的一步一步的加入到项目中:
1、配置APP的build.gradle
在配置文件中增加:
defaultConfig { // Enabling multidex support. multiDexEnabled true}
afterEvaluate {tasks.matching { it.name.startsWith('dex')}.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += '--multi-dex'}2、在代码中的Application中通过复写attachBaseContext方法中,调用MultiDex.install(this)
@Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); }
当然对于这里网上还有许多优化方案,大家可以针对这边做优化。我这里不在去copy。
这样就可以将项目分成好几个dex文件了,但是这个dex文件里面的方法数是随机的,但是不会超过65535。
今天我想说的坑是最近遇到的配置文件中的问题。由于百度加固中要求每个dex的方法数不要超过65530。之前打出来的三个dex,其中有一个恰好是65532,好吧,每次利用百度加固都不成功,没办法只能去解决限制dex中方法的数量。
通过查找网上各种资料,发现有两种方法:
1、使用gradle中增加--set-max-idx-number=48000
2、第三方的dexnkife,github地址:。使用这种方式没有成功,就决定采用第一种方式。
在gradle中增加了
afterEvaluate {tasks.matching { it.name.startsWith('dex')}.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += '--multi-dex' dx.additionalParameters += '--set-max-idx-number=48000'}
发现不起任何作用,好吧又查找资料发现这种方式gradle1.5.0之后分包的方式已经换成下面这种方式
dexOptions { javaMaxHeapSize "3g" preDexLibraries false additionalParameters '-multi-dex', '--set-max-idx-number=48000' }
加了之后发现还是不起作用,顿时感觉好崩溃。
好在看到了从gradle3.1.0之后dex编译采用D8。所以导致这种分包不成功。将gradle的版本降到3.0.0之后,分包成功,每个dex的方法都不超过48000。
另外也可以采用gradle3.1.0,然后将项目的gradle配置android.enableD8=false //暂时关闭
所以今天的目标就是看看3.1.0之后到底应该怎么设置,才能完成限制分包大小的功能
转载地址:http://giejz.baihongyu.com/