Android Gradle プラグイン 9.0 では、Kotlin の組み込みサポートが導入され、デフォルトで有効になります。つまり、Kotlin ソースファイルをコンパイルするために、ビルドファイルで org.jetbrains.kotlin.android
(または kotlin-android
)プラグインを適用する必要がなくなります。Kotlin が組み込まれているため、ビルドファイルが簡素化され、AGP と kotlin-android
プラグインの間の互換性の問題を回避できます。
組み込みの Kotlin を有効にする
Kotlin サポートを組み込むには、AGP 9.0 以降が必要です。AGP 9.0 では、AGP を適用するすべてのモジュールで組み込みの Kotlin がすでに有効になっているため、有効にするために何もする必要はありません。ただし、gradle.properties
ファイルで android.builtInKotlin=false
を設定して組み込みの Kotlin を無効にしている場合は、その設定を削除するか、android.builtInKotlin=true
を設定して有効にする必要があります。
組み込み Kotlin ではプロジェクトにいくつかの変更を加える必要があります。組み込み Kotlin を有効にした後、次の手順に沿ってプロジェクトを移行します。
移行手順
古い AGP バージョンから AGP 9.0 にプロジェクトをアップグレードした後、または手動で組み込みの Kotlin を有効にした後、次のエラー メッセージが表示されることがあります。
Failed to apply plugin 'org.jetbrains.kotlin.android'.
> Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
...または
Failed to apply plugin 'com.jetbrains.kotlin.android'
> The 'org.jetbrains.kotlin.android' plugin is no longer required for Kotlin support since AGP 9.0.
これは、組み込みの Kotlin ではプロジェクトにいくつかの変更を加える必要があるためです。このエラーを解決するには、次の操作を行います。
1. kotlin-android
プラグインを削除する
org.jetbrains.kotlin.android
(または kotlin-android
)プラグインを適用しているモジュール レベルのビルドファイルから、そのプラグインを削除します。削除するコードは、バージョン カタログを使用してプラグインを宣言しているかどうかによって異なります。
バージョン カタログを使用する
Kotlin
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Groovy
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
バージョン カタログがない
Kotlin
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
Groovy
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
次に、最上位のビルドファイルからプラグインを削除します。
バージョン カタログを使用する
Kotlin
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Groovy
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
バージョン カタログがない
Kotlin
// Top-level build file plugins {id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false}
Groovy
// Top-level build file plugins {id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false}
バージョン カタログを使用している場合は、バージョン カタログの TOML ファイル(通常は gradle/libs.versions.toml
)からプラグイン定義も削除します。
[plugins]kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }
2. 必要に応じて kotlin-kapt
プラグインを移行する
ビルドファイルで org.jetbrains.kotlin.kapt
(または kotlin-kapt
)を使用している場合、このプラグインは組み込みの Kotlin と互換性がありません。このプラグインを com.android.legacy-kapt
プラグインに置き換える必要があります。現在の Android Gradle プラグインと同じバージョンを使用してください。
たとえば、バージョン カタログを使用する場合は、次のようにバージョン カタログの TOML ファイルを更新します。
[plugins] android-application = { id = "com.android.application", version.ref = "AGP_VERSION" } # Add the following plugin definition legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "AGP_VERSION" } # Remove the following plugin definitionkotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "KOTLIN_VERSION" }
次に、ビルドファイルを更新します。
Kotlin
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Groovy
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Kotlin
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
Groovy
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
3. 必要に応じて kotlinOptions{}
ブロックを移行する
android.kotlinOptions{}
DSL を使用している場合は、kotlin.compilerOptions{}
DSL に移行する必要があります。
たとえば、次のコードを更新します。
Kotlin
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
Groovy
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...を新しい DSL に変換します。
Kotlin
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
Groovy
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
問題を報告する
上記の手順を完了した後、問題が発生した場合は、問題 #438678642 の説明にある既知の問題を確認し、必要に応じてフィードバックをお寄せください。
組み込みの Kotlin をオプトアウトする
プロジェクトを移行して組み込み Kotlin を使用できない場合は、gradle.properties
ファイルで android.builtInKotlin = false
を設定して、組み込み Kotlin を一時的に無効にします。その場合、AGP 10.0 より前の AGP 9.x の将来のバージョンでは組み込み Kotlin を無効にできないため、組み込み Kotlin に移行するよう促す警告がビルドで表示されます。
モジュールごとの移行
android.builtInKotlin
Gradle プロパティを使用すると、AGP を適用するすべてのモジュールで組み込みの Kotlin を有効または無効にできます。
すべてのモジュールを一度に移行するのが難しい場合は、一度に 1 つのモジュールを移行できます。
gradle.properties
ファイルでandroid.builtInKotlin = false
を設定して、すべてのモジュールの組み込み Kotlin を無効にします。現在の Android Gradle プラグインと同じバージョンを使用して、組み込みの Kotlin を有効にするモジュールに
com.android.experimental.built-in-kotlin
プラグインを適用します。前の移行手順に沿って、このモジュールを組み込みの Kotlin に移行します。
すべてのモジュールを移行したら、
gradle.properties
のandroid.builtInKotlin = false
設定と、ビルドファイルのcom.android.experimental.built-in-kotlin
プラグインを削除します。