最適化のテストとトラブルシューティング

アプリの最適化を有効にしたら、アプリが意図したとおりに動作し、R8 構成が想定どおりに機能していることを確認します。一般的な手順は次のとおりです。

  1. アプリのクリティカル ユーザー ジャーニー(CUJ)をテストする: たとえば、ユーザーがログインしたり、その他の重要なタスクを実行したりできることを確認します。
  2. ベンチマークを使用してパフォーマンスの向上を測定する: アプリの最適化を有効にする前と有効にした後のアプリのベンチマークを測定します。

問題が発生した場合は、R8 に用意されているトラブルシューティング ツールを使用してください。R8 の問題を解決できない場合は、バグを報告してください。

一般的なヒント

R8 に関する問題は、アプリ固有のものであることが多いですが、デバッグを容易にする一般的なヒントをいくつかご紹介します。

  • 難読化を一時的にオフにする: R8 は、最適化プロセスの一環としてコードを難読化します。通常、難読化はエラーの原因ではありませんが、難読化を行うとエラーのデバッグが難しくなります。問題のあるコードを特定できるように、keep ルール ファイルに ‑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 コマンドライン ツールを利用します。このツールは、コマンドライン ツール パッケージにバンドルされています。

再トレースを使用するには、マッピング ファイルとスタック トレース ファイルを指定します。mapping.txt というマッピング ファイルは、Android App Bundle(AAB)に自動的にバンドルされます。詳しくは、再トレースのドキュメントと、クラッシュのスタック トレースの難読化を解除する方法に関する Google Play Console ヘルプセンターの記事をご覧ください。