DEX 程式碼最佳化

使用 R8 或替代工具 (例如與 ProGuard 相容的最佳化工具或次要 DEX 後處理器) 最佳化及模糊化程式碼,可縮減應用程式的 DEX 大小、提升執行階段效能,並減少記憶體用量。

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

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

如要使用指令列在本機測量應用程式套件的未壓縮 DEX 大小,請執行:

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

如果應用程式使用 R8 進行最佳化,您可以透過 R8 設定分析器,評估應用程式套件的最佳化、模糊處理和縮減程度。如需縮減、最佳化和模糊處理的詳細定義,請參閱「使用 R8 設定分析器」。R8 設定分析器報表也包含在 R8 分析器技能中。

如要檢查應用程式套件中內嵌的後最佳化中繼資料 (適用於 AGP 8.10 以上版本),請解壓縮 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 檢查,藉此在本機驗證。