Android包體積優(yōu)化

隨著功能的迭代,我們的APP體積也越來越大,因此在保證功能正常的情況下盡可能的降低包體積是一個必須要面對的問題。

APK的組成結(jié)構(gòu)

image.png

通過上圖可以看出APK體積包主要包含:dex字節(jié)碼文件、META-INF簽名信息文件、manifest文件、res資源文件、lib包文件、resources.arsc 記錄資源文件和資源 ID 之間的映射關(guān)系的文件和assets 資源文件(圖片中未包含)。其中可以直接或者間接修改的是dex文件、res文件、assets 資源文件以及l(fā)ib包中的文件。

降低包體積的方案

1.使用Lint去除無用的資源文件,操作步驟是Analyze -> Run Inspection by Name -> 輸入框輸入 Unused resources 就可以掃描工程找到未使用的資源了


image.png

image.png

image.png

2.gradle配置去除無用的資源文件或者開啟混淆去除無用的代碼

buildTypes {
        release {
            //去除無用資源
            shrinkResources true
           /開啟混淆
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

注意:反射方式調(diào)用的資源會有問題。
3.資源方面手寫的xml資源替代UI給的套資源,從而減少資源占用大小。
4.資源重用,比如倒三角圖片,當我們需要正三角圖片時可以使用動畫等方式實現(xiàn),這樣一來就減少了一套資源。
5.針對png jpeg等資源進行壓縮,使用Tinypng等在線工具無損壓縮圖片,降低資源大小。
6.使用webp圖片,webp圖片提供有損壓縮,資源占用較小。使用Android Studio自帶的方式將圖片轉(zhuǎn)換成webp格式。

image.png

7.使用AndResGuard工具對資源進行混淆,不僅提高資源安全性,也能配合7z壓縮,降低資源大小。
8.國內(nèi)應(yīng)用只保留中英語音,降低資源占用

android {
...
   defaultConfig {
      ....
      resConfigs "en", "zh-rCN"
   }
}

9.去除非必要的so資源,目前市面上絕大部分的CPU架構(gòu)都是 ARMv7/ARMv8,所以可以在gradle中加入配置,只保留v7,v8。

defaultConfig {
        ...
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a' 
        }
    }

10.按需加載so文件,使用System.load()方式動態(tài)加載so文件,這樣就可以將so文件掛載在服務(wù)器上,按需下載,從而達到降低包體積效果。
11.插件化架構(gòu),將功能模塊apk掛載到服務(wù)器上,使用到再去下載。

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

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

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