您可以搭配使用 R8 和 packageScope,最佳化特定套件。對於尚未採用 R8 的應用程式,這項功能是選用的第一步,但對於已採用 R8 的應用程式,則不建議使用。
考慮是否使用 packageScope
如果應用程式已使用 R8,請勿使用 packageScope,因為就效能和應用程式大小而言,這是次佳設定。請改用改良的保留規則,強化應用程式的 R8 設定;如果使用相容性模式,請遷移至 R8 的完整模式。
對於尚未採用 R8 的應用程式,但正在導入 R8,請使用 packageScope 逐步管理轉換作業。由於 R8 會套用強大的最佳化功能,可能會改變應用程式行為,因此將這些最佳化功能限定在可安全最佳化的特定套件 (例如 AndroidX 和 Kotlin),可讓您以最低風險獲得效能提升。應用程式穩定後,您可以逐步將這些最佳化措施擴展至其餘程式碼和依附元件,並在每個階段測試穩定性。
必要條件
搭配 packageScope 使用 R8 時,必須使用 Android Gradle 外掛程式 9.0 以上版本。
設定最佳化
如要使用 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 { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
測試最佳化功能
套用或更新packageScope聲明後,請徹底測試應用程式,確認沒有發生非預期的當機或行為變更。
從最佳化指定套件轉換為最佳化整個應用程式
為盡量發揮最佳化效益,您應逐步將整個應用程式從使用 packageScope 轉換為使用 R8。這個過程包括逐步擴大最佳化涵蓋範圍:
- 從穩定版程式庫開始。首先,請只加入與 R8 的最佳化功能相容的常用穩定程式庫,並列在
packageScope清單中。請先使用 AndroidX 和 Kotlin 程式庫androidx.**、kotlin.**和kotlinx.**。 - 逐步新增套件。逐步將新的套件前置字串新增至
packageScope:- 評估依附元件。查看應用程式的程式庫。建議加入
packageScope清單的項目包括官方 Google 程式庫 (例如com.google.**),以及OkHttp等其他穩健的程式庫 (例如okhttp3.**和okio.**)。請優先使用不涉及大量反射、序列化或原生程式碼呼叫 (JNI) 的程式庫。 - 根據套件大小決定優先順序。使用 Android Studio 的 APK 分析工具,找出造成應用程式大小增加的主要因素。1. 建構發布版 AAB 或 APK,並關閉 R8。
1. 在分析器中開啟,並檢查
dex檔案。 1. 依大小排序套件。最大套裝組合的投資報酬率最高,最適合用於最佳化。只要這些程式庫沒有過於寬鬆的保留規則,優先指定這些程式庫就能在流程早期大幅縮減大小。詳情請參閱「明智地選擇程式庫」。
- 評估依附元件。查看應用程式的程式庫。建議加入
- 確認行為變更。新增每個套件前置字串後,請進行全面測試,偵測並解決任何回歸或非預期行為。
- 最後再新增應用程式套件。如果應用程式套件未使用大量反射,請在
packageScope中加入應用程式套件,並視需要逐步新增保留規則。如果應用程式套件使用大量反射,請在packageScope中加入套件,並為必要套件新增套件範圍的保留規則。反覆調整保留規則,直到符合需求為止。 - 改為在整個應用程式中使用 R8。應用程式的大部分依附元件都納入
packageScope宣告,且應用程式穩定運作後,請移除packageScope,以完整模式最佳化整個應用程式。