最近開發某物業公司的APP,專案寫完後感覺Apk安裝包肥了點,給它做個減肥套餐。
優化的目的
減少APK檔案大小、下載、安裝時間。
1、可以看到主要是以下部分佔用了應用大小
- classes.dex: Java位元組碼檔案
- res: 資原始檔、xml、圖片等其他檔案。
- lib: so庫、jar包。
- resources.arsc: 二進位制資源對映表
- assets: 儲存音視訊等原始資原始檔。
1. 優化Dex檔案
- minifyEnabled true proguard混淆、剔除程式碼。
- zipAlignEnabled true 4位元組對齊提高執行效率(如果在Google play上架必須開啟)
- 多餘依賴庫(專案基礎框架包含較多庫,部分庫可能這個專案沒有使用到)
External Libraries可以看到jar,根據專案檢查是不是所用到的。
經優化減少5344-4087=1257kb
2、優化Res資料夾
- 儘量保留一套圖片資源、會自動根據高低密度縮放,主流720P 、1080P放xhdpi或xxhdpi。
- 開啟shrinkResources true 剔除無效資源
- png圖片壓縮、www.tinypng.com
- webp格式 在4.2.1以上會支援比較好,4.0~4.1不支援無損、透明通道(該方案暫未使用)。
經優化減少4087-3899=188kb
3、優化so庫
- abiFilters 配置支援的cpu架構型別
so庫有很多CPU架構的如:'armeabi','armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'等,一般armeabi是相容armeabi-v7a的,v7在圖形渲染方面做了優化,如果沒有特別要求可以不需要。
經優化減少3899-3591=308kb
4、優化resources.arsc
- 有美團方案、微信方案,我選擇微信方案,關閉V2簽名。
- resConfigs zh 由於專案沒有國際化,暫支援中文
按官網配置後,選擇構建即可。
構建後可以看到,資源混淆成功。
經優化減少3591-3009=582kb
5、其它優化
- 使用自己資源覆蓋第三方未使用到的資源,比如第三方有大圖在aar裡面,但是這張大圖並沒有實際展示出來,可以放1x1大小圖片覆蓋,從而減少apk大小。
可以解壓apk檔案檢視有哪些大圖,建立1*1放到對應目錄覆蓋。
小結
最終APK大小 5.21M瘦身到2.93M,其實還可以再優化比如剔除R檔案等,這些下次再好好琢磨補充文章。
2、其他建議
- 使用外掛化(上架Google Play慎用)
- 儘量使用xml檔案代替圖片(shape,selector等)
- 剔除R檔案(這次優化還沒有用上)。
- 使用Webp格式(這個坑還沒有掌握,專案要求4.0+,還有國產手機改了rom不支援webp)
- 使用點9圖
- 使用常量代替列舉
- HTML混合開發。
參考資料
- 老司機談APK瘦身套路-專案優化篇 http://blog.csdn.net/mynameishuangshuai/article/details/51766185
- 【推薦】 Android APP終極瘦身指南 https://mp.weixin.qq.com/s/3oSsVY5mbPUdZ-jW5T-0kQ
- 愛奇藝Android移動客戶端app瘦身經驗 http://blog.csdn.net/wenyiqingnianiii/article/details/52152091
- Android資源混淆打包方案 http://blog.csdn.net/xiangzhihong8/article/details/54989020
- 微信資源混淆工具 https://github.com/shwenzhang/AndResGuard
- 剔除R檔案 https://github.com/meili/ThinRPlugin/blob/master/README.zh-cn.md
- 四位元組對齊 http://blog.csdn.net/liujianli123/article/details/47045929
打個廣告: Square開源交流 QQ群166354503 (Rxjava Retrofit EventBus MVP OKHttp等等交流)。