在Android项目中引入过多的jar会出现错误:android
android.dex.DexIndexOverflowException: Cannot merge new index xxxx into a non-jumbo instruction!gradle
这个错误出现的缘由是 Android设定的方法数是65536
个(DEX 64K problem),超过这个方法数,致使dex没法生成,就没法生成APK.code
限制缘由:早期的Dalvik VM内部使用short类型变量来标识方法的id,就有了 最大方法数的限制65536。io
解决方法:变量
项目维护时间长了,里面会出现再也不使用的类和再也不使用的方法,建议集中清理下,把再也不使用的方法,再也不使用的类都清除,这样的好处是代码也干净了,若是方法数超出的不是太多的话经过清理就能够让方法数减小到65536如下,通常来讲jar里面的方法数最好,清除一两个无用的jar包就能大大的减小方法数。打包
经过在defaultConfig中设置multiDexEnabled能够开启分包模式,分包以后的Dex就低于了限制数,保证了正常的打包。方法
defaultConfig { multiDexEnabled=true }
android.dexOptions { jumboMode = true }
设置dexOptions的,不作方法数限制的检查,这样作的缺点是apk没法再低版本的设备上面安装,会出现错误:项目
INSTALL_FAILED_DEXOPT时间
由于咱们项目的 minSdkVersion为14,因此我采用了第三种的解决方案,不支持低版本的Android设备。以上的解决方法只是针对gradle的设置
vi