使用 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 檢查,藉此在本機驗證。