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 構成アナライザで検査することで、ローカルで検証できます。