DEX コードの最適化

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

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

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

コマンドラインを使用してアプリバンドルの非圧縮 DEX サイズをローカルで測定するには、次のコマンドを実行します。

unzip -l <yourapp>.aab | grep -E '\.dex$' | awk '{sum+=$1} END {print sum}'

アプリで R8 を使用して最適化している場合は、R8 構成アナライザを使用して、アプリバンドルの最適化、難読化、縮小化を測定できます。圧縮、最適化、難読化の詳細な定義については、R8 構成アナライザを使用するをご覧ください。R8 構成アナライザ レポートは、R8 アナライザ スキルにも含まれています。

アプリバンドルに埋め込まれた最適化後のメタデータを調べるには(AGP バージョン 8.10 以降の場合)、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 構成アナライザで検査することで、ローカルで検証できます。