背景
公司項目目前處于收尾階段,對APP的更改在于一些細節和邏輯的調試。因此準備對APK進行瘦身。
瘦身前
在未進行任何瘦身操作之前,APK的大小為22150 KB 左右,大概21.6M
瘦身開始
去除無用xml和圖片
可以使用Android Studio自帶的Lint,點擊菜單欄 Analyze -> Run Inspection by Name -> unused resources -> Moudule ‘app’ -> OK,就可以查詢到那些圖片或者XML文件未被使用。
去除無用圖片、XML后,apk大小為20.3
圖片壓縮
PuppyGo這個項目,主要是兒童親子教育類型的,通過藍牙控制機器狗進行相關的交互,主要是功能性的,圖片還算多,未開始壓縮前 xhdpi 和 xxhdpi兩個文件的圖片總共16.69M
圖片壓縮這里采用Tinypng,https://tinypng.com/,一次最多可壓縮20張圖片,不超過5M。或者可以花錢使用Pro版本,對圖片數量沒有限制
點擊上圖的壓縮按鈕,選擇完圖片,即可進行壓縮,不用注冊。
壓縮完畢,點擊Download ALL 即可下載得到壓縮后的圖片
壓縮后兩個文件夾總大小6.6M,下圖壓縮了11M,重新Build apk之后的安裝包大小10.6m左右,相比之前的20.3M,壓縮還是很可觀的。
minifyEnabled混淆
在app的build.gradle設置minifyEnabled為True
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
同樣的在app的proguard-rules.pro編寫混淆規則,對自身項目的依賴庫填寫規則,例如greenDao,混淆后注意測試app各功能使用正常與否。
# greenDAO 3
-keep class org.greenrobot.greendao.**{*;}
-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
public static java.lang.String TABLENAME;
}
-keep class **$Properties
設置shrinkResources
buildTypes {
release {
minifyEnabled true
shrinkResources true
}
}
刪除未使用到代碼
也是使用Android Studio的Lint,點擊Analyze -> Run Inspection by Name ,輸入 unused declaration ,然后選 Moudule ‘app’ -> OK,即可刪除無用代碼,我這里只縮小了15K左右。。。
設置resConfigs
PuppyGo項目分為中文版和另外的英文版,因此可以設置resConfigs只支持中文
android {
defaultConfig {
resConfigs "zh"
}
}
設置前的APK大小為9451 KB(9.22M),設置后為9370KB(9.14M),縮小了0.8M.
使用Webp格式圖片
如果你沒有用Tinypng等工具進行圖片壓縮,也可以用Android Studio自帶的轉Webp工具對圖片進行格式轉換,沒有Convert to WebP這個選項的話,嘗試更新Android Studio,圖片位置右鍵,點擊Convert to WebP
轉換前大小為25KB,轉換后為11.5KB.
最后
經過以上處理,APK大小由原來的21.6M,瘦身為9.14M(使用tinypng壓縮),使用WebP格式的圖片的話,apk大小為7.8M,進一步縮小。選擇png壓縮,還是轉為WebP,自行選擇。最后的結果相對來說,效果還是不錯的,可以為用戶節省一半的流量。當然,我的項目使用了兩套圖,如果只是用720P一套圖,APK的大小將進一步縮小。