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

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

互換性

最小バージョン デフォルトのバージョン 備考
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 プロパティを使用できます。詳しくは、名前空間を設定するをご覧ください。

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

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

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

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

AGP 8.0 以降、ビルド パフォーマンスを向上させるために、これらのフラグのデフォルト値が変更されました。これらの変更の一部をサポートするようにコードを調整する際にヘルプが必要な場合は、AGP Upgrade Assistant([Tools] > [AGP Upgrade Assistant])を使用してください。アップグレード アシスタントは、新しい動作に対応するようにコードを更新するか、以前の動作を維持するようにフラグを設定する手順を案内します。

フラグ 新しいデフォルト値 以前のデフォルト値 メモ
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 が警告を出力します。

フラグ 適用される値 メモ
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 は、構成フェーズ中に構成の解決を検出すると、Gradle の構成時間に悪影響を及ぼすため、警告を出力します。
android.r8.failOnMissingClasses true AGP 8.0 では、DEX の最適化を改善するために、欠落しているクラスがある場合に R8 を使用するビルドが失敗します。これに対処するには、不足しているライブラリまたは -dontwarn 保持ルールを追加する必要があります。詳細については、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 を使用して公開するように構成されたバリアントに対してのみ SoftwareComponent を作成します。

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

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 がバンドルされており、Gradle がデフォルトでこれを使用するように設定されています。そのため、ほとんどの Android Studio ユーザーはプロジェクトの設定を変更する必要がありません。

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

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

解決済みの問題

Android Gradle プラグイン 8.0.2

修正された問題
圧縮ツール(R8)
ArrayIndexOutOfBoundsException を使用して Compose でビルド中に R8 が失敗する
VerifyError: Kotlin 1.8.20 で R8 を使用した場合に検証ツールがクラスを拒否した
AGP 8 の R8 により Google Fit サービスが中断される
含めるソースファイルの情報に入力名と重複する名前が残っていると、正しく表現されない

Android Gradle プラグイン 8.0.1

修正された問題
圧縮ツール(R8)
エラー: 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 でのハードクラス検証の失敗

Android Gradle プラグイン 8.0.0

修正された問題
Android Gradle プラグイン
MergeResources タスクの不安定なビルドエラー
JavaPluginConvention と HasConvention の非推奨化
新しい Transform API のファイルの場所が不適切で一貫性がない
Android Gradle プラグインでは、非推奨の GUtil.toWords(string) 関数を使用すべきではない
Android Gradle プラグインでは、非推奨の ConfigureUtil.configure(closure、target)関数を使用すべきではない
KGP 1.7.20-Beta を使用するために AGP テストが更新される
Gradle 7.4 が失敗する(AnalyticsService のインスタンスを作成できない)
AGP 7.4.0-alpha09 の javac からの新しい「不明な列挙型定数」
構成キャッシュを有効にしても MergeGeneratedProguardFilesCreationAction の構成が遅い
[AGP] 生成されたソース ディレクトリを IDE モデルに追加(Variant API)
JavaPluginConvention と HasConvention の非推奨化
デフォルトで R8 に ignorewarnings を追加しない
ProGuard ファイルが存在しない場合に警告する
AGP 7.3.0 で Gradle プラットフォーム プロジェクトの Gradle 同期に問題が発生する
apksig ライブラリ: ApkVerifier$Result.getV4SchemeSigners() が非公開としてマークされている
カバレッジが有効になっていない場合は androidJacocoAnt 構成の作成を中止する
ライブラリ コンポーネントで @IntDef を使用しても aar に annotation.zip が生成されない
と の共通のスーパー型が見つからない
Gradle プロパティ バージョン LINT_PRINT_STACKTRACE=true を追加
AAR に古い prefab アーティファクトがパッケージ化されている
非推奨に関する警告に対処して Gradle 9.0 に備えるため、destination プロパティから outputLocation プロパティに移行する
JavaCompile タスクをセットアップするときに「--release」フラグを考慮する
[AGP-7.3.0-beta03] XML 宣言の後に空の行があると ShrinkResourcesNewShrinkerTask が失敗する
デバッグ バリアントにおいてデフォルトで lintVital ターゲットが実行される
ProGuard ファイルが存在しない場合に警告する
AGP がタスク実行フェーズで kotlinOptions.freeCompilerArgs を追加しようとする
Gradle 同期が失敗: 同期が失敗: 理由は不明
DependencyReportTask が構成キャッシュに対応していない
build.gradle で resValue を使用してリソースをオーバーライドするとエラーになる: 重複するリソース
「debug」ビルドタイプにはデフォルトの署名鍵があるが、他のビルドタイプにはない
動的機能とリソース圧縮を使用するとランタイム クラッシュが発生する
「debug」ビルドタイプにはデフォルトの署名鍵があるが、他のビルドタイプにはない
生成されたソース ディレクトリが lint モデルのメイン ソース プロバイダに Java ディレクトリとして表示される
Gradle 8.0-milestone-2 が AGP で例外を引き起こす
アプリとライブラリのマニフェスト マージを最適化する
gradle-settings-api を javadoc 世代に追加する
AGP 7.4.0-alpha09 の javac からの新しい「不明な列挙型定数」
AGP 7.4.0-alpha09 で、Firebase App Distribution にアップロードされないビルドが生成される
モジュール内の lint.xml が lint タスクの UP-TO-DATE チェックの対象にならない
Android Gradle プラグイン 7.0 以降と Android Tests の問題: リソース「id」が見つからない
null ポインタ例外で configureCMakeDebug が安定せずクラッシュする
IllegalAccessError: AS2022.2.1.5 の FireBasePerfPlugin へのアップグレード プロジェクト
「Collection contains no element matching the predicate」(コレクションに述語と一致する要素がありません)という暗号のエラーで同期が失敗する
Instrumentation API がローカル ファイルの依存関係を変換しない
7.4 ベータ版 1 に更新すると「AnnotationProcessorOptions.arguments are queried」というエラーが発生する
Gradle 公開プラグインを gradle-api に移動し、BasePlugin.getExtension を削除する
r8.jvmArgs が使用されていない
AGP に必要な最小バージョンとしての JDK17
AGP 8.0.0 A8 がベースライン プロファイルを破損する
AGP 8.0 の CheckAarMetadataTask のメッセージで「compileSdkVersion」を「compileSdk」に変更する
AGP 7.4.0-rc01 が Variant API を破損し、「Querying the mapped value of map(provider(java.util.Set)) before task '...' has completed is not supported」と表示される
構成キャッシュでの「com.android.build.gradle.tasks.ShaderCompile」の問題
AGP API を使用して Java リソースに追加すると構成キャッシュが破損する
lint プラグインが gradle-api の一部でない
ディレクトリ DexingFileDependenciesTask.outputKeepRules が OutputFile としてマークされている
AGP 7.4 にアップグレードすると、StackOverflowError が発生する
テスト バリアントのマニフェスト プレースホルダで processDebugUnitTestManifest が失敗する
lint が依存関係なくソースセット情報にアクセスする
ビルドエラーが、存在しない API レベル 34 を指している
新しい Android Gradle プラグインがないのに「We recommend using a newer Android Gradle plugin」と表示される
android.injected.testOnly=false が機能しない
Dexer(D8)
AS Canary 6 を 7 にアップグレードした後のグローバル合成に関連する dex マージエラー
Kotlin メタデータ ライブラリをバージョン 0.6.0 に更新
API レベル 28~30 で JDK-8272564 の回避策が必要と思われる
lint
Kotlin ソースで ResourceType lint チェックが機能しない
VersionChecks が Kotlin の範囲チェックを処理しない
ラップされている場合の InlinedApi の偽陽性
openInputStream に関する lint のリサイクル誤検出
[BuildTool/Lint] ChecksSdkIntAtLeast コンストラクタ プロパティ
lint: PartialResults のマージが正しく機能しない
Android Studio で、指定されたバージョンが古いものとして誤ってマークされる
AndroidDeprecationInspection.DeprecationFilter EP が android-plugin.xml ファイルに登録されない
AccessibilityDetector lint チェックの説明が古い
lint SDK_INT チェックで一時的なローカル変数が認識される必要がある
TestMode.TYPE_ALIAS が関数型を typealias に置き換えるときにエラーが発生する
バグ: ObjectAnimator が現在のコードブロックの外部で作成された場合、それが開始されないという誤検出の警告が表示される #38
lint: アプリケーション インスタンスを mergeOnly モードでクエリすると NPE が発生する
NonConstantResourceId lint ルールがリソース ID から定数値を検出して割り当てできない
ビュー ID のエラーが表示されない
lint リソースのキャッシュをデシリアライズしていない場合、lint エラーが発生する(ただし警告は表示される必要がある)
AGP Flamingo Alpha 8 Lint NewApi 脱糖回帰
TypedArray#close(API 31)が脱糖されていないにもかかわらず、try-with-resources で使用したときに AS が警告を表示しない
lint が呼び出しのレシーバについて有効なキャストをチェックしない
lint が、継承されたインターフェースではなく、直接実装されたインターフェースについてのみ、安全なキャストをチェックする
lint の統合
ベースライン ファイルは現在、lint タスクの入力と出力である
圧縮ツール(R8)
CF フレーム ベリファイアでの NPE / アサーション エラー
フィールド ルックアップ キャッシュの削除後に回帰が発生する
「:app:minifyVariantWithR8」が AGP 7.4.0-beta02 で NullPointerException をスローする
R8: -allowaccessmodification で ClassNotFoundException が発生する
メタデータにコンテキスト レシーバのサポートを追加
java.lang.VerifyError: Verifier rejected class androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object) failed to verify: void androidx.compose.ui.graphics.colorspace.o.(java.lang.Object): [0x0] cannot access instance field java.lang.Object androidx.compose.ui.graphics.colorspace.n.a from object of type Precise Reference: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0 / 7.3.1 - キューに追加する作業リストが push 可能ではないにもかかわらず、アクションのキューへの登録が試行される
Renderscript コードの圧縮: AGP を 7.3.1 から 7.4.0 にアップグレードすると、パフォーマンスが大幅に低下する