最近開發某物業公司的APP,項目寫完後感受Apk安裝包肥了點,給它作個減肥套餐。java
優化的目的git
減小APK文件大小、下載、安裝時間。github
一、能夠看到主要是如下部分佔用了應用大小
- classes.dex: Java字節碼文件
- res: 資源文件、xml、圖片等其餘文件。
- lib: so庫、jar包。
- resources.arsc: 二進制資源映射表
- assets: 存儲音視頻等原始資源文件。
1. 優化Dex文件
- minifyEnabled true proguard混淆、剔除代碼。
- zipAlignEnabled true 4字節對齊提升運行效率(若是在Google play上架必須開啓)
- 多餘依賴庫(項目基礎框架包含較多庫,部分庫可能這個項目沒有使用到)
External Libraries能夠看到jar,根據項目檢查是否是所用到的。web
經優化減小5344-4087=1257kb微信
二、優化Res文件夾
- 儘可能保留一套圖片資源、會自動根據高低密度縮放,主流720P 、1080P放xhdpi或xxhdpi。
- 開啓shrinkResources true 剔除無效資源
- png圖片壓縮、www.tinypng.com
- webp格式 在4.2.1以上會支持比較好,4.0~4.1不支持無損、透明通道(該方案暫未使用)。
經優化減小4087-3899=188kb架構
三、優化so庫
- abiFilters 配置支持的cpu架構類型
so庫有不少CPU架構的如:'armeabi','armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'等,通常armeabi是兼容armeabi-v7a的,v7在圖形渲染方面作了優化,若是沒有特別要求能夠不須要。app
經優化減小3899-3591=308kb框架
四、優化resources.arsc
- 有美團方案、微信方案,我選擇微信方案,關閉V2簽名。
- resConfigs zh 因爲項目沒有國際化,暫支持中文
按官網配置後,選擇構建便可。工具
構建後能夠看到,資源混淆成功。優化
經優化減小3591-3009=582kb
五、其它優化
- 使用本身資源覆蓋第三方未使用到的資源,好比第三方有大圖在aar裏面,可是這張大圖並無實際展現出來,能夠放1x1大小圖片覆蓋,從而減小apk大小。
能夠解壓apk文件查看有哪些大圖,建立1*1放到對應目錄覆蓋。
小結
最終APK大小 5.21M瘦身到2.93M,其實還能夠再優化好比剔除R文件等,這些下次再好好琢磨補充文章。
二、其餘建議
- 使用插件化(上架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等等交流)。