Android的極致瘦身
刪除無用代碼
代碼也是占用apk的大小,而且有部分代碼引用一些無關(guān)的資源,然而你想刪除這部分資源必須刪除特定的代碼
資源壓縮
- 第一個(gè)壓縮是通過TinyPNG網(wǎng)站進(jìn)行壓縮的。這里的壓縮也有個(gè)好處,當(dāng)你圖片格式選擇
BitmapFactory.decodeByteArray(b, 0, b.length, opt);
opt.inPreferredConfig = Bitmap.Config.RGB_565;
或者inPreferredConfig不填時(shí),占用內(nèi)存會(huì)小3/4.這個(gè)會(huì)對(duì)通道有影響,但是在大部分圖片的現(xiàn)實(shí)沒有問題
- 圖片格式的選擇,大圖可以選擇使用webp的格式,可以很好的壓縮圖片大小,但是有個(gè)兼容性的問題:Android4.0到Android4.2.1之間的版本不支持無損壓縮和透明格式的WebP圖片的編解碼,這個(gè)需要也可以解決使用通用自己的webp格式decode,但是這也會(huì)增加包大小,當(dāng)圖片很多時(shí),可以采取這種方式。我打的so有82K,自己權(quán)衡吧,我覺得值的。
- .9圖之坑,apk打包的時(shí)候會(huì)把.9圖轉(zhuǎn)成png,這時(shí)會(huì)無形中增加3倍圖片大小.如果一張很大的.9圖,最好放在網(wǎng)上,能不用大的.9圖就不用.9圖,放在外網(wǎng)時(shí)需要對(duì).9圖做特殊處理。
- 合并項(xiàng)目中一樣的圖,如關(guān)閉按鈕等,刪除一樣的圖
- 將一些不是很重要的圖放服務(wù)器下載,有可能的話使用webp,放網(wǎng)上也能節(jié)省流量。我這里是剔除了所有大于10K的圖。
- 使用cocosjs的朋友,可以將打成的圖集過下TinyPNG,能節(jié)省不少。
- 資源盡量放在drawable-xhdpi中,一些適配的資源可以單獨(dú)抽出來放,大部分資源沒必要放很多
- 如果支持的so的版本不多的話盡量放在armeabi中,不使用其他的so,如果不能的話,會(huì)有一個(gè)壓縮的庫供大家選擇,下面會(huì)具體介紹的,so可以使用7Z再次壓縮。有compile的包使用如下的代碼放gradle
ndk {
// 設(shè)置支持的SO庫架構(gòu)
abiFilters 'armeabi' //, 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a'
}
gradle優(yōu)化和工具使用
- 在gradle使用minifyEnabled進(jìn)行Proguard混淆的配置
android {
buildTypes {
release {
minifyEnabled true
}
}
}
- 開啟shrinkResources去除無用資源
android {
buildTypes {
release {
shrinkResources true
}
}
}
- 清理無用資源
通過Android Studio自帶的 “Remove Unused Resources”小插件來實(shí)現(xiàn)了,但是在某些大型項(xiàng)目上這個(gè)是不好使的。刪除后很大概率編譯失敗或部分頁面掛死、無圖等問題。 - 刪除無用的語言資源
android {
defaultConfig {
resConfigs "zh"
}
}
- 微信資源壓縮打包工具通過短資源名稱,采用7zip對(duì)APP進(jìn)行極致壓縮實(shí)現(xiàn)減小APP的目標(biāo),效果非常的好。建議開啟7zip,注意白名單的配置
- 針對(duì)so的7z壓縮方案,如果項(xiàng)目so多的話,可以節(jié)省很多空間。
https://github.com/liyuming1978/NativeLibCompression - 支持插件化,這個(gè)需要拆分代碼,我們還在努力拆分中。
插件化技術(shù)支持動(dòng)態(tài)的加載代碼和動(dòng)態(tài)的加載資源,把APP的一部分分離出來了,對(duì)于業(yè)務(wù)龐大的項(xiàng)目來說非常有用,極大的分解了APP大小。
因?yàn)椴寮夹g(shù)需要一定的技術(shù)保障和服務(wù)端系統(tǒng)支持,有一定的風(fēng)險(xiǎn),如無必要(比如一些小型項(xiàng)目,也沒什么擴(kuò)展業(yè)務(wù))就不需要了,建議酌情選擇
- 清理第三方庫和冗余代碼,比如httpclient4.3 jar等等公共基礎(chǔ)庫
- Facebook的redex優(yōu)化字節(jié)碼
另外,據(jù)反應(yīng)redex后會(huì)有崩潰的現(xiàn)象,這個(gè)要留意一下,我這里壓縮之后都是可以正常運(yùn)行的
綜上:我們?cè)瓉?9M左右大小的包 優(yōu)化后大約34.27M