Il plug-in Android per Gradle 9.0 introduce il supporto integrato di Kotlin e lo attiva
per impostazione predefinita. Ciò significa che non devi più applicare il plug-in
org.jetbrains.kotlin.android
(o kotlin-android
) nei file di build
per compilare i file sorgente Kotlin.
Grazie a Kotlin integrato, i file di build sono più semplici e puoi evitare
problemi di compatibilità tra AGP e il plug-in kotlin-android
.
Attiva Kotlin integrato
Per avere il supporto Kotlin integrato, devi avere AGP 9.0 o versioni successive.
AGP 9.0 abilita già Kotlin integrato per tutti i moduli in cui applichi
AGP, quindi non devi fare nulla per abilitarlo. Tuttavia, se in precedenza
hai disattivato Kotlin integrato impostando android.builtInKotlin=false
nel file gradle.properties
, devi rimuovere l'impostazione
o impostare android.builtInKotlin=true
per attivarla.
Kotlin integrato richiede alcune modifiche al progetto, quindi dopo averlo abilitato, segui i passaggi successivi per eseguire la migrazione del progetto.
Passaggi per la migrazione
Dopo aver eseguito l'upgrade del progetto da una versione precedente di AGP ad AGP 9.0 o versioni successive o dopo aver attivato manualmente Kotlin integrato, potresti visualizzare il seguente messaggio di errore:
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.
Questo perché Kotlin integrato richiede alcune modifiche al tuo progetto. Per risolvere l'errore, segui questi passaggi.
- Rimuovere il plug-in
kotlin-android
- Esegui la migrazione del plug-in
kotlin-kapt
, se necessario - Esegui la migrazione del blocco
kotlinOptions{}
, se necessario
1. Rimuovere il plug-in kotlin-android
Rimuovi il plug-in org.jetbrains.kotlin.android
(o kotlin-android
) dai file di build a livello di modulo in cui lo applichi.
Il codice esatto da rimuovere dipende dal fatto che tu stia utilizzando i cataloghi delle versioni per dichiarare i plug-in.
Con i cataloghi delle versioni
Kotlin
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Trendy
// Module-level build file plugins {alias(libs.plugins.kotlin.android)}
Nessun catalogo delle versioni
Kotlin
// Module-level build file plugins {id("org.jetbrains.kotlin.android")}
Trendy
// Module-level build file plugins {id 'org.jetbrains.kotlin.android'}
Poi, rimuovi il plug-in dal file di build di primo livello:
Con i cataloghi delle versioni
Kotlin
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Trendy
// Top-level build file plugins {alias(libs.plugins.kotlin.android) apply false}
Nessun catalogo delle versioni
Kotlin
// Top-level build file plugins {id("org.jetbrains.kotlin.android") version "KOTLIN_VERSION" apply false}
Trendy
// Top-level build file plugins {id 'org.jetbrains.kotlin.android' version 'KOTLIN_VERSION' apply false}
Se utilizzi i cataloghi delle versioni, rimuovi anche la definizione del plug-in dal file TOML del catalogo delle versioni (di solito gradle/libs.versions.toml
):
[plugins]kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "KOTLIN_VERSION" }
2. Esegui la migrazione del plug-in kotlin-kapt
, se necessario
Se utilizzi org.jetbrains.kotlin.kapt
(o kotlin-kapt
) nei file di build, questo plug-in non sarà compatibile con Kotlin integrato. Devi
sostituire questo plug-in con il plug-in com.android.legacy-kapt
, utilizzando
la stessa versione del plug-in Android Gradle attuale.
Ad esempio, con i cataloghi delle versioni, aggiorna il file TOML del catalogo delle versioni come segue:
[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" }
Quindi, aggiorna i file di build:
Kotlin
// Top-level build file plugins { alias(libs.plugins.legacy.kapt) apply falsealias(libs.plugins.kotlin.kapt) apply false}
Trendy
// 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)}
Trendy
// Module-level build file plugins { alias(libs.plugins.legacy.kapt)alias(libs.plugins.kotlin.kapt)}
3. Migra il blocco kotlinOptions{}
, se necessario
Se utilizzi il DSL android.kotlinOptions{}
, devi
eseguire la migrazione al DSL kotlin.compilerOptions{}
.
Ad esempio, aggiorna questo codice:
Kotlin
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
Trendy
android { kotlinOptions { languageVersion = "2.0" jvmTarget = "11" } }
...alla nuova 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 } }
Trendy
kotlin { compilerOptions { languageVersion = org.jetbrains.kotlin.gradle.dsl.KotlinVersion.KOTLIN_2_0 // Optional: Set jvmTarget // jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_11 } }
Segnala problemi
Dopo aver completato i passaggi precedenti, se riscontri problemi, consulta i problemi noti nella descrizione del problema n. 438678642 e inviaci un feedback, se necessario.
Disattivare Kotlin integrato
Se non riesci a eseguire la migrazione del progetto per utilizzare Kotlin integrato, imposta
android.builtInKotlin = false
nel file gradle.properties
per disattivare temporaneamente
Kotlin integrato.
In questo modo, la build mostra un avviso che ti ricorda di eseguire la migrazione a Kotlin integrato, in quanto non potrai disattivare Kotlin integrato in una versione futura di AGP 9.x prima di AGP 10.0.
Migrazione modulo per modulo
La proprietà Gradle android.builtInKotlin
ti consente di attivare o disattivare Kotlin integrato per tutti i moduli in cui applichi AGP.
Se la migrazione di tutti i moduli contemporaneamente è difficile, puoi eseguire la migrazione di un modulo alla volta:
Imposta
android.builtInKotlin = false
nel filegradle.properties
per disattivare Kotlin integrato per tutti i moduli.Applica il plug-in
com.android.experimental.built-in-kotlin
al modulo in cui vuoi attivare Kotlin integrato, utilizzando la stessa versione del plug-in Android Gradle attuale.Esegui i passaggi di migrazione precedenti per eseguire la migrazione di questo modulo a Kotlin integrato.
Dopo aver eseguito la migrazione di tutti i moduli, rimuovi l'impostazione
android.builtInKotlin = false
ingradle.properties
e il plug-incom.android.experimental.built-in-kotlin
nei file di build.