Плагин Android Gradle 9.0 представляет встроенную поддержку Kotlin и включает её по умолчанию. Это означает, что вам больше не нужно применять плагин org.jetbrains.kotlin.android
(или kotlin-android
) в файлах сборки для компиляции исходных файлов Kotlin. Благодаря встроенному Kotlin файлы сборки становятся проще, и вы можете избежать проблем совместимости между AGP и плагином kotlin-android
.
Включить встроенный Kotlin
Для встроенной поддержки Kotlin требуется AGP 9.0 или выше. AGP 9.0 уже включает встроенную поддержку Kotlin для всех ваших модулей, где применяется AGP, поэтому вам не нужно ничего делать для её включения. Однако, если вы ранее отказались от встроенной поддержки Kotlin , установив параметр android.builtInKotlin=false
в файле gradle.properties
, вам необходимо либо удалить эту настройку, либо установить 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 требует внесения некоторых изменений в проект. Чтобы устранить эту ошибку, выполните следующие действия.
- Удалить плагин
kotlin-android
- При необходимости перенесите плагин
kotlin-kapt
- При необходимости перенесите блок
kotlinOptions{}
.
1. Удалите плагин kotlin-android
Удалите плагин org.jetbrains.kotlin.android
(или kotlin-android
) из файлов сборки на уровне модуля, где вы его применяете. Точный код для удаления зависит от того, используете ли вы каталоги версий для объявления плагинов.
С каталогами версий
Котлин
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Круто
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Нет каталогов версий
Котлин
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
Круто
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
Затем удалите плагин из файла сборки верхнего уровня:
С каталогами версий
Котлин
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Круто
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Нет каталогов версий
Котлин
// Top-level build file plugins {id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false}
Круто
// 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" }
Затем обновите файлы сборки:
Котлин
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Круто
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Котлин
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
Круто
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
3. При необходимости перенесите блок kotlinOptions{}
Если вы используете android.kotlinOptions{}
DSL, вам необходимо перенести его в kotlin.compilerOptions{}
DSL.
Например, обновите этот код:
Котлин
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
Круто
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...к новому DSL:
Котлин
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
Круто
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, установите значение android.builtInKotlin = false
в файле gradle.properties
, чтобы временно отключить встроенный Kotlin. При этом сборка выдаст предупреждение с напоминанием о необходимости перейти на встроенный Kotlin, поскольку отключить встроенный Kotlin в будущих версиях AGP 9.x до AGP 10.0 будет невозможно.
Миграция по модулям
Свойство Gradle android.builtInKotlin
позволяет включать или отключать встроенный Kotlin для всех ваших модулей, где вы применяете AGP.
Если перенос всех модулей одновременно вызывает затруднения, вы можете переносить модули по одному за раз:
Установите
android.builtInKotlin = false
в файлеgradle.properties
, чтобы отключить встроенный Kotlin для всех модулей.Примените плагин
com.android.experimental.built-in-kotlin
к модулю, в котором вы хотите включить встроенный Kotlin, используя ту же версию, что и ваш текущий плагин Android Gradle.Выполните предыдущие шаги миграции , чтобы перенести этот модуль во встроенный Kotlin.
После переноса всех модулей удалите настройку
android.builtInKotlin = false
в файлеgradle.properties
и плагинcom.android.experimental.built-in-kotlin
в файлах сборки.