1. 程式人生 > >怎樣減少 Android 應用包大小

怎樣減少 Android 應用包大小

對於移動應用來說,應用安裝包的大小當然是越小越好。特別是對於一些欠發達地區,你不希望使用者因為手機「儲存空間不足」而解除安裝你的應用。

本文就介紹了幾個小技巧來有效減少 apk 的大小:

首先,我們先用 Android Studio 提供的 APK Analyser 工具來分析下我們的 apk 檔案:

可以看到佔空間最多的主要是三個部分:classes.dex, res 和 resources.arsc。

  • classes.dex:包含有 Java 程式碼的位元組碼檔案。
  • res:包含了資原始檔,比如圖片、佈局檔案等等。
  • resources.arsc:包含所有的值資原始檔,如 strings, dimensions, styles, integers 等等。

classes.dex

classes.dex 檔案的大小完全取決於程式中方法數的多少。在上面展示的例子中,包含了 4392 個類和 29897 個方法。這個結果是預設沒有使用 proguard 的。我們有兩個預設的 proguard 檔案可以使用:

從名字上就可以看出,proguard-android-optimize.txt 是更加激進的 proguard 配置,包括和 proguard-android.txt 相同的 ProGuard 規則,但還包括其他在位元組碼一級(方法內和方法間)執行分析的優化,以進一步減小 APK 大小和幫助提高其執行速度。

可以像這樣來使用:

release
{ //Enable the proguard minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), "proguard-rules.pro" //Other parameters debuggable false jniDebuggable false renderscriptDebuggable false signingConfig playStoreConfig //Add your own signing config
pseudoLocalesEnabled false zipAlignEnabled true }

通過設定 minifyEnabled 屬性為 true,會告訴 proguard 刪除所有未使用的方法和指令,進一步的減少 .dex 檔案的大小。

方法數從 29897 減少到了 15168,大小從 3.1MB 減少到了 1.98 MB。

res

對於 res 資料夾,通常佔空間最大的就是圖片了。如果你的 Android Studio 為 2.3,並且專案的 minimum version 為 18 或以上,應該使用 webp 而不是 png 圖片。webp 圖片有更小的體積,圖片質量還沒有什麼損失。

我們可以選中 drawable 和 mipmap 資料夾,右鍵後選擇 convert to webp,將圖片轉為 webp 格式。

轉換的結果:

我們還可以在 build.gradle 中設定 shrinkResources 屬性為 true,這會在打包時刪除未使用的資源:

release{
  //...
  //...
  shrinkResources true
  //...
}

另外如果你的應用不需要支援國際化,那麼可以設定 resConfigs 為 "zh","en",即只支援中英文:

defaultConfig {
    //...
    //...
    //...

    resConfigs "zh","en"
}

這麼做是因為對於官方的 support library,預設是支援國際化的,也就是包含了很多不同語言的資原始檔,我們就可以通過這樣設定來移除用不到的語言資原始檔。

通過上面的設定,這個 App 的安裝包大小從 3.19MB 減少到了 1.89MB。當然還有很多其他的減少 apk 大小的技巧,但這裡介紹的技巧是完全可以作為你專案的預設設定

還有一點,儘量減少對第三方jar的引用

https://zhuanlan.zhihu.com/p/25865835