參考文獻:APP終極瘦身指南
http://www.jayfeng.com/2016/03/01/Android-APP%E7%BB%88%E6%9E%81%E7%98%A6%E8%BA%AB%E6%8C%87%E5%8D%97/
前言
因公司中有個項目是商城和直播融合在一體的弱左,apk包足足有50多M,因客戶推廣的需要济榨,公司需要把APK的大小再“減小”一下
瘦身前,因為平時就考慮到大小的限制浊洞,所以很多工作已經(jīng)做過了狠裹,如下列舉現(xiàn)在的狀態(tài):
1病蛉、開啟minifyEnabled
2、開啟shrinkResources
3窟哺、已經(jīng)去除不相關(guān)的大型庫
4泻轰、圖片和代碼已經(jīng)經(jīng)歷過粗略的一輪清理
所以現(xiàn)在是在這個基礎(chǔ)上再進行一輪瘦身:
1、tinypng有損壓縮
android打包本身會對png進行無損壓縮且轨,不信大家可以看看apk中的圖片的大小實際上比你代碼工程里的圖片要懈∩(針對沒進行過無損壓縮的那些png圖)。
所以旋奢,純粹的進行無損壓縮并不會對apk的減小有任何效果泳挥,這是我特別想在這里強調(diào)的一個經(jīng)驗。
現(xiàn)在大家主流的比較喜歡用的tinypng其實是有損壓縮:
[原文] TinyPNG uses smart lossy compression techniques to reduce the file size of your PNG files…
[翻譯] TinyPNG使用智能有損壓縮技術(shù)至朗,來減少PNG文件的大小…
通過tinypng確實能在盡量少的損失下再減小apk屉符,如果圖片資源多或者大的話,效果還是很明顯的。
具體減少多少矗钟,因為這個處理過程我們是間隔做的唆香,無法準確給出結(jié)果,就按200k~500k算吧吨艇。
2躬它、把png轉(zhuǎn)為jpg,再轉(zhuǎn)為webg
??注意:在4.0 ~ 4.2.1的設(shè)備上無法顯示帶有透明度的webp东涡,比如冯吓,把png轉(zhuǎn)成webp則無法顯示,但是如果把png先轉(zhuǎn)成jpg再轉(zhuǎn)成webp則能正常顯示了软啼,但會丟失透明度桑谍。參考鏈接:http://developer.android.com/guide/appendix/media-formats.html
3、大圖壓縮
如果經(jīng)過上面的步驟祸挪,依然存在大圖的話,說明確實圖有點大了贞间,可能真的有點大了贿条!所以,要考慮的問題是增热,是否有必要保證如此的大姓浴?能否縮芯稹公黑?如果這方面能減小的話,apk瘦身的效果必然又會上一個檔次摄咆。這種情況下的apk的減小是不可估量的凡蚜。
4、覆蓋aar里的一些默認的大圖吭从,去除無用的語言資源
5朝蜘、刪除armable-v7包的so和刪除x86包的so
6、微信資源壓縮打包
詳情參考:Android資源混淆工具使用說明
7涩金、proguard深度混淆代碼
8谱醇、深度清理代碼和資源
新發(fā)現(xiàn)或者新引入的無用圖片
這幾張圖怎么一樣
這個類好像沒有用
沒用的類相關(guān)的圖片也沒用
有些圖片可以用著色方案替換
有些圖片可以用shape來代替
hdpi里的ic_luancher.png好像也可以刪掉
9、proguard去符號表和去除provided關(guān)鍵字
在Proguard保留了符號表的
-keepattributes SourceFile,LineNumberTable
PS:友盟上看推廣渠道的bug要辛苦一點步做,手動上傳mapping.txt了
去除provided關(guān)鍵字
provided 'com.android.support:support-annotations:22.0.0'
10副渴、表情包在線化,圖標可以使用iconfont管理
11全度、全版本兼容的著色方案
考慮著色方案主要目的是更方便支持多主題煮剧,減輕UI工作量,減少工程里一大堆selector文件等,然后才是轿秧,順便的減小一下apk大小中跌。
12、去除重復(fù)庫菇篡、無用庫
13漩符、使用更小的庫
14、插件化