Best Practices to Slim Down Your App Size (Google I/O ’17)
整理一下看完 Best Practices to Slim Down Your App Size(Google I/O ’17)的心得。
動機
當手機空間不夠用時,大多數的使用者會先將佔最多容量的App給刪除,要讓你的App免於被刪除的窘境,最好的方式就是降低App的大小。
兩種App Size
Download Size
使用者在Play Store上看到的檔案大小,多數使用者看到檔案太大時,會取消安裝。
Installed Size
在手機上實際的大小(在設定應用程式頁面看到的大小),有時候可能是 Download Size的兩到三倍大。
我們可以從Android Studio,Build → Analyze APK查看APK詳細的使用大小
降低APK Size的方式
Proguard
Java的一套優化程式碼工具,主要提供三個功能
- 優化程式碼
- 混淆程式碼
- 移除未使用的程式碼
將程式碼以更簡短的方式去編譯,大幅地減少Dex檔的大小。
只要在Gradle做以下設定
android {
buildTypes {
release {
minifyEnabled true
}
}
}
可以看到,使用之後classes.dex明顯變小了
Resource Shrinking
會將用不到的Resource會自動被清除,使用方法如下:
android {
buildTypes {
release {
shrinkResources true
}
}
}
Support Only Specific Densities
- 將佔很少部分的裝置尺寸給移除
- 只提供xxhdpi尺寸,讓Android自動去縮放圖片
- 產生多種尺寸的APK(參照以下設定)
android {
splits {
density {
enable true
}
}
}
Use Vector Drawables
向量圖的特性是:One asset, all densities、不失真、檔案較小,向量圖會根據裝置解析度的不同,產生最佳解析度的圖片,因此會增加CPU及RAM的使用率,在小尺寸的裝置上效能可能會是一個問題。
android {
defaultConfig {
vectorDrawables.useSupportLibrary true
}
}
Resources.arsc
resConfigs可以讓我們選擇哪些資源要被Build進APK,沒有列的就不會被Build進APK了。
android {
defaultConfig {
...
resConfigs "en"
}
}
AppCompat / Google Play Services 這些常見的library,通常支援多國語系,當我們使用他們時,string resource會被引入許多用不到的字串翻譯。
Downloadable fonts
若不是使用預設字體,其他特殊字體必須包在APK中,因而增加APK的Size,在Android O提供了一個新的東西Font Provider — — 所有的字體皆由他管理,需要字體時就找他!Android3.0可以選擇Downloadable fonts。
AAPT2
- Version collapsing:根據最低支援版本,整合Resource。
- Resource deduplication:自動刪除重複的字串
在Android3.0穩定版會預設啟用aapt功能,目前若要使用的話,只要在gradle.properties做以下設定即可啟用aapt2功能
android.enableAapt2 = true