Android的極致瘦身

Android的極致瘦身

刪除無用代碼

代碼也是占用apk的大小,而且有部分代碼引用一些無關(guān)的資源,然而你想刪除這部分資源必須刪除特定的代碼

資源壓縮

  1. 第一個(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í)沒有問題

  1. 圖片格式的選擇,大圖可以選擇使用webp的格式,可以很好的壓縮圖片大小,但是有個(gè)兼容性的問題:Android4.0到Android4.2.1之間的版本不支持無損壓縮和透明格式的WebP圖片的編解碼,這個(gè)需要也可以解決使用通用自己的webp格式decode,但是這也會(huì)增加包大小,當(dāng)圖片很多時(shí),可以采取這種方式。我打的so有82K,自己權(quán)衡吧,我覺得值的。
  2. .9圖之坑,apk打包的時(shí)候會(huì)把.9圖轉(zhuǎn)成png,這時(shí)會(huì)無形中增加3倍圖片大小.如果一張很大的.9圖,最好放在網(wǎng)上,能不用大的.9圖就不用.9圖,放在外網(wǎng)時(shí)需要對(duì).9圖做特殊處理。
  3. 合并項(xiàng)目中一樣的圖,如關(guān)閉按鈕等,刪除一樣的圖
  4. 將一些不是很重要的圖放服務(wù)器下載,有可能的話使用webp,放網(wǎng)上也能節(jié)省流量。我這里是剔除了所有大于10K的圖。
  5. 使用cocosjs的朋友,可以將打成的圖集過下TinyPNG,能節(jié)省不少。
  6. 資源盡量放在drawable-xhdpi中,一些適配的資源可以單獨(dú)抽出來放,大部分資源沒必要放很多
  7. 如果支持的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)化和工具使用

  1. 在gradle使用minifyEnabled進(jìn)行Proguard混淆的配置
android {
    buildTypes {
        release {
            minifyEnabled true
        }
    }
}
  1. 開啟shrinkResources去除無用資源
android {
    buildTypes {
        release {
            shrinkResources true
        }
    }
}
  1. 清理無用資源
    通過Android Studio自帶的 “Remove Unused Resources”小插件來實(shí)現(xiàn)了,但是在某些大型項(xiàng)目上這個(gè)是不好使的。刪除后很大概率編譯失敗或部分頁面掛死、無圖等問題。
  2. 刪除無用的語言資源
android {
    defaultConfig {
        resConfigs "zh"
    }
}
  1. 微信資源壓縮打包工具通過短資源名稱,采用7zip對(duì)APP進(jìn)行極致壓縮實(shí)現(xiàn)減小APP的目標(biāo),效果非常的好。建議開啟7zip,注意白名單的配置
  2. 針對(duì)so的7z壓縮方案,如果項(xiàng)目so多的話,可以節(jié)省很多空間。
    https://github.com/liyuming1978/NativeLibCompression
  3. 支持插件化,這個(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ù))就不需要了,建議酌情選擇

  1. 清理第三方庫和冗余代碼,比如httpclient4.3 jar等等公共基礎(chǔ)庫
  2. Facebook的redex優(yōu)化字節(jié)碼

另外,據(jù)反應(yīng)redex后會(huì)有崩潰的現(xiàn)象,這個(gè)要留意一下,我這里壓縮之后都是可以正常運(yùn)行的

綜上:我們?cè)瓉?9M左右大小的包 優(yōu)化后大約34.27M

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容