DEX 程式碼最佳化

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

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

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

偵測問題

當應用程式的 DEX 程式碼最佳化程度偏低時,Android Vitals 會發出提醒。包括使用 R8 的應用程式和遊戲的模糊處理、縮減和最佳化。如果應用程式未使用 R8,Android Vitals 會嘗試檢查最佳化、縮減和模糊處理率,但必要時會改用模糊處理啟發式方法做為 Proxy。

監控最佳化狀態

當應用程式未達到程式碼最佳化最低百分比時,Android Vitals 會透過 Play 管理中心發出提醒,藉此改善應用程式效能。如要詳細瞭解縮減、最佳化和模糊化,請參閱「使用 R8 設定分析器」。

如果是使用 AGP 8.10 以上版本的最新修補程式建構的應用程式,這些百分比會從內含的 r8.json 檔案中擷取。

如果是較舊版本的 AGP,或是未納入 r8.json 檔案,系統會從 mapping.txt 檔案 (如有) 計算百分比,或是在沒有對應檔案的情況下,使用 DEX 啟發式方法。

如果應用程式是透過替代的程式碼最佳化工具進行最佳化,Android Vitals 會執行分析,估算應用程式套件中模糊處理的類別、方法和欄位百分比。

DEX 總大小下限

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

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

Android Vitals 會顯示應用程式的 DEX 大小,但您也可以使用指令列在本機測量:

  unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

在本地評估 R8 程式碼最佳化

如果應用程式使用 R8 進行最佳化,您可以透過 R8 設定分析器,評估應用程式套件的最佳化、模糊處理和縮減程度。R8 分析器技能也包含 R8 設定分析器報表。雖然這份報表可協助您瞭解保留規則對最佳化、縮減和模糊化分數的影響,但報表中的百分比與 Android Vitals 中的值不符,因為這些百分比是在最佳化之前計算。

如要檢查 Android Vitals 用來計算分數的確切中繼資料,請從應用程式套件中擷取 r8.json 檔案:

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

修正問題

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

Android Gradle 外掛程式和 R8

如要提高 R8 DEX 程式碼最佳化分數,請參閱「提升 R8 最佳化效果」一文的指引。您也可以使用 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.** 的保留規則。
  • 請注意,程式庫消費者保留規則可能不容易識別。如果您懷疑程式庫消費者規則會影響最佳化,可以將該規則新增至獨立範例應用程式,並使用最新版 AGP 檢查,藉此在本機驗證。