作爲應用的使用者而言,apk的體積越小當然是越喜歡的。這樣不僅能節省手機的存儲空間,並且在應用市場下載的速度也快加快。所以,對於開發者來說,瞭解常用的apk瘦身技術是不可避免的。
一、圖片瘦身
1、webP使用
先看一張截圖
原始圖片爲png格式,大小爲38.5kb,經過轉換後大小爲6.7kb,僅僅是原圖的17%。但是使用webP要求手機最低支持版本爲api18 計版本4.3。如果你需要從4.0版本開始,就不用了考慮方式了,高於4.3版本,這樣圖片格式應該優先選擇。
webP批量轉換工具下載地址:谷歌官網webp轉換工具需要翻牆。其他方式可以自行百度。
2、png壓縮
png圖片相當於jpg圖片多了透明通道,所以它會佔用更大的內存,可以藉助工具對它壓縮
- 可以採用ImageOptim或者Pngyu對png進行壓縮;
- aapt會使用內置的壓縮算法來優化res/drawable/目錄嚇的PNG圖片,單也可能會導致本來已經優化過的圖片體積變大,這裏需要禁用aapt優化png圖片。
aaptOptions{
cruncherEnabled = false
}
3、jpg壓縮
使用packJPG或者guetzli工具壓縮jpg圖片。
4、使用shape
對於純色背景可以使用shape替換,萌購用代碼實現的,儘量用代碼實現
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="0dp"/>
<solid android:color="#f00"/>
</shape>
二、res資源壓縮
1、開啓代碼混淆和去除無用資源
buildTypes {
release {
shrinkResources true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
2、使用微信開源框架AndResGuard工具,對資源進一步混淆
配置參考github,微信AndResGuard資源混淆。
三、冗餘代碼優化
- 使用工具,可以使用PMD等
- 下載PMD 地址:pmd代碼冗餘檢測下載地址。
- 配置及使用截圖如下,可以根據官方指導
四、Lint使用
打開android studio。依次選擇 Analyze-》Run Inspection By Name-》輸入要檢測的內容。
比如檢測無用資源,輸入unused resources
比如檢測無用代碼,輸入unused declaration
五、其他優化
1、壓縮存儲文件
比如存放在assets下的文件可以採用7Zip壓縮,在使用的時候進行解壓。
2、語言資源優化
在build.gradle中配置指定需要的語言類型
defaultConfig {
...
...
// 只保留指定和默認資源 ,中文和英文
//當應用不需要支持幾十種語言時,可以通過配置 resConfigs 去除無用的語言資源。
resConfigs('zh-rCN', 'en')
}
3、指定abi
defaultConfig {
...
...
ndk{
abiFilter("armeabi-v7a","x86")
}
}
4、減少Enum使用
沒減少一個Enum的使用,可以減少1KB的大小,可以使用定義常量的替換方式。
六、split
使用split拆分包。比如我們的項目中在mdpi、hdpi、xhdpi…都有一份圖片,當然這樣做就是爲了適配不同的屏幕尺寸,防止圖片變形。但是如果我們需要對特定的屏幕尺寸,我們可能就只需要一個目錄下的圖片,這樣就需要藉助split了。如下,根據分辨率進行適配
android {
...
splits {
density {
enable true
exclude "ldpi", "hdpi", "xxxhdpi"
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
...
}
- exclude :包含的資源目錄
- compatibleScreens :適配的屏幕尺寸
除了能夠適配資源外,還可以根據支持cpu架構的so進行拆分。 如果你的apk中引入了第三方庫比如推送類的服務,demo中一般會提供不同cpu架構的so庫,我們一般的做法是把所有的so都放到libs下,這樣做發現apk的體積瞬間暴漲。這樣就需要使用split了。
android {
...
splits {
abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk true
}
}
}
七、總結:
針對以上優化,優化效率最高的應該是圖片的壓縮,所以圖片的選擇對於apk的大小影響很大。另外第三方庫,so庫的合理使用同樣影響它的體積。針對混淆能夠避免我們的代碼沒有那麼容易被別人竊取。