使用 packageScope 最佳化指定套件 (實驗功能)

您可以搭配使用 R8 和 packageScope,最佳化特定套件。如果應用程式尚未採用 R8,這項功能可做為選用的第一步,但如果應用程式已採用 R8,則不建議使用這項功能。

考慮是否使用 packageScope

如果應用程式已使用 R8,請勿使用 packageScope,因為就效能和應用程式大小而言,這是次佳設定。請改用改良的保留規則,強化應用程式的 R8 設定;如果使用相容模式,請遷移至 R8 的完整模式。

如果應用程式尚未採用 R8,但正在導入 R8,則可使用 packageScope 逐步管理轉換作業。由於 R8 會套用強大的最佳化功能,可能會改變應用程式行為,因此將這些最佳化功能限定在可安全最佳化的特定套件 (例如 AndroidX 和 Kotlin) 中,可讓您以最低風險獲得效能提升。應用程式穩定後,您可以逐步將這些最佳化措施擴展至其餘程式碼集和依附元件,並在每個階段測試穩定性。

必要條件

搭配 packageScope 使用 R8 的必要條件:

  • Android Gradle 外掛程式 9.0 以上版本。
  • R8 完整模式,而非相容模式。

設定最佳化

如要使用 packageScope 啟用最佳化功能,請完成下列步驟。

選擇要最佳化的媒體庫

找出要最佳化的程式庫。建議您從 AndroidX 和 Kotlin 程式庫 androidx.**kotlin.**kotlinx.** 開始,因為這些是已設定為與 R8 相容的穩定程式庫。

啟用支援,以便搭配 packageScope 使用 R8

在專案的 gradle.properties 檔案中新增下列內容:

android.r8.gradual.support=true

設定最佳化區塊

在模組層級的 build.gradle.kts (或 build.gradle) 檔案中,將 optimization 區塊新增至發布子版本建構設定。在這個區塊中,使用 packageScope 列出要最佳化的特定套件。在 build.gradle.kts 檔案中,將套件清單包裝在 setOf() 中。

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

Groovy

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

測試最佳化功能

套用或更新packageScope聲明後,請徹底測試應用程式,確認沒有發生非預期的當機或行為變更。

從最佳化指定套件,改為最佳化整個應用程式

為盡量發揮最佳化效益,您應逐步將整個應用程式從使用 packageScope 轉換為使用 R8。這個過程包括逐步擴大最佳化涵蓋範圍:

  1. 先從穩定版程式庫開始。首先,請只加入與 R8 的最佳化功能相容的常用穩定程式庫,並列在 packageScope清單中。從 AndroidX 和 Kotlin 程式庫 androidx.**kotlin.**kotlinx.** 開始。
  2. 逐步新增套件。逐步將新的套件前置字元新增至 packageScope
    1. 評估依附元件。查看應用程式的程式庫。建議加入 packageScope 清單的項目包括官方 Google 程式庫 (例如 com.google.**),以及其他穩健的程式庫 (例如 OkHttp,包括 okhttp3.**okio.**)。請優先使用不涉及大量反射、序列化或原生程式碼呼叫 (JNI) 的程式庫。
    2. 根據套件大小決定優先順序。使用 Android Studio 的 APK 分析工具,找出造成應用程式大小增加的主要因素。
      1. 關閉 R8,然後建構發布版 AAB 或 APK。
      2. 在「分析器」中開啟,並檢查 dex 檔案。
      3. 依大小排序套件。最大型套裝組合可為最佳化作業帶來最高的投資報酬率。只要這些程式庫沒有過於寬鬆的保留規則,優先指定這些程式庫就能在程序初期大幅縮減大小。詳情請參閱「明智地選擇程式庫」一文。
  3. 驗證行為變更。新增每個套件前置字串後,請進行全面測試,偵測並解決任何回歸或非預期行為。
  4. 最後再新增應用程式套件。如果應用程式套件未使用大量反射,請在 packageScope 中加入應用程式套件,並視需要逐步新增保留規則。如果應用程式套件使用大量反射,請在 packageScope 中加入這些套件,並為必要套件新增套件範圍的保留規則。反覆查看保留規則,並加以修正。
  5. 改用 R8 處理整個應用程式。應用程式的大部分依附元件都納入 packageScope 宣告,且應用程式穩定運作後,請移除 packageScope,以完整模式最佳化整個應用程式。