Android Gradle プラグイン プレビューのリリースノート

このページには、Android Gradle プラグイン(AGP)のプレビュー リリースのリリースノートが記載されています。

Android Gradle プラグイン 9.0

Android Gradle プラグイン 9.0 は AGP の新しいメジャー リリースで、API と動作の変更が導入されています。

Android Gradle プラグイン 9.0.0-alpha10 にアップデートするには、Android Studio Otter | 2025.2.1 の Android Gradle プラグイン Upgrade Assistant を使用します。

AGP Upgrade Assistant は、プロジェクトをアップグレードする際に、必要に応じて既存の動作を維持するのに役立ちます。これにより、AGP 9.0 の新しいデフォルトをすべて採用する準備ができていない場合でも、プロジェクトをアップグレードして AGP 9.0 を使用できます。

互換性

Android Gradle プラグイン 9.0.0-alpha10 がサポートする最大 Android API レベルは API レベル 36 です。

Android Gradle プラグイン 9.0.0-alpha10 には Gradle 9.0.0 が必要です。

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

android DSL クラスは、新しい公開インターフェースのみを実装するようになりました

過去数年間、公開する API をより適切に制御するために、DSL と API の新しいインターフェースを導入してきました。AGP バージョン 7.x と 8.x では、インターフェースの作業の進行に合わせて互換性を維持するため、新しい公開インターフェースも実装した古い DSL タイプ(BaseExtension など)が引き続き使用されていました。

AGP 9.0 では、新しい DSL インターフェースのみが使用され、実装は完全に隠蔽された新しい型に変更されました。この変更により、非推奨の古いバリエーション API へのアクセスも削除されます。

AGP 9.0 に更新するには、次の操作が必要になる場合があります。

  • プロジェクトが組み込みの Kotlin と互換性があることを確認する: org.jetbrains.kotlin.android プラグインは新しい DSL と互換性がありません。
  • KMP プロジェクトを Android Gradle Library Plugin for KMP に切り替える: com.android.library プラグインと com.android.application プラグインと同じ Gradle サブプロジェクトで org.jetbrains.kotlin.multiplatform プラグインを使用することは、新しい DSL と互換性がありません。

  • ビルドファイルを更新する: インターフェースの変更は、DSL をできるだけ類似した状態に保つことを目的としていますが、小さな変更が生じる可能性があります。

  • 新しい DSL と API を参照するようにカスタムビルド ロジックを更新します。 内部 DSL への参照をすべて公開 DSL インターフェースに置き換えます。ほとんどの場合、これは 1 対 1 の交換になります。applicationVariants などの API の使用箇所を、新しい androidComponents API に置き換えます。androidComponents API はプラグインの互換性を長く保つように安定性を高めるように設計されているため、より複雑になる可能性があります。例については、Gradle のレシピをご覧ください。

  • サードパーティ製プラグインを更新する: 一部のサードパーティ製プラグインは、公開されなくなったインターフェースや API に依存している可能性があります。AGP 9.0 と互換性のあるプラグインのバージョンに移行します。

新しい DSL インターフェースに切り替えることで、次のようなさまざまな非推奨 API を使用するプラグインや Gradle ビルドスクリプトが防止されます。

android ブロック内の非推奨 API 関数 交換
applicationVariants
libraryVariants
testVariants
unitTestVariants
AGP に新しい機能を追加するプラグインの拡張ポイント。 これを androidComponents.onVariants API に置き換えます。次に例を示します。
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
以前のすべての API に直接的な代替手段があるとは限りません。新しいバリアント API で対応できないユースケースがある場合は、問題を報告してください。
variantFilter 選択したバリエーションを無効にできます。 これを androidComponents.beforeVariants API に置き換えます。次に例を示します。
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider
testServer
Android デバイスとエミュレータに対してテストを実行するためのカスタム テスト環境の登録。 [Gradle で管理されているデバイス] に切り替えます。
sdkDirectory
ndkDirectory
bootClasspath
adbExecutable
adbExe
カスタムタスクに Android SDK のさまざまなコンポーネントを使用する。 androidComponents.sdkComponents に切り替えます。
registerArtifactType
registerBuildTypeSourceProvider
registerProductFlavorSourceProvider
registerJavaArtifact
registerMultiFlavorSourceProvider
wrapJavaSourceSet
廃止された機能は、主に Android Studio での生成されたソースの処理に関連しており、AGP 7.2.0 で動作しなくなりました。 これらの API の直接的な代替手段はありません。

AGP 9.0 に更新したときに次のエラー メッセージが表示された場合は、プロジェクトが古い型の一部を参照していることを意味します。

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

互換性のないサードパーティ製プラグインによってブロックされている場合は、オプトアウトして、DSL の古い実装と古いバリアント API を取得できます。この間も新しいインターフェースは利用可能で、独自のビルド ロジックを新しい API に更新することもできます。オプトアウトするには、gradle.properties ファイルに次の行を含めます。

android.newDsl=false

AGP 9.0 にアップグレードする前に、新しい API へのアップグレードを開始することもできます。新しいインターフェースは多くの AGP バージョンに存在するため、新旧のインターフェースを混在させることができます。AGP API リファレンス ドキュメントには、各 AGP バージョンの API サーフェスと、各クラス、メソッド、フィールドが追加された時期が記載されています。

9.0 のアルファ版の期間中、Google はプラグインの作成者に連絡を取り、新しいモードに完全に対応したプラグインを適応させてリリースできるようサポートします。また、Android Studio の AGP Upgrade Assistant を強化して、移行をガイドします。

新しい DSL または Variant API に機能が不足している場合は、できるだけ早く問題を報告してください。

Kotlin が組み込まれている

Android Gradle プラグイン 9.0 には、Kotlin をコンパイルするための組み込みサポートが含まれており、個別に適用された Kotlin プラグインが置き換えられます。これにより、AGP との統合が簡素化され、非推奨の API の使用が回避され、場合によってはパフォーマンスが向上します。

Android Gradle プラグイン 9.0 には、Kotlin Gradle プラグイン 2.2.10 のランタイム依存関係があります。これは、Kotlin の組み込みサポートに必要な最小バージョンです。

AGP 9.0 に Kotlin が組み込まれたことで、test-fixtures の Android Studio IDE のサポートが完全になりました。これを試すには、AGP 9.0.0-alpha07 以降を使用します。

android.builtInKotlin=false を設定すると、組み込みの Kotlin をオプトアウトできます。

組み込みの Kotlin をオプトアウトし、古いバージョンの Kotlin Gradle プラグインを使用する必要がある場合は、ダウングレードを強制できます。

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("2.0.0") } // or another version that you want to use
        }
    }
}

動作の変更

Android Gradle プラグイン 9.0 には、次の新しい動作があります。

動作 推奨事項
Android Gradle プラグイン 9.0 は、デフォルトで NDK バージョン r28c を使用します。 使用する NDK バージョンを明示的に指定することを検討してください。
Android Gradle プラグイン 9.0 では、デフォルトで、ライブラリのコンシューマーが同じかそれ以上のコンパイル SDK バージョンを使用する必要があります。 ライブラリを使用する場合は、同じまたはそれ以上のコンパイル SDK を使用します。これが不可能な場合や、公開するライブラリの利用者に切り替えのための時間をさらに与えたい場合は、AarMetadata.minCompileSdk を明示的に設定します。

AGP 9.0 には、次の Gradle プロパティのデフォルトの更新が含まれています。これにより、アップグレード時に AGP 8.13 の動作を維持するかどうかを選択できます。

プロパティ 関数 AGP 8.13 から AGP 9.0 への変更 推奨事項
android.newDsl android ブロックの以前の実装を公開せずに、新しい DSL インターフェースを使用します。
これは、android.applicationVariants などの以前のバリアント API にアクセスできなくなることも意味します。
falsetrue android.newDsl=false を設定することで、オプトアウトできます。
プロジェクトで使用するすべてのプラグインとビルドロジックに互換性があることを確認したら、オプトアウトを削除します。
android.builtInKotlin org.jetbrains.kotlin.android プラグインを使用せずに、Android Gradle プラグインで Kotlin コードを直接コンパイルするサポートを有効にしました。 falsetrue 可能であれば、org.jetbrains.kotlin.android プラグインの使用を削除して、Kotlin の組み込みを採用します。そうでない場合は、android.builtInKotlin=false を設定してオプトアウトします。
android.uniquePackageNames 各ライブラリに個別のパッケージ名があることを強制します。 falsetrue プロジェクト内のすべてのライブラリに一意のパッケージ名を指定します。それが不可能な場合は、移行中にこのフラグを無効にできます。
android.dependency.useConstraints 構成間の依存関係制約の使用を制御します。
AGP 9.0 のデフォルトは false で、アプリのデバイステスト(AndroidTest)でのみ制約を使用します。これを true に設定すると、8.13 の動作に戻ります。
truefalse 依存関係の制約は、必要な場合を除き、どこでも使用しないでください。このフラグの新しいデフォルトを受け入れると、プロジェクトのインポート プロセスで最適化も有効になります。これにより、多数の Android ライブラリ サブプロジェクトを含むビルドのインポート時間が短縮されます。
aandroid.enableAppCompileTimeRClass アプリケーションのコードを最終版ではない R クラスに対してコンパイルし、アプリケーションのコンパイルをライブラリのコンパイルと一致させます。
これにより、増分性が向上し、リソース処理フローのパフォーマンスを最適化するための道が開かれます。
falsetrue 多くのプロジェクトでは、ソースを変更せずに新しい動作を採用できます。R クラスのフィールドが定数を必要とする場所(switch case など)で使用されている場合は、連鎖した if 文を使用するようにリファクタリングします。
android.sdk.defaultTargetSdkToCompileSdkIfUnset アプリとテストのターゲット SDK バージョンのデフォルト値としてコンパイル SDK バージョンを使用します。
この変更前は、ターゲット SDK バージョンはデフォルトで最小 SDK バージョンになっていました。
falsetrue アプリとテストのターゲット SDK バージョンを明示的に指定します。
android.onlyEnableUnitTestForTheTestedBuildType テスト対象のビルドタイプの単体テスト コンポーネントのみを作成します。
デフォルトのプロジェクトでは、これによりデバッグ用の単一の単体テストが生成されます。以前の動作では、デバッグまたはリリース用に単体テストが実行されていました。
falsetrue プロジェクトでデバッグとリリース両方のテストを実行する必要がない場合は、変更は必要ありません。
android.proguard.failOnMissingFiles AGP DSL で指定されたキープファイルがディスクに存在しない場合、エラーでビルドを失敗させます。この変更前は、ファイル名のタイプミスがあると、ファイルは無視されていました。 falsetrue 無効な ProGuard ファイルの宣言を削除
android.r8.optimizedResourceShrinking クラスと Android リソースをまとめて考慮することで、R8 が保持する Android リソースを減らすことができます。 falsetrue プロジェクトの保持ルールがすでに完了している場合は、変更は必要ありません。
android.r8.strictFullModeForKeepRules クラスが保持されるときにデフォルトのコンストラクタを暗黙的に保持しないことで、R8 が保持するものを減らすことができます。つまり、-keep class A-keep class A { <init>(); }
を意味しなくなります。
falsetrue プロジェクトの保持ルールがすでに完了している場合は、変更は必要ありません。

デフォルトのコンストラクタを保持する必要がある場合は、プロジェクトの保持ルールで -keep class A-keep class A { <init>(); } に置き換えます。
android.defaults.buildfeatures.resvalues すべてのサブプロジェクトで resValues を有効にします truefalse 次の設定をプロジェクトの Gradle ビルドファイルで行うことで、resValues を必要とするサブプロジェクトでのみ有効にします。
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders すべてのサブプロジェクトでシェーダー コンパイルを有効にします。 truefalse シェーダーを含むサブプロジェクトでのみシェーダー コンパイルを有効にするには、それらのプロジェクトの Gradle ビルドファイルで次のように設定します。
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed AGP 9.0 では、getDefaultProguardFile()proguard-android.txt ではなく proguard-android-optimize.txt のみをサポートします。これは、proguard-android.txt に含まれる ­dontoptimize フラグの誤用を防ぐためです。 falsetrue 最適化を回避したい場合は、proguard-android-optimize.txt の使用と合わせて、カスタム proguardFile で ­dontoptimize を明示的に指定できます。このファイルから ­dontoptimize フラグを削除できる場合は、削除してください。R8 最適化のメリットが低下します。そうでない場合は、android.r8.globalOptionsInConsumerRules.disallowed=false を設定してオプトアウトします。
android.r8.globalOptionsInConsumerRules.disallowed AGP 9.0 以降では、コンシューマー キープファイルに問題のある Proguard 構成が含まれている場合、Android ライブラリと機能モジュールの公開は失敗します。­dontoptimize­dontobfuscate などのグローバル オプションを含むファイルを保持するコンシューマーは、アプリケーション モジュールでのみ使用する必要があり、ライブラリ ユーザーの最適化のメリットを減らす可能性があります。Android アプリ モジュールのコンパイルでは、このようなグローバル オプションが事前コンパイルされた依存関係(JAR または AAR)に埋め込まれている場合、それらは無視されます。この状況が発生したかどうかは、configuration.txt(通常は <app_module>/build/outputs/mapping/<build_variant>/configuration.txt などのパスにあります)で # REMOVED CONSUMER RULE: ­dontoptimize などのコメントを確認することでわかります。 falsetrue 公開されたライブラリでは、互換性のないルールはすべて削除する必要があります。内部ライブラリは、互換性がないが必須のルールをアプリ モジュールの proguardFile に移動する必要があります。android.r8.globalOptionsInConsumerRules.disallowed=false を設定してオプトアウトします。すべてのコンシューマー キープファイルが互換性を持つようになったら、オプトアウトを削除します。

削除された機能

Android Gradle プラグイン 9.0 では、次の機能が削除されます。

変更された DSL

Android Gradle プラグイン 9.0 には、次の破壊的な DSL の変更が含まれています。

  • CommonExtension のパラメータ化が削除されました。

    これ自体は、将来のソースレベルの破壊的変更を回避するためのソースレベルの破壊的変更にすぎませんが、ブロック メソッドを CommonExtension から ApplicationExtensionLibraryExensionDynamicFeatureExtensionTestExtension に移動する必要があることも意味します。

    プロジェクトを AGP 9.0 にアップグレードする場合は、これらのパラメータまたはブロック メソッドを使用する Gradle プラグイン コードをリファクタリングします。たとえば、次のプラグインは、型パラメータを削除し、削除されたブロック メソッドに依存しないように更新されます。

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP の範囲を対象とするプラグインの場合、ゲッターを直接使用すると、9.0 より前の AGP バージョンとのバイナリ互換性が維持されます。

DSL を削除しました

Android Gradle プラグイン 9.0 では、次のものが削除されています。

削除された API

Android Gradle プラグイン 9.0 では、次のものが削除されています。

削除された Gradle プロパティ

次の Gradle プロパティは、デフォルトで有効になっている機能をグローバルに無効にする方法として最初に追加されました。

これらの機能は、AGP 8.0 以下ではデフォルトで無効になっています。これらの機能は、それらを使用するサブプロジェクトでのみ有効にして、ビルドをより効率的にします。

プロパティ 関数 交換
android.defaults.buildfeatures.aidl すべてのサブプロジェクトで AIDL コンパイルを有効にします。 AIDL ソースがあるサブプロジェクトでのみ AIDL コンパイルを有効にするには、それらのプロジェクトの Gradle ビルドファイルで次のプロパティを設定します。
AIDL ソースを含む各サブプロジェクトの Gradle ビルドファイル内の
android {
  buildFeatures {
    aidl = true
  }
}
android.defaults.buildfeatures.renderscript すべてのサブプロジェクトで RenderScript コンパイル を有効にします。 レンダースクリプト ソースがあるサブプロジェクトでのみレンダースクリプト コンパイルを有効にするには、それらのプロジェクトの Gradle ビルドファイルで次のプロパティを設定します。
android {
  buildFeatures {
    renderScript = true
  }
}

適用される Gradle プロパティ

次の Gradle プロパティを設定すると、AGP 9.0 はエラーをスローします。

これらのプロパティを使用するプロジェクトは、Android Gradle プラグイン Upgrade Assistant を使用しても AGP 9.0 にアップグレードされません。

プロパティ 関数
android.r8.integratedResourceShrinking リソースの縮小は常に R8 の一部として実行されるようになり、以前の実装は削除されました。

修正された問題

Android Gradle プラグイン 9.0.0-alpha10

修正された問題
Android Gradle プラグイン
extractNativeLibs と useEmbeddedDex はマニフェストから取得しない
AGP 9.0.0-alpha09 の R8 からの警告
lint
組み込みの Kotlin では .kotlin_module が META-INF に追加されない
Lint のクラスパスに異なるバージョンの重複するクラスが含まれている
プライベート リソースのオーバーライドの回避策が機能しない(tools:override = "true")

Android Gradle プラグイン 9.0.0-alpha09

修正された問題
Android Gradle プラグイン
`legacy-kapt` プラグインは `kotlin-kapt` とは異なり、アノテーション処理をスキップします
compileSdkSpec.minorApiLevel が SettingsExtension で機能しない
[fused lib - public] 生成された融合ライブラリにソースが含まれていない

Android Gradle プラグイン 9.0.0-alpha08

修正された問題
AGP 9.0.0-alpha08 で修正済みとしてマークされた公開の問題はありません

Android Gradle プラグイン 9.0.0-alpha07

修正された問題
Android Gradle プラグイン
コード生成タスクがあるとビルドが失敗する
`android.builtInKotlin=false`、`android.newDsl=false`、`android.enableLegacyVariantApi=false` の場合、`kotlin-android` プラグインを使用すると「API 'applicationVariants' is obsolete」というエラーで失敗する
kotlin.stdlib.default.dependency=false の場合、組み込みの Kotlin がバージョンなしの kotlin-stdlib を解決できない
DexData がファイルを閉じずに開くため、クリーンアップが妨げられる
AGP 9.0 で AndroidSourceDirectorySet が PatternFilterable の拡張を停止する
テスト専用モジュールのテスト フィクスチャ エラー
テスト フィクスチャでコンテキスト レシーバを使用すると、誤ったエラーが発生する
testFixtures の Kotlin コードで IDE のエラーが正しくない

Android Gradle プラグイン 9.0.0-alpha06

修正された問題
Android Gradle プラグイン
新しい最適化 DSL では、デフォルトで configuration.txt が作成されない
AGP 8.13.0 でモジュールのナビゲーション グラフの検証に失敗する
AGP が非推奨の Gradle API(複数文字列表記)を使用している
minSdkVersion >=21 で以前の multidex ライブラリを使用しようとしているユーザーに警告を表示
lint
Lint ChecksSdkIntAtLeast チェックで、アノテーション付きの値が正しいかどうかがチェックされない

Android Gradle プラグイン 9.0.0-alpha05

修正された問題
Android Gradle プラグイン
android.proguard.failOnMissingFiles が consumerProguardFiles で機能しない
Kotlin Gradle プラグインの依存関係を 2.2.10 に更新
KGP API を使用して KotlinJvmAndroidCompilation を作成する
テストソースに適用される Kotlin 明示的 API モード
lint
Lint が「Could not clean up K2 caches」という警告をスローする

Android Gradle プラグイン 9.0.0-alpha04

修正された問題
Android Gradle プラグイン
AGP 9.0 でデフォルトのソース/ターゲット Java バージョンを Java 8 から Java 11 に切り替え
android.useAndroidX のデフォルトを true に切り替え
組み込みの Kotlin で kapt プラグインを適用する際の例外を改善。
lint
Lint が「Could not clean up K2 caches」という警告をスローする

Android Gradle プラグイン 9.0.0-alpha03

修正された問題
Android Gradle プラグイン
`isIncludeAndroidResources` が有効になっている場合、AGP 8.12.0 で `process{Variant}UnitTestManifest` が tools:overrideLibrary の使用をマージできない
AGP が Gradle の JVM テストタスクで非推奨の警告を引き起こす
DependencyReportTask が構成キャッシュに対応していない
lint
バグ: 未使用のリソースを削除しても、その翻訳は削除されず、削除するかどうかの確認も行われない

Android Gradle プラグイン 9.0.0-alpha02

修正された問題
Android Gradle プラグイン
ProGuard ファイルが存在しない場合にビルドを失敗させる
buildconfig のデフォルトの gradle.properties フラグを削除
アプリの targetSdk のデフォルト値を minSdk ではなく compileSdk に基づくように変更

Android Gradle プラグイン 9.0.0-alpha01

修正された問題
Android Gradle プラグイン
AGP 9.0 で非推奨の AndroidSourceSet.jni を削除
AGP 9.0 で Installation.installOptions() を削除
AGP 9.0 で BuildType.isRenderscriptDebuggable を削除。
android.defaults.buildfeatures.renderscript を削除
`com.android.kotlin.multiplatform.library` が Gradle で管理されているデバイスでクラッシュする
`android.defaults.buildfeatures.aidl` のデフォルトの gradle.properties フラグを削除