hello, 大家好,雞年第一篇blog, 因為節后到現在一直比較忙,上班忙工作,下班忙上分,王者農藥,喝了就停不下來...
開篇語
最近接到老大一個任務:為我們的應用做瘦身.我們電商類項目到現在維護到2.7.0 APK 已經有35M了,說實話已經很大了.通過這兩天的努力把安裝包從35M瘦身到了23.8M.這其實還不是極限,由于一些原因的限制目前就到23.8M 為止.做個記錄,方便以后 review 也為大家提供參考.
安裝包的組成
不廢話直接上圖:
來看看我們 APK 結構分布:
在 Android Studio 2.2.3 開始,就加入了瀏覽 APK 結構的功能,我們直接把安裝包拖入 IDE ,就可以直接瀏覽其組成和對應大小,這樣能夠很方便的對比分析出每一步優化后的結果。
如圖, 資源文件和 lib 在 APK 中比例最高,所以重點拿這兩個地方開刀.
第一刀: 資源文件的處理
因為公司的產品比較穩定,所以一些產品圖我們保存在了 res 本地中,所以導致了 res 文件過大.其實最好的解決方法,當然是將比較大的產品圖放在后臺服務器,由于公司后臺人員最近比較忙,而且對后臺來說這個工程還是蠻大的,所以自己動手,豐衣足食咯...
我們項目中的所有圖片都是 png 格式的,這點比較好了,關于圖片處理,我首先想到的就是壓縮了.雖然 png 和其他格式圖片比,本身就比較輕量了,但是還是有很大壓縮空間的,因為產品圖,在我們項目中只是個縮略圖,不需要高保真.
找到了幾個壓縮工具:
- ImageOptim:https://imageoptim.com/mac ,支持壓縮 PNG/JPEG/GIF ,而且效果顯著,我用的就是這個工具.可以看看這里 https://www.diycode.cc/topics/496 ,遺憾的是它只支持 Mac ,Windows 黨很難過。
- TinyPNG:https://tinypng.com/ ,支持對 PNG/JPEG 文件做壓縮處理,效果不錯。
- pngquant:https://pngquant.org/ , 支持 PNG 壓縮,有時候 TinyPNG 處理過的圖片噪點會稍多,可以考慮用 pngquant 來處理。
來看下效果:
由于一些變量控制沒做到位,所以效果顯示稍差,實際 APK 大概減小2M
第二刀: lib 處理
lib 中主要是一些第三方 sdk 中的 so 文件,Native 庫瘦身主要是減小對 CPU 架構的支持.關于 CPU 架構支持,不了解的,傳送門附上:https://zhuanlan.zhihu.com/p/23102158
出于好奇,分析了下微信的 APK 發現他的 lib 下只有 armeabi ,看過上篇文章就明白了.
來看下我們的 APK 吧:
看到這個,瞬間來了精神,知道這塊瘦身空間有多大了吧.
根據我們用戶的機型分布,最終只保留了對 armeabi-v7a 支持.注意,這里需要根據自家產品的實際情況來決定。
配置起來很簡單,在 build.gradle 使用 abiFilters 配置需要用到的 CPU 架構,并將不需要兼容的 so 文件從項目中移除即可。