背景:隨著業(yè)務(wù)迭代额各,Apk體積逐漸變大。項(xiàng)目中積累無用資源吧恃,未壓縮的圖片等都會(huì)增加apk的size虾啦,而Apk的size會(huì)影響app運(yùn)行時(shí)的加載速度,使用內(nèi)存,耗電量等等痕寓。
基礎(chǔ):Apk的結(jié)構(gòu)如下簡(jiǎn)介:
//===============================
優(yōu)化方案:
No1:Android Size Analyzer
Android Size Analyzer 工具可輕松地發(fā)現(xiàn)和實(shí)施多種縮減應(yīng)用大小的策略傲醉。
選擇 Analyze > Analyze App Size,對(duì)當(dāng)前項(xiàng)目運(yùn)行應(yīng)用大小分析呻率。分析了項(xiàng)目后硬毕,系統(tǒng)會(huì)顯示一個(gè)工具窗口,其中包含有關(guān)如何縮減應(yīng)用大小的建議
No2: 移除未使用資源
No3:?jiǎn)⒂觅Y源縮減 (不打包)
NO4:使用Lint分析器(物理刪除)不建議的操作
lint 工具是 Android Studio 中附帶的靜態(tài)代碼分析器礼仗,可檢測(cè)到 res/ 文件夾中未被代碼引用的資源吐咳。
lint 工具不會(huì)掃描 assets/ 文件夾、通過反射引用的資源或已鏈接至應(yīng)用的庫文件元践。此外温鸽,它也不會(huì)移
除資源佳窑,只會(huì)提醒您它們的存在纫溃。 與資源縮減不同巍沙,這里點(diǎn)擊刪除,那就是把文件刪了象浑。
反射引用資源:getResources().getIdentifier("layout_main","layout",getPackageName());
No5:指定備用資源: 這樣就可以在不刪除的情況下蔫饰,針對(duì)某個(gè)國家的語言打包。
1.-->自己變異的so配置可以如上代碼所示愉豺,
2.-->針對(duì)其他平臺(tái)如:baidu地圖篓吁,bugly等提供了全平臺(tái)支持,我們可以使用productFlavor都項(xiàng)目配置蚪拦,只關(guān)注項(xiàng)目運(yùn)行設(shè)備的架構(gòu)杖剪,比如:
對(duì)于arm64架構(gòu)的設(shè)備节腐,如果使用armeabi-v7a也能夠兼容,但是不如使用arm64的so性能摘盆。因此現(xiàn)在部分應(yīng)用市場(chǎng)會(huì)根據(jù)設(shè)備提供不同架構(gòu)的Apk安裝。此時(shí)我們需要打包出針對(duì)arm64的apk與armv7a的apk饱苟,可以使用productFlavor
其他的優(yōu)化建議:
1,使用精簡(jiǎn)的依賴城须,如protobuf-lite版本蚤认;對(duì)于分模塊的庫按需引入
2,主動(dòng)移除無用代碼(開啟R8糕伐、Progurad自動(dòng)移除)
3砰琢,開啟資源混淆:https://github.com/shwenzhang/AndResGuard
4,支付寶刪除Dex debugItem https://juejin.im/post/6844903712201277448
5良瞧,發(fā)布Google paly的應(yīng)用選擇使用AAB https://developer.android.google.cn/guide/app-bundle