在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