DEX コードの最適化

DEX コードの最適化は、アプリのコンパイルの品質、サイズ、パフォーマンスをモニタリングして改善するのに役立つ Android Vitals の検出結果です。R8 または代替ツール(ProGuard 互換の最適化ツールやセカンダリ DEX 後処理ツールなど)を使用してコードを最適化および難読化すると、アプリの DEX サイズが縮小され、ランタイム パフォーマンスが向上し、メモリ フットプリントが最小限に抑えられます。

DEX(Dalvik Executable)ファイルには、アプリの実行に使用されるコンパイル済みコードが含まれています。通常、これにはコンパイル済みの C++ コードや .so ファイルではなく、Java コードや Kotlin コードが含まれます。

Android Vitals は、すべてのアプリとゲームの DEX コード最適化指標をレポートしますが、特定のサイズ要件を満たすアプリとゲームに対してのみしきい値を適用します。

問題を検出する

Android Vitals は、アプリの DEX コードの最適化レベルが低い場合にアラートを送信します。これには、R8 を使用するアプリやゲームの難読化、圧縮、最適化が含まれます。R8 を使用していないアプリの場合、Android Vitals は最適化、縮小、難読化の割合をチェックしようとしますが、必要に応じて難読化ヒューリスティックをプロキシとして使用します。

最適化のステータスをモニタリングする

Android Vitals は、アプリがコード最適化の最小定義割合を満たしていない場合に、Google Play Console を介してアラートを送信することで、アプリのパフォーマンスの改善をサポートします。圧縮、最適化、難読化の詳細な定義については、R8 構成アナライザを使用するをご覧ください。

AGP バージョン 8.10 以降の最新パッチでビルドされたアプリの場合、これらの割合は含まれている r8.json ファイルから取得されます。

AGP のバージョンが低い場合や、r8.json ファイルが含まれていない場合、割合は mapping.txt ファイルが含まれていればそこから計算されます。マッピング ファイルが利用できない場合は、DEX ヒューリスティックを使用して計算されます。

別のコード オプティマイザーで最適化されたアプリの場合、Android Vitals は分析を行い、App Bundle 内で難読化されたクラス、メソッド、フィールドの割合を推定します。

DEX の合計サイズの最小値

Android Vitals ではすべてのアプリのコード最適化指標が計算されますが、App Bundle が次の DEX サイズの合計要件を満たしている場合にのみアラートが届きます。

  • アプリ: Bundle に、非圧縮サイズで 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 がスコアの計算に使用する正確なメタデータを調べるには、App Bundle から r8.json ファイルを抽出します。

unzip -p <yourapp>.aab BUNDLE-METADATA/com.android.tools/r8.json

問題を解決する

DEX コードの最適化スコアが低い場合は、ビルドシステムとオプティマイザーに基づいて、次の最適化案を確認してください。

Android Gradle プラグインと R8

R8 DEX コードの最適化スコアを改善するには、R8 の最適化を改善するのガイダンスをご覧ください。R8 Analyzer スキルを使用して、アプリの keep ルールの最適化に関する追加のガイダンスを取得することもできます。

R8 以外のビルドシステムと DEX 後処理ツール

ビルド パイプラインでカスタム ビルドツールまたはセカンダリ DEX ポスト プロセッサを使用している場合は、次の手順でアプリの最適化を改善します。

  • Android Studio で App Bundle を開き、APK Analyzerで確認します。
  • .dex ファイルをすべて選択します。
  • [名前の難読化を解除] ボタンを切り替える際に、サイズが最も大きいファイルに注意してください(注: これには mapping.txt ファイルのアップロードが必要です)。難読化された後もファイルサイズが大きい場合は、パッケージ全体の保持ルールが適用されている可能性があります。
  • R8 を使用していない場合は、proguard-rules.pro ファイル、configuration.txt、またはオプティマイザーの同等のファイルで、難読化されていないパッケージに一致する保持ルールを探します。たとえば、com.foo. が dex 内の大きなパッケージである場合は、-keep com.foo.** または -keep com.foo.bar.** 形式の保持ルールを探します。
  • ライブラリ コンシューマーの保持ルールは、特定が難しい場合があります。ライブラリ コンシューマー ルールが最適化に影響している疑いがある場合は、最新バージョンの AGP を使用してスタンドアロンのサンプルアプリに追加し、R8 構成アナライザで検査することで、ローカルで検証できます。