**
如何自定义dex内最大方法数
**
分包的需求
公司最近要求使用“梆梆加固”,但是很奇怪的提示加固失败。问了一圈安全部的同事后得知dex文件超过了65300。。。直接黑人问号脸,不是都是65535么?咋这个加固要求和别人不一样?算了算了,公司要求,我照做呗。
找方法
由于本来公司安装包就很大,直接使用了谷歌推荐的multiDex来解决。所以当安全部同事反馈方法数超过的时候很奇怪,咱不是做了分包嘛!还是先检查一下dex内方法数吧!
相比自定义dex最大方法数,检查现有dex方法数网上还是比较多的,参考一下android检测apk及dex方法数方法,成功检查出classes.dex方法数超过了
现在明确知道dex内方法数多少,接下来就是如何定义最大方法数了。
本来嘛,咱们都知道,方法数超过65535的时候,只需要
1、multiDexEnabled置为true
2、引入compile ‘com.android.support:multidex:1.0.0’,这个主要是为了加载dex使用,因为应用默认只会加载主dex,所以其他的dex需要我们自己来加载。
3、分包就ojbk了。
但是·····这只能限制dex文件内方法数少于65535,偏偏用的加固软件必须得少于63000.纠结。。。不过,在对比网上现有分包方法后,发现要么是用脚本,要么是用各种繁琐的方法,有没有一种很简单很easy的呢?
这时候突然想到了,as打包实际上是使用gradle来帮助操作的,那么····我找找gradle相关设置或者代码是不是就能解决了???
233333333机智如我啊!利用这样的设置,直接在主module的gradle中的android段添加
dexOptions {
incremental true
javaMaxHeapSize "4g"
preDexLibraries = false
additionalParameters = [//dex参数详见 dx --help
'--multi-dex',//多分包
'--set-max-idx-number=60000',//每个包内方法数上限
// '--main-dex-list='+projectDir+'/castielmaindexlist.txt',//打包进主classes.dex的文件列表
'--minimal-main-dex'//使上一句生效
]
}
那么就可以直接将dex内方法数限制在60000以下。emmm,又简单又方便,就是总感觉自己是在偷懒,不过,越高效的代码实际上就越让人偷懒嘛!
不过,切记啊!如果你需要使用as直接将应用安装到手机上时,咱们必须得将这段给注释了,不然会提示各种稀奇古怪的错误。emmm,还是有必要继续研究研究gradle的
preDexLibraries = false
additionalParameters = [//dex参数详见 dx --help
'--multi-dex',//多分包
'--set-max-idx-number=60000',//每个包内方法数上限
// '--main-dex-list='+projectDir+'/castielmaindexlist.txt',//打包进主classes.dex的文件列表
'--minimal-main-dex'//使上一句生效
]
/