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,請查看對應的檔案,然後搜尋與未混淆處理的套件相符的保留規則。舉例來說,如果 dex 中有大型套件,請尋找格式為-keep com.foo.**或-keep com.foo.bar.**的保留規則。com.foo. - 請注意,程式庫消費者保留規則可能不容易識別。如果您懷疑程式庫消費者規則會影響最佳化,可以將該規則新增至使用最新版 AGP 的獨立範例應用程式,並使用 R8 設定分析器檢查,在本地進行驗證。