組み込みの Kotlin に移行する

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 プラグインを削除する
  2. 必要に応じて kotlin-kapt プラグインを移行する
  3. 必要に応じて kotlinOptions{} ブロックを移行する

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 definition
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "KOTLIN_VERSION" }

次に、ビルドファイルを更新します。

Kotlin

// Top-level build file
plugins {
    alias(libs.plugins.legacy.kapt) apply false
    alias(libs.plugins.kotlin.kapt) apply false
}

Groovy

// Top-level build file
plugins {
    alias(libs.plugins.legacy.kapt) apply false
    alias(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 つのモジュールを移行できます。

  1. gradle.properties ファイルで android.builtInKotlin = false を設定して、すべてのモジュールの組み込み Kotlin を無効にします。

  2. 現在の Android Gradle プラグインと同じバージョンを使用して、組み込みの Kotlin を有効にするモジュールに com.android.experimental.built-in-kotlin プラグインを適用します。

  3. 前の移行手順に沿って、このモジュールを組み込みの Kotlin に移行します。

  4. すべてのモジュールを移行したら、gradle.propertiesandroid.builtInKotlin = false 設定と、ビルドファイルの com.android.experimental.built-in-kotlin プラグインを削除します。