測試並排解最佳化問題

啟用應用程式最佳化功能後,請確認應用程式能正常運作,且 R8 設定能正常運作。一般步驟如下:

  1. 測試應用程式的關鍵使用者歷程 (CUJ):例如,請確認使用者可以登入及執行其他重要工作。
  2. 使用基準測試評估效能提升幅度:在啟用應用程式最佳化功能前後,對應用程式進行基準測試

如果發現問題,R8 提供的工具可協助您排解問題。如果無法解決 R8 問題,請回報錯誤

常見提示

R8 的問題通常是應用程式特有的,但以下提供一些一般提示,方便您進行偵錯:

  • 暫時關閉模糊處理:R8 會在最佳化程序中模糊處理程式碼。模糊處理通常不會造成錯誤,但會讓錯誤更難偵錯。將 ‑dontobfuscate‑dontoptimize 標記新增至保留規則檔案,協助您找出有問題的程式碼。
  • 檢查是否有反射:如果您遇到「no such element」例外狀況,例如

    Caused by: java.util.NoSuchElementException: Collection contains no element matching the predicate in the stack trace ,

    這個例外狀況通常表示問題的欄位是透過反射使用,因此您必須新增保留規則。

  • 檢查位元碼:大部分 R8 問題都需要檢查位元碼,您可以使用 APK Analyzer 等工具來檢查。

查看套用的規則

如要輸出 R8 建構專案時適用的所有規則,請在應用程式模組的 proguard‑rules.pro 檔案中加入下列內容:

-printconfiguration <output-dir>/<report-name>.txt

您可以指定任何路徑和檔案名稱。如果您未指定路徑或檔案名稱,R8 會在 <module-name>/build/outputs/mapping/<build-type>/configuration.txt 輸出規則報表。

瞭解為何保留程式碼

如果您看到預期會移除的保留程式碼,請使用設定選項 ‑whyareyoukeeping,瞭解程式碼保留的原因。R8 會輸出從保留程式碼到應用程式其中一個進入點的路徑。詳情請參閱 Proguard 手冊中的 ‑whyareyoukeeping 說明文件。

復原原始堆疊追蹤

R8 處理的程式碼會透過各種方式變更,因此堆疊追蹤不再參照原始程式碼。舉例來說,您可以變更行號和類別與方法的名稱。如要復原原始堆疊追蹤,R8 提供「retrace」指令列工具,此工具包含在指令列工具套件中。

如要使用 Retrace,請提供對應檔案和堆疊追蹤檔案。命名為 mapping.txt 的對應檔案會自動與 Android App Bundle (AAB) 一起封裝。詳情請參閱「retrace」說明文件,以及 Play 管理中心的說明中心文章,瞭解如何針對當機時的堆疊追蹤去模糊化