DEX 程式碼最佳化

DEX 程式碼最佳化是 Android Vitals 的一項發現,可協助您監控及改善應用程式的編譯品質、大小和效能。使用 R8 或其他工具 (例如與 ProGuard 相容的最佳化工具或次要 DEX 後置處理器) 最佳化及模糊化程式碼,可縮減應用程式的 DEX 大小、提升執行階段效能,並盡可能減少記憶體用量。

DEX (Dalvik Executable) 檔案包含用於執行應用程式的編譯程式碼。這通常包括 Java 和 Kotlin 程式碼,而非編譯的 C++ 程式碼或 .so 檔案。

Android Vitals 會回報所有應用程式和遊戲的 DEX 程式碼最佳化指標,但只會對符合特定大小規定的應用程式和遊戲強制執行門檻。

偵測問題

如果應用程式的 DEX 程式碼最佳化、縮減或模糊處理程度未達定義的最低百分比,Android Vitals 會在 Play 管理中心發出快訊。

最佳化分數的計算方式

如果應用程式是以 AGP 8.10 以上版本的最新修補程式版本建構 (例如 8.10.1,而非 8.10.0),這些百分比會從內含的 r8.json 檔案中擷取。請務必使用 AGP 和 R8 的最新修補程式版本,以便產生準確的中繼資料。

如果應用程式是以舊版 AGP 建構,或使用不含 r8.json 的替代程式碼最佳化工具進行最佳化,Android Vitals 會使用 mapping.txt 檔案 (如有) 或 DEX 經驗法則,估算模糊處理百分比。

DEX 總大小下限

雖然 Android Vitals 會計算所有應用程式的程式碼最佳化指標,但只有在 App Bundle 符合下列 DEX 總大小規定時,您才會收到快訊:

  • 應用程式:套件包含至少 10 MB 的 DEX 程式碼 (以未壓縮大小計算)
  • 遊戲:套件包含至少 50 MB 的 DEX 程式碼 (以未壓縮大小計算)

在本機評估程式碼最佳化

如要測量應用程式套件未壓縮的 DEX 大小,並取得與 Android Vitals 發現結果相符的最佳化、縮減和模糊處理百分比,請執行 android analyze:

android analyze <yourapp>.aab

修正問題

如要解決 DEX 程式碼最佳化分數偏低的問題,請根據建構系統和最佳化工具,查看下列建議:

R8

如要提高 R8 DEX 程式碼最佳化分數,請參閱「改善 R8 最佳化」一文,並使用 R8 設定分析器,瞭解保留規則對最佳化、縮減和模糊化分數的影響 (如需這些指標的詳細定義,請參閱「瞭解報表」)。

如果您使用 Android Gradle 外掛程式 (AGP),也可以運用 R8 Analyzer 技能,取得更多最佳化應用程式保留規則的指引。如果您使用 Bazel,也可以存取 R8 設定分析器;請參閱 rules_android R8 最佳化說明文件。

非 R8 最佳化工具和 DEX 後置處理器

如果建構管道使用自訂建構工具或次要 DEX 後置處理器,請按照下列步驟改善應用程式的最佳化:

  • 在 Android Studio 中開啟應用程式套件,並在 APK 分析工具中查看。
  • 選取所有 .dex 檔案。
  • 切換「Deobfuscate names」按鈕時,請特別注意大小最大的檔案 (注意:您必須載入 mapping.txt 檔案)。如果發現部分檔案在經過模糊處理後仍維持較大大小,則可能是受到套件層級保留規則的影響。
  • 請在 proguard-rules.pro 檔案、configuration.txt 或最佳化工具的對等項目 (如果您未使用 R8) 中,搜尋與未經過模糊處理的套件相符的保留規則。舉例來說,如果 com.foo. 是 DEX 檔案中的大型套件,請尋找格式為 -keep com.foo.** 或 -keep com.foo.bar.** 的保留規則。
  • 請注意,程式庫消費者保留規則可能不那麼容易識別。如果您懷疑程式庫消費者規則會影響最佳化,可以直接使用 android analyze <library>.aar 檢查程式庫,或使用最新版 AGP 將程式庫新增至獨立範例應用程式,然後使用 R8 設定分析器檢查程式庫,藉此驗證程式庫。