啟用應用程式最佳化功能

為提供最佳使用者體驗,您應盡可能縮減應用程式大小並提升速度。我們的應用程式最佳化工具 (稱為 R8) 會移除未使用的程式碼和資源、重新編寫程式碼以提升執行階段效能等,藉此簡化應用程式。對使用者而言,這代表:

  • 更快的啟動時間
  • 提升算繪和執行階段效能
  • 減少 ANR

如要啟用應用程式最佳化功能,請在發布版本的應用程式層級建構指令碼中,設定 isMinifyEnabled = true (程式碼最佳化) 和 isShrinkResources = true (資源最佳化),如下列程式碼所示。建議您一律啟用這兩項設定。此外,我們建議您只在發布前測試的最終版應用程式 (通常是發布版本) 中啟用應用程式最佳化功能,因為最佳化會增加專案的建構時間,且由於修改程式碼的方式,可能會使偵錯更加困難。

Kotlin

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            isMinifyEnabled = true

            // Enables resource shrinking.
            isShrinkResources = true

            proguardFiles(
                // Default file with automatically generated optimization rules.
                getDefaultProguardFile("proguard-android-optimize.txt"),

                ...
            )
            ...
        }
    }
    ...
}

Groovy

android {
    buildTypes {
        release {

            // Enables code-related app optimization.
            minifyEnabled true

            // Enables resource shrinking.
            shrinkResources true

            // Default file with automatically generated optimization rules.
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')

            ...
        }
    }
}

最佳化資源縮減功能,進一步縮減應用程式大小

Android Gradle 外掛程式 (AGP) 8.12.0 版導入了最佳化資源縮減功能,目標是整合資源和程式碼最佳化作業,打造更小巧快速的應用程式。

啟用最佳化資源縮減功能

如要為 9.0.0 之前的 AGP 版本啟用新的最佳化資源縮減管道,請在專案的 gradle.properties 檔案中加入下列內容:

android.r8.optimizedResourceShrinking=true

如果您使用 AGP 9.0.0 以上版本,則無須設定 android.r8.optimizedResourceShrinking=true。在建構設定中啟用 isShrinkResources = true 時,系統會自動套用最佳化資源縮減功能。

驗證及設定 R8 最佳化設定

如要啟用 R8 的完整最佳化功能,請從專案的 gradle.properties 檔案中移除下列程式碼 (如有):

android.enableR8.fullMode=false # Remove this line from your codebase.

請注意,啟用應用程式最佳化功能後,堆疊追蹤會變得難以解讀,尤其是 R8 重新命名類別或方法名稱時。如要取得與原始碼正確對應的堆疊追蹤,請參閱「還原原始堆疊追蹤」。

如果已啟用 R8,您也應建立啟動設定檔,進一步提升啟動效能。

如果啟用應用程式最佳化功能後發生錯誤,請嘗試下列修正策略:

如要瞭解如何根據環境設定 R8,請參閱「設定 R8 的執行方式」。

AGP 和 R8 版本行為異動

下表列出各個 Android Gradle 外掛程式 (AGP) 和 R8 編譯器版本導入的主要功能。

AGP 版本 新功能
9.0 最佳化資源縮減:預設為啟用 (使用 android.r8.optimizedResourceShrinking 控制)。最佳化資源縮減有助於將資源縮減與程式碼最佳化管道整合,進而縮減應用程式大小並提升速度。同時最佳化程式碼和資源參照,找出並移除僅由未使用程式碼參照的資源。相較於先前的個別最佳化程序,這項做法有顯著進步。

如果應用程式在不同外型規格的垂直領域中分享大量資源和程式碼,這項功能就特別實用,因為應用程式大小可縮減超過 50%。因此縮減大小可減少下載量、加快安裝速度,並改善使用者體驗,包括加快啟動速度、提升算繪效果,以及減少 ANR。

程式庫規則篩選:程式庫消費者規則已不再支援全域選項 (例如 -dontobfuscate),應用程式會將其篩除。詳情請參閱「新增全域選項」。

Kotlin 空值檢查:預設為最佳化 (使用 -processkotlinnullchecks 控制)。這個版本也大幅提升了建構速度。詳情請參閱「其他最佳化作業的全域選項」。

最佳化特定套件:您可以使用 packageScope 最佳化特定套件。這項功能仍在實驗階段。詳情請參閱「使用 packageScope 最佳化指定套件」。

預設為最佳化:已停止支援 getDefaultProguardFile("proguard-android.txt"),因為其中包含應避免使用的 -dontoptimize。請改用 "proguard-android-optimize.txt"。如要在應用程式中全域停用最佳化功能,請手動將標記新增至 Proguard 檔案
8.12 資源縮減:新增初步支援 (預設為關閉。啟用使用 isShrinkResources)。資源縮減功能會與 R8 搭配運作,有效找出並移除未使用的資源。

Logcat 重新追蹤:支援在 Android Studio Logcat 視窗中自動重新追蹤。
8.6 改良回溯功能:預設會為所有 minSdk 層級回溯檔案名稱和行號 (先前在 8.2 版中需要 minSdk 26 以上)。

更新 R8 可確保您能輕鬆清楚地讀取混淆建構作業的堆疊追蹤記錄。這個版本改善了行號和來源檔案的對應方式,讓 Android Studio Logcat 等工具更容易自動將當機事件回溯至原始碼。
8.0 預設為完整模式: R8 完整模式提供更強大的最佳化功能。這項功能預設為啟用。如要停用這項功能,請使用 android.enableR8.fullMode=false
7.0 完整模式:以選擇加入功能的形式推出,使用 android.enableR8.fullMode=true 即可啟用。完整模式會對程式碼使用反射和其他動態功能的方式做出更嚴格的假設,進而套用更強大的最佳化功能。雖然這項功能可縮減應用程式大小並提升效能,但可能需要額外的保留規則,才能避免系統移除必要程式碼。