某物業Apk減肥 從5344KB到3009KB

Android_張德帥發表於2017-12-20

最近開發某物業公司的APP,專案寫完後感覺Apk安裝包肥了點,給它做個減肥套餐。

image

優化的目的

減少APK檔案大小、下載、安裝時間。

1、可以看到主要是以下部分佔用了應用大小

image

  1. classes.dex: Java位元組碼檔案
  2. res: 資原始檔、xml、圖片等其他檔案。
  3. lib: so庫、jar包。
  4. resources.arsc: 二進位制資源對映表
  5. assets: 儲存音視訊等原始資原始檔。

1. 優化Dex檔案

  1. minifyEnabled true proguard混淆、剔除程式碼。
  2. zipAlignEnabled true 4位元組對齊提高執行效率(如果在Google play上架必須開啟)
  3. 多餘依賴庫(專案基礎框架包含較多庫,部分庫可能這個專案沒有使用到)

image

External Libraries可以看到jar,根據專案檢查是不是所用到的。

經優化減少5344-4087=1257kb

image

2、優化Res資料夾

  1. 儘量保留一套圖片資源、會自動根據高低密度縮放,主流720P 、1080P放xhdpi或xxhdpi。
  2. 開啟shrinkResources true 剔除無效資源
  3. png圖片壓縮、www.tinypng.com
  4. webp格式 在4.2.1以上會支援比較好,4.0~4.1不支援無損、透明通道(該方案暫未使用)。

image

經優化減少4087-3899=188kb

3、優化so庫

  1. abiFilters 配置支援的cpu架構型別

so庫有很多CPU架構的如:'armeabi','armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'等,一般armeabi是相容armeabi-v7a的,v7在圖形渲染方面做了優化,如果沒有特別要求可以不需要。

經優化減少3899-3591=308kb

4、優化resources.arsc

  1. 有美團方案、微信方案,我選擇微信方案,關閉V2簽名。
  2. resConfigs zh 由於專案沒有國際化,暫支援中文

按官網配置後,選擇構建即可。

image

構建後可以看到,資源混淆成功。

image

image

經優化減少3591-3009=582kb

5、其它優化

  1. 使用自己資源覆蓋第三方未使用到的資源,比如第三方有大圖在aar裡面,但是這張大圖並沒有實際展示出來,可以放1x1大小圖片覆蓋,從而減少apk大小。

image

可以解壓apk檔案檢視有哪些大圖,建立1*1放到對應目錄覆蓋。

小結

最終APK大小 5.21M瘦身到2.93M,其實還可以再優化比如剔除R檔案等,這些下次再好好琢磨補充文章。

2、其他建議

  1. 使用外掛化(上架Google Play慎用)
  2. 儘量使用xml檔案代替圖片(shape,selector等)
  3. 剔除R檔案(這次優化還沒有用上)。
  4. 使用Webp格式(這個坑還沒有掌握,專案要求4.0+,還有國產手機改了rom不支援webp)
  5. 使用點9圖
  6. 使用常量代替列舉
  7. HTML混合開發。

參考資料

  1. 老司機談APK瘦身套路-專案優化篇 http://blog.csdn.net/mynameishuangshuai/article/details/51766185
  2. 【推薦】 Android APP終極瘦身指南 https://mp.weixin.qq.com/s/3oSsVY5mbPUdZ-jW5T-0kQ
  3. 愛奇藝Android移動客戶端app瘦身經驗 http://blog.csdn.net/wenyiqingnianiii/article/details/52152091
  4. Android資源混淆打包方案 http://blog.csdn.net/xiangzhihong8/article/details/54989020
  5. 微信資源混淆工具 https://github.com/shwenzhang/AndResGuard
  6. 剔除R檔案 https://github.com/meili/ThinRPlugin/blob/master/README.zh-cn.md
  7. 四位元組對齊 http://blog.csdn.net/liujianli123/article/details/47045929

打個廣告: Square開源交流 QQ群166354503 (Rxjava Retrofit EventBus MVP OKHttp等等交流)。

相關文章