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