DEX コードの最適化

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

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

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

問題を検出する

Android Vitals を使用すると、アプリの DEX コードの最適化、圧縮、難読化のレベルが、定義された最小割合を満たしていないときに、Google Play Console でアラートを受け取ることができます。

最適化スコアの計算方法

AGP 8.10 以降の最新のパッチ バージョン(8.10.0 ではなく 8.10.1 など)でビルドされたアプリの場合、これらの割合は、含まれている r8.json ファイルから取得されます。正確なメタデータが生成されるように、マイナー バージョンに対応する AGP と R8 の最新のパッチ バージョンを使用してください。

以前のバージョンの AGP でビルドされたアプリや、r8.json が含まれていない別のコード オプティマイザーで最適化されたアプリの場合、Android Vitals は、mapping.txt ファイル(含まれている場合)または DEX ヒューリスティックを使用して、難読化率をプロキシとして推定します。

DEX の合計サイズの最小値

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

  • アプリ: Bundle に、非圧縮サイズで 10 MB 以上の DEX コードが含まれている
  • ゲーム: Bundle に、非圧縮サイズで 50 MB 以上の DEX コードが含まれている

コードの最適化をローカルで測定する

App Bundle の非圧縮 DEX サイズを測定し、Android Vitals の結果に一致する最適化、圧縮、難読化の割合を取得するには、android analyze を実行します。

android analyze <yourapp>.aab

問題を解決する

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

R8

R8 DEX コードの最適化スコアを改善するには、R8 の最適化を改善するのガイダンスをご覧ください。また、R8 構成アナライザを使用して、最適化、圧縮、難読化のスコアに Keep ルールがどのように影響するかを把握します(これらの指標の詳細な定義については、レポートを理解するをご覧ください)。

Android Gradle プラグイン(AGP)を使用している場合は、R8 Analyzer スキルを使用して、アプリの keep ルールの最適化に関する追加のガイダンスを取得することもできます。Bazel を使用している場合は、R8 構成アナライザも利用できます。rules_android R8 の最適化に関するドキュメントをご覧ください。

R8 以外のオプティマイザーと DEX ポストプロセッサ

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

  • Android Studio で App Bundle を開き、APK Analyzer で表示します。
  • .dex ファイルをすべて選択します。
  • [Deobfuscate names] ボタンを切り替えるときに、サイズの大きいファイルに注意してください(注: mapping.txt ファイルを読み込む必要があります)。難読化しても一部のファイルが大きいままの場合は、パッケージ全体の保持ルールの影響を受けている可能性があります。
  • proguard-rules.pro ファイル、configuration.txt、または R8 を使用していない場合はオプティマイザーの同等のファイルで、難読化されていないパッケージに一致する keep ルールを検索します。たとえば、com.foo. が DEX ファイル内の大きなパッケージである場合は、-keep com.foo.** または -keep com.foo.bar.** 形式の keep ルールを探します。
  • ライブラリ コンシューマーの保持ルールは、簡単に特定できない場合があります。ライブラリ コンシューマー ルールが最適化に影響していると思われる場合は、android analyze <library>.aar を使用してライブラリを直接検査するか、最新バージョンの AGP を使用してスタンドアロンのサンプルアプリにライブラリを追加し、R8 Configuration Analyzer で検査して検証できます。