2019-07-21

? ? ? ? ?? 在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文件中的類。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容