? ? ? ? ?? 在Android應(yīng)用里怎么解決爆棚問題
引言:
如果App引用的庫太多,方法數(shù)超過65536后無法編譯。這是因為單個dex里面不能有超過65536個方法。為什么有最大的限制呢, 因為android會把每一個類的方法id檢索起來,存在一個鏈表結(jié)構(gòu)里面。但是這個鏈表的長度是用一個short類型來保存的, short占兩個字節(jié)(保存-2的15次方到2的15次方-1,即-32768~32767),最大保存的數(shù)量就是65536。新版本的Android系統(tǒng)中修復(fù)了這個問題, 但是我們?nèi)匀恍枰獙Φ桶姹镜腁ndroid系統(tǒng)做兼容。
解決方法有如下幾個:
?1.精簡方法數(shù)量,刪除沒用到的類、方法、第三方庫。
?2.使用ProGuard去掉一些未使用的代碼
?3.復(fù)雜模塊采用jni的方式實現(xiàn),也可以對邊緣模塊采用本地插件化的方式。?
4.分割Dex。本文介紹最后一種方法
配置操作:
dex文件拆成兩個或多個,為此谷歌官方推出了multidex兼容包,配合AndroidStudio實現(xiàn)了一個APK包含多個dex的功能。 Android 的 Gradle插件在 Android Build Tool 21.1開始就支持使用multidex了。
1.修改Gradle的配置,支持multidex:
2.第二步分三種情況:
a.如果沒有重寫Application,在manifest文件中,在application標(biāo)簽下添加MultidexApplication Class的引用,看配置:
b.如果重寫了Application,可以讓自定義Applicationd繼承android.support.multidex.MultiDexApplication。
c.如果重寫了Application并且已經(jīng)繼承了其他Application類,可以重寫attachBaseContext()方法,并添加語句MultiDex.install(this);看代碼:
沒什么特別問題,到這里就可以了,你的分包就完成了。
注意事項:Application 中的靜態(tài)全局變量會比MutiDex的 install()方法優(yōu)先加載,所以建議避免在Application類中使用靜態(tài)變量引用 main classes.dex文件以外dex文件中的類。