packageScope を使用して R8 で特定のパッケージを最適化できます。これは、まだ R8 を使用していないアプリ向けの最初のオプションのステップとして設計されており、すでに R8 を使用しているアプリには推奨されません。
packageScope を使用するかどうかを検討する
アプリですでに R8 を使用している場合は、packageScope を使用しないでください。パフォーマンスとアプリサイズの点で最適ではない構成になります。代わりに、改善された keep ルールを使用してアプリの R8 構成を強化するか、互換モードを使用している場合は R8 のフルモードに移行します。
まだ R8 を使用していないが、R8 を採用するアプリの場合は、packageScope を使用して移行を段階的に管理します。R8 はアプリの動作を変更する可能性のある強力な最適化を適用するため、AndroidX や Kotlin など、最適化しても安全な特定のパッケージに最適化の範囲を限定することで、リスクを最小限に抑えながらパフォーマンスの向上を実現できます。アプリが安定したら、これらの最適化をコードベースと依存関係の残りの部分に段階的に拡大し、各段階で安定性をテストできます。
前提条件
packageScope で R8 を使用するには、Android Gradle プラグイン 9.0 以降が必要です。
最適化を構成する
packageScope を使用して最適化を有効にするには、次の操作を行います。
最適化するライブラリを選択する
最適化するライブラリを特定します。AndroidX と Kotlin のライブラリ androidx.**、kotlin.**、kotlinx.** は、R8 との互換性が確保された安定版のライブラリであるため、まずこれらのライブラリから始めることをおすすめします。
packageScope で R8 を使用するためのサポートを有効化
プロジェクトの gradle.properties ファイルに以下を追加します。
android.r8.gradual.support=true
最適化ブロックを設定する
モジュール レベルの build.gradle.kts(または build.gradle)ファイルで、リリース ビルド構成に optimization ブロックを追加します。このブロック内で packageScope を使用して、最適化する特定のパッケージをリストします。build.gradle.kts ファイルで、パッケージ リストを setOf() でラップします。
Kotlin
android { buildTypes { release { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
最適化をテストする
packageScope 宣言を適用または更新した後、アプリを徹底的にテストして、予期しないクラッシュや動作の変更が発生していないことを確認してください。
指定したパッケージの最適化からアプリ全体の最適化に移行する
最適化のメリットを最大限に高めるには、アプリ全体で packageScope の使用から R8 の使用に徐々に移行することをおすすめします。このプロセスでは、最適化の対象範囲を段階的に拡大します。
- 安定版のライブラリから始める。まず、R8 の最適化と互換性のある、広く使用されている安定したライブラリのみを
packageScopeリストに含めます。AndroidX ライブラリと Kotlin ライブラリのandroidx.**、kotlin.**、kotlinx.**から始めます。 - パッケージを段階的に追加する。新しいパッケージ接頭辞を
packageScopeに徐々に追加します。- 依存関係を評価する。アプリのライブラリを確認します。
packageScopeリストに追加するのに適した候補には、公式の Google ライブラリ(com.google.**など)や、OkHttp(okhttp3.**やokio.**など)のような堅牢なライブラリがあります。重いリフレクション、シリアル化、ネイティブ コード呼び出し(JNI)を伴わないライブラリを優先します。 - パッケージ サイズに基づいて優先順位を付けます。Android Studio の APK Analyzer を使用して、アプリのサイズに最も影響している要素を特定します。1. R8 をオフにしてリリース AAB または APK をビルドします。
1. アナライザで開き、
dexファイルを調べます。1. パッケージをサイズで並べ替えます。最大のパッケージでは、最適化の費用対効果(ROI)が最も高くなります。これらのライブラリに広すぎる保持ルールがない限り、これらを最初にターゲットにすることで、プロセスの早い段階でサイズを大幅に削減できます。詳細については、ライブラリを賢く選択するをご覧ください。
- 依存関係を評価する。アプリのライブラリを確認します。
- 動作の変更を確認します。新しいパッケージ プレフィックスを追加するたびに、包括的なテストを実施して、回帰や予期しない動作を検出して解決します。
- アプリ パッケージは最後に追加します。アプリ パッケージでリフレクションをあまり使用しない場合は、アプリ パッケージを
packageScopeに含め、必要に応じて保持ルールを段階的に追加します。アプリ パッケージでリフレクションを多用する場合は、パッケージをpackageScopeに含め、必要なパッケージのパッケージ全体の保持ルールを追加します。保持ルールを繰り返し処理して、ルールを絞り込みます。 - アプリ全体で R8 を使用する。アプリの依存関係の大部分が
packageScope宣言に含まれ、アプリが安定したら、packageScopeを削除して、フルモードでアプリ全体を最適化します。