Android开发中有对APK的方法数量做限制,不能超过65536.如果超过了该数目,会遇到如下异常:
Conversion to Dalvikformat failed:Unable toexecute dex: method ID not in [0, 0xffff]: 65536
之所以出现上述问题,主要原因在于Android系统中,方法id存储在Dex文件中使用的是short类型数据,所以导致了dex中方法不能超过65k。
知道了上面的限制,那么如何知道生成的APK的方法数量呢?以及如何解决APK中方法总数超过65536并生成包。
我们可以使用dex-method-counts(https://github.com/mihaip/dex-method-counts)来统计包中的总体数量,使用方法很简单,只需执行下面语句即可:
java -jar path\dex-method-counts.jar path\App.apk
为了省却大家重新编译生成jar包问题,提供下载地址
知道了统计包中方法数量,如果超过了限制如何处理呢?
首先想到的就是去掉代码中没使用到的函数,去掉没有使用到的jar包,以及将类中成员由private换成public,减少set/get函数。但是这些都是去标不去本的方法,有没什么更好的解决方法呢?
采用类似微信方式的插件or使用分包机制。
详细内容可以参考美团提供的解决方案:
http://tech.meituan.com/mt-android-auto-split-dex.html