Zum Android-KMP-Bibliotheks-Plug-in migrieren

Kotlin Multiplatform hat ein Gradle-Plug-in zum Konfigurieren des Bibliotheksmoduls.

Das com.android.kotlin.multiplatform.library-Plug-in ist der offizielle Ersatz für die bisherige Methode, Android-Ziele mithilfe des regulären Gradle-Plug-ins für Android-Bibliotheken (com.android.library) zu KMP-Bibliotheken hinzuzufügen.

Der bisherige Ansatz wird jetzt zugunsten des Plug-ins, auch Android-KMP-Plug-in genannt, eingestellt. Die weitere Verwendung des com.android.library-Plug-ins für KMP wird von JetBrains nicht mehr unterstützt und profitiert nicht von zukünftigen Updates und Verbesserungen.

Informationen zur Migration zu diesem Plug-in finden Sie im Abschnitt Android-KMP-Plug-in anwenden.

Wichtige Funktionen und Unterschiede

Das Android-KMP-Plugin ist speziell auf KMP-Projekte zugeschnitten und unterscheidet sich in mehreren wichtigen Punkten vom Standard-com.android.library-Plugin:

  • Architektur mit einer einzelnen Variante:Das Plug‑in verwendet eine einzelne Variante. Dadurch wird die Unterstützung für Produktvarianten und Build-Typen entfernt, was die Konfiguration vereinfacht und die Build-Leistung verbessert.

  • Für KMP optimiert:Das Plug-in ist für KMP-Bibliotheken konzipiert und konzentriert sich auf gemeinsamen Kotlin-Code und Interoperabilität. Es bietet keine Unterstützung für Android-spezifische native Builds, AIDL und RenderScript.

  • Tests standardmäßig deaktiviert:Sowohl Unit- als auch Gerätetests (Instrumentierungstests) sind standardmäßig deaktiviert, um die Build-Geschwindigkeit zu erhöhen. Sie können sie bei Bedarf aktivieren.

  • Keine Android-Erweiterung auf oberster Ebene:Die Konfiguration erfolgt mit einem androidLibrary-Block innerhalb der Gradle KMP-DSL, wodurch eine konsistente KMP-Projektstruktur beibehalten wird. Es gibt keinen Block für die Erweiterung android auf oberster Ebene.

  • Java-Kompilierung mit Opt-in:Die Java-Kompilierung ist standardmäßig deaktiviert. Verwenden Sie withJava() im androidLibrary-Block, um die Funktion zu aktivieren. Dadurch werden die Build-Zeiten verkürzt, wenn keine Java-Kompilierung erforderlich ist.

Vorteile des Android-KMP-Bibliotheks-Plug-ins

Das Android-KMP-Plug-in bietet die folgenden Vorteile für KMP-Projekte:

  • Verbesserte Build-Leistung und ‑Stabilität:Es wurde für optimierte Build-Geschwindigkeiten und verbesserte Stabilität in KMP-Projekten entwickelt. Der Fokus auf KMP-Workflows trägt zu einem effizienteren und zuverlässigeren Build-Prozess bei.

  • Verbesserte IDE-Integration:Bessere Vervollständigung von Code, Navigation, Fehlerbehebung und allgemeine Entwicklungsumgebung bei der Arbeit mit KMP-Android-Bibliotheken.

  • Vereinfachte Projektkonfiguration:Das Plug-in vereinfacht die Konfiguration für KMP-Projekte, indem es Android-spezifische Komplexitäten wie Build-Varianten entfernt. Das führt zu übersichtlicheren und besser wartbaren Build-Dateien. Bisher konnten durch die Verwendung des com.android.library-Plug-ins in KMP-Projekten verwirrende Quellsetnamen wie androidAndroidTest entstehen. Diese Namenskonvention war für Entwickler, die mit Standard-KMP-Projektstrukturen vertraut sind, weniger intuitiv.

Android-KMP-Plug-in auf ein vorhandenes Modul anwenden

So wenden Sie das Android-KMP-Plug-in auf ein vorhandenes KMP-Bibliotheksmodul an:

  1. Plug-ins im Versionskatalog deklarieren: Öffnen Sie die TOML-Datei des Versionskatalogs (normalerweise gradle/libs.versions.toml) und fügen Sie den Abschnitt mit den Plug-in-Definitionen hinzu:

    # To check the version number of the latest Kotlin release, go to
    # https://kotlinlang.org/docs/releases.html
    
    [versions]
    androidGradlePlugin = "8.12.0"
    kotlin = "KOTLIN_VERSION"
    
    [plugins]
    kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
    android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }
    
  2. Plug-in-Deklaration in der Stamm-Build-Datei anwenden Öffnen Sie die Datei build.gradle.kts im Stammverzeichnis Ihres Projekts. Fügen Sie die Plug-in-Aliasse dem plugins-Block mit apply false hinzu. Dadurch sind die Plug-in-Aliase für alle Unterprojekte verfügbar, ohne dass die Plug-in-Logik auf das Stammprojekt selbst angewendet wird.

    Kotlin

    // Root build.gradle.kts file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }

    Groovy

    // Root build.gradle file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }
  3. Wenden Sie das Plug-in in der Build-Datei eines KMP-Bibliotheksmoduls an. Öffnen Sie die Datei build.gradle.kts in Ihrem KMP-Bibliotheksmodul und wenden Sie das Plug-in oben in der Datei im Block plugins an:

    Kotlin

    // Module-specific build.gradle.kts file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }

    Groovy

    // Module-specific build.gradle file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }
  4. Android-KMP-Ziel konfigurieren Konfigurieren Sie den Kotlin Multiplatform-Block (kotlin), um das Android-Ziel zu definieren. Geben Sie im Block kotlin das Android-Ziel mit androidLibrary an:

    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.) ...
    }
  5. Änderungen übernehmen Nachdem Sie das Plug-in angewendet und den kotlin-Block konfiguriert haben, synchronisieren Sie Ihr Gradle-Projekt, um die Änderungen zu übernehmen.