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 設定分析器檢查程式庫,藉此驗證程式庫。