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