El complemento de Android para Gradle 9.0 introduce la compatibilidad integrada con Kotlin y la habilita de forma predeterminada. Eso significa que ya no tienes que aplicar el complemento org.jetbrains.kotlin.android (o kotlin-android) en tus archivos de compilación para compilar archivos de origen de Kotlin.
Con Kotlin integrado, tus archivos de compilación son más simples y puedes evitar problemas de compatibilidad entre AGP y el complemento kotlin-android.
Habilita Kotlin integrado
Necesitas AGP 9.0 o una versión posterior para tener compatibilidad con Kotlin integrado.
AGP 9.0 ya habilita Kotlin integrado para todos tus módulos en los que aplicas AGP, por lo que no necesitas hacer nada para habilitarlo. Sin embargo, si anteriormente
inhabilitaste Kotlin integrado configurando android.builtInKotlin=false
en el archivo gradle.properties, debes quitar esa configuración o establecerla en
true.
Kotlin integrado requiere algunos cambios en tu proyecto, por lo que, después de habilitarlo, sigue los pasos que se indican a continuación para migrar tu proyecto.
Pasos de la migración
Después de actualizar tu proyecto de una versión anterior de AGP a AGP 9.0 o después de habilitar manualmente Kotlin integrado, es posible que veas el siguiente mensaje de error:
Failed to apply plugin 'org.jetbrains.kotlin.android'.
> Cannot add extension with name 'kotlin', as there is an extension already registered with that name.
...o
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.
Este error se produce porque Kotlin integrado requiere algunos cambios en tu proyecto. Para resolver este error, sigue estos pasos:
- Quita el complemento
kotlin-android. - Migra el complemento
kotlin-kaptsi es necesario. - Migra el DSL
android.kotlinOptions{}si es necesario. - Migra el DSL
kotlin.sourceSets{}si es necesario.
1. Quita el complemento kotlin-android
Quita el complemento org.jetbrains.kotlin.android (o kotlin-android) de los archivos de compilación a nivel del módulo en los que lo aplicas.
El código exacto que se quitará depende de
si usas catálogos de versiones para declarar complementos.
Con catálogos de versiones
Kotlin
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Groovy
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Sin catálogos de versiones
Kotlin
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
Groovy
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
Luego, quita el complemento de tu archivo de compilación de nivel superior:
Con catálogos de versiones
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}
Sin catálogos de versiones
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}
Si usas catálogos de versiones, también quita la definición del complemento del archivo TOML del catálogo de versiones (por lo general, gradle/libs.versions.toml):
[plugins]kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }
2. Migra el complemento kotlin-kapt si es necesario
El complemento org.jetbrains.kotlin.kapt (o kotlin-kapt) no es compatible con Kotlin integrado. Si usas kapt, te recomendamos que
migres tu proyecto a KSP.
Si aún no puedes migrar a KSP, reemplaza el complemento kotlin-kapt por el complemento com.android.legacy-kapt con la misma versión que tu complemento de Gradle para Android.
Por ejemplo, con los catálogos de versiones, actualiza tu archivo TOML del catálogo de versiones de la siguiente manera:
[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" }
Luego, actualiza tus archivos de compilación:
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. Migra el DSL android.kotlinOptions{} si es necesario
Si usas el DSL android.kotlinOptions{}, debes
migrarlo al DSL kotlin.compilerOptions{}.
Por ejemplo, actualiza este código:
Kotlin
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
Groovy
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...al nuevo 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 } }
4. Migra el DSL kotlin.sourceSets{} si es necesario
Cuando usas el complemento kotlin-android, AGP te permite agregar directorios de origen de Kotlin
adicionales con el DSL android.sourceSets{} o el
kotlin.sourceSets{} DSL.
Con el DSL android.sourceSets{}, puedes agregar los directorios al conjunto AndroidSourceSet.kotlin o al conjunto AndroidSourceSet.java.
Con Kotlin integrado, la única opción admitida es agregar los directorios al conjunto AndroidSourceSet.kotlin con el DSL android.sourceSets{}.
Si usas opciones no admitidas, migra de la siguiente manera:
Kotlin
# Adding Kotlin source directories to kotlin.sourceSets is not supportedkotlin.sourceSets.named("main") { kotlin.srcDir("additionalSourceDirectory/kotlin") }# Adding Kotlin source directories to AndroidSourceSet.java is also not supportedandroid.sourceSets.named("main") { java.directories += "additionalSourceDirectory/kotlin" }# Add Kotlin source directories to AndroidSourceSet.kotlin android.sourceSets.named("main") { kotlin.directories += "additionalSourceDirectory/kotlin" }
Groovy
# Adding Kotlin source directories to kotlin.sourceSets is not supportedkotlin.sourceSets.named("main") { kotlin.srcDir("additionalSourceDirectory/kotlin") }# Adding Kotlin source directories to AndroidSourceSet.java is also not supportedandroid.sourceSets.named("main") { java.directories.add("additionalSourceDirectory/kotlin") }# Add Kotlin source directories to AndroidSourceSet.kotlin android.sourceSets.named("main") { kotlin.directories.add("additionalSourceDirectory/kotlin") }
Si deseas agregar un directorio del código fuente de Kotlin a una variante específica o si el
directorio es generado por una tarea, puedes usar los métodos
addStaticSourceDirectory o addGeneratedSourceDirectory
en la API de variantes:
Kotlin
androidComponents.onVariants { variant -> variant.sources.kotlin!!.addStaticSourceDirectory("additionalSourceDirectory/kotlin") variant.sources.kotlin!!.addGeneratedSourceDirectory(TASK_PROVIDER, TASK_OUTPUT) }
Groovy
androidComponents.onVariants { variant -> variant.sources.kotlin!!.addStaticSourceDirectory("additionalSourceDirectory/kotlin") variant.sources.kotlin!!.addGeneratedSourceDirectory(TASK_PROVIDER, TASK_OUTPUT) }
Informar problemas
Si tienes problemas después de completar los pasos anteriores, revisa los problemas conocidos en el problema #438678642 y envíanos comentarios si es necesario.
Inhabilita Kotlin integrado
Si no puedes migrar tu proyecto para usar Kotlin integrado, configura android.builtInKotlin=false en el archivo gradle.properties para inhabilitarlo temporalmente.
Cuando lo hagas, la compilación mostrará una advertencia que te recordará que debes migrar a Kotlin integrado, ya que no podrás inhabilitarlo en AGP 10.0.
Cuando esté todo listo para migrar tu proyecto, habilita Kotlin integrado y sigue los pasos de migración.
Migración módulo por módulo
La propiedad de Gradle android.builtInKotlin te permite habilitar o inhabilitar Kotlin integrado para todos tus módulos en los que aplicas AGP.
Si migrar todos tus módulos a la vez es difícil, puedes migrar un módulo a la vez:
Configura
android.builtInKotlin=falseen el archivogradle.propertiespara inhabilitar Kotlin integrado para todos los módulos.Aplica el complemento
com.android.built-in-kotlinal módulo en el que deseas habilitar Kotlin integrado con la misma versión que tu complemento de Android para Gradle.Sigue los pasos de migración anteriores para migrar este módulo a Kotlin integrado.
Una vez que hayas migrado todos tus módulos, quita la configuración
android.builtInKotlin=falseengradle.propertiesy el complementocom.android.built-in-kotlinen tus archivos de compilación.
Opción para inhabilitar Kotlin integrado de forma selectiva
El complemento de Android para Gradle 9.0 habilita Kotlin integrado para todos los módulos en los que se aplica. Recomendamos inhabilitar Kotlin integrado de forma selectiva para los módulos que no tienen fuentes de Kotlin en proyectos grandes. Esto quita la tarea de compilación de Kotlin, que tiene un pequeño costo de rendimiento de compilación, y la dependencia automática de la biblioteca estándar de Kotlin.
Para inhabilitar Kotlin integrado para un módulo, configura enableKotlin = false en el archivo de compilación de ese módulo:
Kotlin
android { enableKotlin = false }
Groovy
android { enableKotlin = false }