In precedenza, l'unico modo per integrare Android in un progetto KMP era utilizzare il plug-in Gradle della raccolta Android normale: com.android.library
. Tuttavia, questo approccio è stato ritirato a favore del plug-in com.android.kotlin.multiplatform.library
dedicato, noto anche come plug-in Android-KMP. Questa guida spiega come eseguire la migrazione al nuovo plug-in.
Funzionalità e differenze principali
Il plug-in Android-KMP (com.android.kotlin.multiplatform.library
) è personalizzato
specificamente per i progetti KMP e si differenzia dal plug-in
com.android.library
tradizionale in diversi aspetti chiave:
- Architettura a variante singola:il plug-in funziona con una singola variante, semplificando il processo di compilazione rimuovendo il supporto per i gusti dei prodotti e i tipi di compilazione comunemente presenti nei progetti di librerie Android standard. In questo modo, la configurazione viene semplificata e le prestazioni di compilazione delle librerie Android KMP vengono migliorate.
- Ottimizzato per KMP:il plug-in è progettato specificamente per le librerie Kotlin Multiplatform, incentrato sull'interoperabilità e sul codice Kotlin condiviso. Di conseguenza, omette il supporto per le build native specifiche per Android, AIDL (Android Interface Definition Language) e RenderScript, che in genere non sono pertinenti in un contesto di codice condiviso KMP.
- Test disattivati per impostazione predefinita:per migliorare ulteriormente la velocità di compilazione in un ambiente multipiattaforma, i test sono disattivati per impostazione predefinita. Puoi attivare esplicitamente i test, se necessari per il tuo progetto. Questo vale sia per i test sull'host (test di unità) sia per i test sul dispositivo (test di strumentazione).
- Nessuna estensione Android di primo livello: il plug-in non crea un'estensione
android
di primo livello nei file di compilazione Gradle. La configurazione viene gestita con un bloccoandroidLibrary
all'interno del DSL multipiattaforma Kotlin, mantenendo una struttura del progetto KMP coerente. - Attiva la compilazione Java:la compilazione Java non è attiva per impostazione predefinita. Se la libreria KMP deve compilare codice basato su Java, devi attivarla esplicitamente utilizzando l'API
withJava()
all'interno del blocco di configurazioneandroidLibrary
nel bloccokotlin
. Ciò consente un controllo più granulare sul processo di compilazione e può migliorare i tempi di compilazione quando non è richiesta la compilazione del codice basato su Java.
Vantaggi della migrazione
Il plug-in Android-KMP offre i seguenti vantaggi per i progetti KMP:
- Miglioramento delle prestazioni e della stabilità della compilazione: il plug-in Android-KMP è progettato per velocità di compilazione ottimizzate e stabilità migliorata nei progetti KMP. La sua architettura semplificata e l'attenzione ai flussi di lavoro KMP contribuiscono a un processo di compilazione più efficiente e affidabile.
- Integrazione IDE migliorata:il plug-in offre un'integrazione superiore con Android Studio e altri IDE Kotlin. Ciò comporta una migliore compilazione del codice, navigazione, debug ed esperienza complessiva dello sviluppatore quando si utilizzano le librerie Android KMP.
- Configurazione semplificata del progetto: rimuovendo complessità specifiche di Android come le varianti, il plug-in Android-KMP semplifica la configurazione per i progetti KMP. Il risultato è file di build più puliti e gestibili e una curva di apprendimento ridotta per gli sviluppatori che non hanno esperienza con lo sviluppo Android KMP.
In precedenza, quando si integrava Android in un progetto KMP utilizzando il plug-in
com.android.library
, l'interazione tra il plug-in Android per Gradle e il plug-in Kotlin per Gradle all'interno della struttura multipiattaforma a volte generava nomi ingannevoli degli insiemi di origine. Ad esempio, il set di origine dedicato alla configurazione dei test di Android instrumentati è stato denominatoandroidAndroidTest
. Questa convenzione di denominazione era meno intuitiva per gli sviluppatori familiari alle strutture di progetto KMP standard. - Soluzione ufficiale e consigliata: il plug-in
com.android.kotlin.multiplatform.library
è la sostituzione ufficiale del metodo precedente per l'aggiunta di target Android alle librerie KMP utilizzando il plug-incom.android.library
. Il plug-incom.android.library
per KMP non sarà più supportato da JetBrains e non potrà beneficiare di aggiornamenti e miglioramenti futuri.
Applicare il plug-in Android-KMP a un progetto
Esistono due modi principali per applicare il plug-in Android-KMP al progetto: * Per i moduli della libreria KMP esistenti, modifica manualmente i file Gradle. * Per i nuovi moduli della libreria KMP, crea il nuovo modulo direttamente dall'interfaccia utente di Android Studio.
Applica il plug-in a un modulo esistente
Per applicare il plug-in Android-KMP a un modulo della libreria KMP esistente:
Apri il file TOML del catalogo delle versioni e aggiungi quanto segue alla sezione
plugins
:[plugins] kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "KOTLIN_PLUGIN_VERSION" } android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "ANDROID_KMP_PLUGIN_VERSION" }
Sostituisci KOTLIN_PLUGIN_VERSION e ANDROID_KMP_PLUGIN_VERSION con le versioni effettive in uso.
Apri il file
build.gradle.kts
(Kotlin) obuild.gradle
(Groovy) nella directory principale del modulo della libreria KMP.Applica il plug-in nella parte superiore del file all'interno del blocco
plugins
:Kotlin
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Groovy
plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Configura il blocco Kotlin Multiplatform (
kotlin
) per definire il target Android. All'interno del bloccokotlin
, specifica il target Android utilizzandoandroidLibrary
:Kotlin
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.configure { jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } } sourceSets { androidMain { dependencies { // Add Android-specific dependencies here } } getByName("androidHostTest") { dependencies { } } getByName("androidDeviceTest") { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Groovy
kotlin { androidLibrary { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } compilations.configureEach { compilerOptions.options.jvmTarget.set( org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8 ) } } sourceSets { androidMain { dependencies { } } androidHostTest { dependencies { } } androidDeviceTest { dependencies { } } } // ... other targets (JVM, iOS, etc.) ... }
Dopo aver applicato il plug-in e configurato il blocco
kotlin
, sincronizza il progetto Gradle per applicare le modifiche.
Creare un nuovo modulo con il plug-in
Puoi anche creare un nuovo modulo della libreria Kotlin multipiattaforma direttamente in Android Studio. In questo modo vengono applicati automaticamente i plug-in necessari, incluso il plug-in Android-KMP. Per ulteriori indicazioni su come creare un nuovo modulo della libreria KMP con Android Studio, consulta Aggiungere Kotlin Multiplatform a un progetto esistente.
Per ulteriori informazioni sull'ecosistema multipiattaforma complessivo e su configurazioni più avanzate, consulta la documentazione ufficiale di Kotlin Multiplatform.