Android Gradle プラグイン 8.0.0(2023 年 4 月)

Android Gradle プラグイン 8.0.0 はメジャー リリースで、さまざまな新機能や改善措置が組み込まれています。

互換性

最小バージョン デフォルトのバージョン Notes
Gradle 8.0 8.0 詳細については、Gradle のアップデートをご覧ください。
SDK Build Tools 30.0.3 30.0.3 SDK Build Tools をインストールまたは設定します。
NDK なし 25.1.8937393 別のバージョンの NDK をインストールまたは設定します。
JDK 17 17 詳細については、JDK バージョンの設定をご覧ください。

パッチリリース

Android Gradle プラグイン 8.0 のパッチリリースは次のとおりです。

Android Gradle プラグイン 8.0.2(2023 年 5 月)

AGP 8.0.2 で修正されたバグの一覧については、Android Studio 2022.2.1 でクローズされた問題をご覧ください。

Android Gradle プラグイン 8.0.1(2023 年 5 月)

このマイナー アップデートには、次のバグ修正が含まれています。

修正された問題
エラー: AGP 7.2.2 から 7.4.0 へのアップグレード後に「No VersionRequirement with the specific id in the table」と表示される
markTypeAsLive AGP 7.4.1 で R8 NullPointerException が発生する
[R8 4.0.53] Android 11 でのハードクラス検証の失敗

互換性を破る変更: モジュール レベルのビルド スクリプトに名前空間が必要

名前空間は、マニフェスト ファイルではなく、モジュール レベルの build.gradle.kts ファイルで設定する必要があります。AGP 7.3 以降では、namespace DSL プロパティの使用を開始できます。詳細については、Namespace を設定するをご覧ください。

名前空間 DSL に移行する場合は、次の問題に注意してください。

  • 以前のバージョンの AGP は、メイン名前空間またはアプリケーション ID からテスト名前空間を誤って推測することがあります。AGP Upgrade Assistant は、プロジェクトのメインの名前空間とテストの名前空間が同じであると判断すると、アップグレードをブロックします。アップグレードがブロックされている場合は、testNamespace を手動で変更し、それに応じてソースコードを変更する必要があります。
  • テストの名前空間を変更すると、コードはコンパイルされても、ランタイムにインストルメンテーション テストが失敗する可能性があります。これは、インストルメンテーション テストのソースコードが、androidTest ソースとアプリソースの両方で定義されたリソースを参照している場合に発生することがあります。

詳しくは、問題 #191813691 コメント #19 をご覧ください。

互換性を破る変更: ビルド オプションのデフォルト値

AGP 8.0 以降、ビルド パフォーマンスを改善するために、これらのフラグのデフォルト値が変更されました。これらの変更の一部に対応するようにコードを調整するには、AGP Upgrade Assistant([Tools] > [AGP Upgrade Assistant])を使用します。Upgrade Assistant は、新しい動作に合わせてコードを更新する方法や、フラグを設定して以前の動作を維持する方法をご案内します。

フラグ 新しいデフォルト値 前のデフォルト値 Notes
android.defaults.buildfeatures.buildconfig false true AGP 8.0 は、デフォルトでは BuildConfig を生成しません。このオプションは、DSL を使用して必要なプロジェクトで指定する必要があります。
android.defaults.buildfeatures.aidl false true AGP 8.0 は、デフォルトでは AIDL サポートを有効にしません。このオプションは、DSL を使用して必要なプロジェクトで指定する必要があります。このフラグは AGP 9.0 で削除される予定です。
android.defaults.buildfeatures.renderscript false true AGP 8.0 では、RenderScript のサポートはデフォルトで有効になっていません。このオプションは、DSL を使用して必要なプロジェクトで指定する必要があります。このフラグは AGP 9.0 で削除される予定です。
android.nonFinalResIds true false AGP 8.0 は、デフォルトで非 final フィールドを持つ R クラスを生成します。
android.nonTransitiveRClass true false AGP 8.0 は、現在のモジュールで定義されたリソースに対してのみ R クラスを生成します。
android.enableR8.fullMode true false AGP 8.0 はデフォルトで R8 フルモードを有効にします。詳細については、R8 フルモードをご覧ください。

互換性を破る変更: 強制ビルド オプション値

AGP 8.0 以降では、これらのフラグの値を変更できなくなりました。gradle.properties ファイルで指定すると、値は無視され、AGP は警告を出力します。

フラグ 適用された値 Notes
android.dependencyResolutionAtConfigurationTime.warn true 構成フェーズで構成の解決を検出すると、AGP 8.0 は Gradle の構成時間に悪影響を及ぼすため、警告を出力します。
android.r8.failOnMissingClasses true DEX の最適化を改善するため、クラスがない場合、AGP 8.0 は R8 を使用するビルドを失敗します。この問題に対処するには、不足しているライブラリを追加するか、-dontwarn keep ルールを追加する必要があります。詳細については、R8 圧縮ツールでのクラス欠落に関する警告をご覧ください。
android.testConfig.useRelativePath true 単体テストでの Android リソース、アセット、マニフェストの使用のサポートを有効にすると、AGP 8.0 は相対パスのみを含む test_config.properties ファイルを生成します。これにより、Android 単体テストで常に Gradle ビルド キャッシュを使用できるようになります。
android.useNewJarCreator true AGP は、JAR ファイルの作成時に Zipflinger ライブラリを使用してビルド パフォーマンスを改善します。
android.bundletool.includeRepositoriesInDependencyReport true AAB と APK で SDK の依存関係情報の追加が有効になっている場合、AGP 8.0 はこの情報にプロジェクト リポジトリのリストも追加します。詳しくは、Google Play Console の依存関係情報をご覧ください。
android.enableArtProfiles true ベースライン プロファイルが常に生成されるようになりました。詳細については、ベースライン プロファイルをご覧ください。
android.enableNewResourceShrinker true デフォルトでは、新しいリソース シンカーの実装を使用します。新しいリソース圧縮ツールでは、動的機能がサポートされています。
android.enableSourceSetPathsMap true 相対リソースパス マッピングの計算に使用されます。これにより、Gradle ビルドがより頻繁に最新の状態になります。
android.cacheCompileLibResources true Gradle はプロジェクトの場所に対してリソース ファイルを追跡するため、コンパイル済みのライブラリ リソースはデフォルトでキャッシュに保存されるようになりました。android.enableSourceSetPathsMap を有効にする必要があります。
android.disableAutomaticComponentCreation true AGP 8.0 は、デフォルトで SoftwareComponent を作成しません。代わりに、AGP は、パブリッシング DSL を使用して公開されるように構成されたバリアントに対してのみ SoftwareComponents を作成します。

実行プロファイルの新しい安定版フラグ

AGP には、新しいフラグ android.settings.executionProfile が含まれています。SettingsExtension のデフォルトの実行プロファイルをオーバーライドするには、このフラグを使用します。詳細については、設定プラグインのドキュメントをご覧ください。

試験運用版フラグをプレビューするには、プレビュー リリースノートをご覧ください。

Kotlin の遅延プロパティの割り当てはサポートされていません。

ビルド スクリプトに Gradle の Kotlin DSL を使用している場合、Android Studio と AGP 8.0 では、= 演算子を使用した試験運用版のプロパティ割り当てがサポートされていないことに注意してください。この機能の詳細については、リリースノートドキュメントをご覧ください。

Build Analyzer のタスクのカテゴリ

Android Studio Flamingo 以降、Build Analyzer に、ビルド時間に影響するタスクの新しいデフォルト ビューが導入されました。プロジェクトで AGP 8.0 以降を使用している場合、Build Analyzer はタスクを個別に表示するのではなく、タスクをカテゴリ別にグループ化します。たとえば、Android リソース、Kotlin、Dexing に固有のタスクはグループ化され、ビルド時間で並べ替えられます。これにより、ビルド時間に最も影響するカテゴリを簡単に把握できます。各カテゴリを開くと、対応するタスクのリストが表示されます。タスクをグループ化せずに個別に表示するには、[グループ条件] プルダウンを使用します。

Build Analyzer のタスクカテゴリ。

新しい設定プラグイン

AGP 8.0.0-alpha09 では、新しい設定プラグインが導入されています。設定プラグインを使用すると、グローバル構成(すべてのモジュールに適用される構成)を 1 か所に集約できるため、構成をコピーして複数のモジュールに貼り付ける必要はありません。また、設定プラグインを使用して、ツールの実行プロファイルや、ツールの実行方法に関するさまざまな手順を作成し、プロファイルを切り替えることもできます。

設定プラグインを使用するには、settings.gradle ファイルでプラグインを適用します。

apply plugin 'com.android.settings'

グローバル構成を一元化する

グローバル構成を構成するには、settings.gradle ファイルで新しい android ブロックを使用します。次の例をご覧ください。

android {
  compileSdk 31
  minSdk 28
  ...
}

ツール実行プロファイル

設定プラグインでは、一部のツールの実行プロファイルを作成することもできます。実行プロファイルにより、ツールの実行方法が決まります。環境に応じて異なる実行プロファイルを選択できます。実行プロファイルでは、ツールの JVM 引数を設定し、別のプロセスで実行するように構成できます。現時点では、R8 ツールのみがサポートされています。

次の例に示すように、実行プロファイルを作成し、settings.gradle ファイルでデフォルトの実行プロファイルを設定します。

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

デフォルトのプロファイルをオーバーライドするには、gradle.properties ファイルの android.experimental.settings.executionProfile プロパティを使用して別のプロファイルを選択します。

android.experimental.settings.executionProfile=high

コマンドラインを使用してこのプロパティを設定して、さまざまなワークフローを設定することもできます。たとえば、継続的インテグレーション ワークフローがある場合は、コマンドラインを使用して、settings.gradle ファイルを変更せずに実行プロファイルを変更できます。

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

AGP 8.0 の実行に JDK 17 が必要

Android Gradle プラグイン 8.0 を使用してアプリをビルドする場合、Gradle を実行するために JDK 17 が必要になりました。Android Studio Flamingo は JDK 17 をバンドルし、デフォルトで JDK 17 を使用するように Gradle を構成します。つまり、ほとんどの Android Studio ユーザーはプロジェクトの設定を変更する必要はありません。

Android Studio 内で AGP が使用する JDK バージョンの設定を手動で行う必要がある場合は、JDK 17 以降を使用する必要があります。

Android Studio とは別に AGP を使用する場合は、JAVA_HOME 環境変数または -Dorg.gradle.java.home コマンドライン オプションを JDK 17 のインストール ディレクトリに設定して、JDK バージョンをアップグレードします。