最適なユーザー エクスペリエンスを実現するには、アプリをできるだけ小さく、高速になるように最適化する必要があります。R8 と呼ばれるアプリ オプティマイザーは、未使用のコードやリソースを削除し、コードを書き換えてランタイム パフォーマンスなどを最適化することで、アプリを効率化します。ユーザーにとって、これは次のことを意味します。
- 起動時間を短縮
- レンダリングとランタイム パフォーマンスの向上
- ANR の減少
アプリの最適化を有効にするには、次のコードに示すように、リリースビルドのアプリレベルのビルド スクリプトで isMinifyEnabled = true(コードの最適化用)と isShrinkResources = true(リソースの最適化用)を設定します。両方の設定を常に有効にすることをおすすめします。最適化によってプロジェクトのビルド時間が長くなり、コードの変更方法によってはデバッグが難しくなる可能性があるため、アプリの最適化は、公開前にテストするアプリの最終バージョン(通常はリリースビルド)でのみ有効にすることをおすすめします。
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
さらに小さなアプリ向けにリソース圧縮を最適化
Android Gradle プラグイン(AGP)の 8.12.0 バージョンでは、リソースとコードの最適化を統合して、より小さく高速なアプリを作成することを目的とした、最適化されたリソースの縮小が導入されています。
最適化されたリソース圧縮を有効にする
AGP の 9.0.0 より前のバージョンで新しい最適化されたリソース圧縮パイプラインを有効にするには、プロジェクトの gradle.properties ファイルに次の行を追加します。
android.r8.optimizedResourceShrinking=true
AGP 9.0.0 以降のバージョンを使用している場合は、android.r8.optimizedResourceShrinking=true を設定する必要はありません。ビルド構成で isShrinkResources = true が有効になっている場合、最適化されたリソース圧縮が自動的に適用されます。
R8 最適化設定を確認して構成する
R8 の完全な最適化機能を使用できるようにするには、プロジェクトの gradle.properties ファイルから次の行を削除します(存在する場合)。
android.enableR8.fullMode=false # Remove this line from your codebase.
アプリの最適化を有効にすると、スタック トレースが理解しにくくなります。特に、R8 でクラス名やメソッド名が変更された場合は、なおさらです。ソースコードに正しく対応するスタック トレースを取得するには、元のスタック トレースを復元するをご覧ください。
R8 が有効になっている場合は、起動パフォーマンスをさらに向上させるために、起動プロファイルを作成することもおすすめします。
アプリの最適化を有効にしてエラーが発生した場合は、次の方法でエラーを修正できます。
- keep ルールを追加して、一部のコードをそのままにします。
- 最適化を段階的に採用する。
- 最適化に適したライブラリを使用するようにコードを更新します。
ビルド速度の最適化に関心がある場合は、R8 の実行方法を構成するで、環境に基づいて R8 を構成する方法をご覧ください。
AGP と R8 のバージョン動作の変更
次の表に、さまざまなバージョンの Android Gradle プラグイン(AGP)と R8 コンパイラで導入された主な機能の概要を示します。
| AGP バージョン | 導入された機能 |
|---|---|
| 9.0 |
最適化されたリソースの縮小: デフォルトで有効になっています(android.r8.optimizedResourceShrinking を使用して制御します)。最適化されたリソースの縮小により、リソースの縮小をコード最適化パイプラインと統合し、アプリのサイズを小さくして高速化できます。コードとリソースの両方の参照を同時に最適化することで、未使用のコードからのみ参照されるリソースを特定して削除します。これは、以前の個別の最適化プロセスに比べて大幅な改善です。これは、さまざまなフォーム ファクタのバーティカルでリソースとコードを大幅に共有するアプリで特に役立ちます。アプリサイズの 50% 以上の削減が測定されています。サイズが縮小されると、ダウンロードが小さくなり、インストールが速くなり、起動が速く、レンダリングが改善され、ANR が減るため、ユーザー エクスペリエンスが向上します。 ライブラリ ルールのフィルタリング: ライブラリ コンシューマー ルールでのグローバル オプション( -dontobfuscate など)のサポートが終了し、アプリがそれらをフィルタで除外します。詳細については、グローバル オプションを追加するをご覧ください。Kotlin の null チェック: デフォルトで最適化( -processkotlinnullchecks を使用して制御)。このバージョンでは、ビルド速度も大幅に改善されました。詳細については、追加の最適化のためのグローバル オプションをご覧ください。特定のパッケージを最適化する: packageScope を使用して、特定のパッケージを最適化できます。これは試験運用中のサポートです。詳細については、packageScope を使用して指定されたパッケージを最適化するをご覧ください。デフォルトで最適化: getDefaultProguardFile("proguard-android.txt") には避けるべき -dontoptimize が含まれているため、getDefaultProguardFile("proguard-android.txt") のサポートは終了しました。代わりに、"proguard-android-optimize.txt" を使用してください。アプリで最適化をグローバルに無効にする必要がある場合は、proguard ファイルにフラグを手動で追加します。 |
| 8.12 |
リソースの縮小: 初期サポートを追加しました(デフォルトではオフ)。isShrinkResources を使用して有効にします。リソース圧縮は R8 と連携して、未使用のリソースを効果的に特定して削除します。Logcat の再トレース: Android Studio の Logcat ウィンドウでの自動再トレースのサポート。 |
| 8.6 |
再トレースの改善: すべての minSdk レベルで、ファイル名と行番号の再トレースがデフォルトで含まれるようになりました(以前は、バージョン 8.2 で minSdk 26 以上が必要でした)。R8 を更新すると、難読化されたビルドのスタック トレースをすぐに明確に読み取れるようになります。このバージョンでは、行番号とソースファイルのマッピング方法が改善され、Android Studio Logcat などのツールでクラッシュを元のソースコードに自動的に再トレースしやすくなっています。 |
| 8.0 |
デフォルトでフルモード: R8 フルモードでは、最適化が大幅に強化されています。デフォルトでは有効になっています。android.enableR8.fullMode=false を使用してオプトアウトできます。 |
| 7.0 |
フルモードが利用可能: android.enableR8.fullMode=true を使用したオプトイン機能として導入されました。フルモードでは、コードがリフレクションやその他の動的機能を使用する方法についてより厳密な仮定を行うことで、より強力な最適化が適用されます。アプリのサイズが縮小され、パフォーマンスが向上しますが、必要なコードが削除されないように、追加の保持ルールが必要になる場合があります。 |