Das Gradle-Plug-in com.android.kotlin.multiplatform.library ist das offiziell unterstützte Tool zum Hinzufügen eines Android-Ziels zu einem Kotlin Multiplatform-Bibliotheksmodul (KMP) . Es vereinfacht die Projektkonfiguration, verbessert die Build-Leistung und bietet eine bessere Integration mit Android Studio.
Die Verwendung des Plug-ins com.android.library für die KMP-Entwicklung hängt von Android
Gradle-Plug-in-APIs ab, die veraltet sind und für die im Android
Gradle-Plug-in 9.0 und höher (4. Quartal 2025) eine Aktivierung erforderlich ist. Diese APIs
werden voraussichtlich im Android Gradle-Plug-in 10.0
(zweite Hälfte 2026) entfernt.
Informationen zum Anwenden dieses Plug-ins finden Sie im Abschnitt Android-KMP-Plug-in anwenden. Wenn Sie von den Legacy-APIs migrieren müssen, lesen Sie die Migration Guide.
Wenn Sie Hilfe bei der Migration zu AGP 9.0 oder höher benötigen, können Sie den Agent-Skill verwenden, der von JetBrains für KMP-Apps erstellt wurde. Weitere Informationen zur Verwendung von Skills in Android Studio finden Sie unter Agent-Modus mit Skills erweitern. Beachten Sie, dass KI-Ergebnisse nicht vollständig vorhersehbar sind.
Wichtige Funktionen und Unterschiede
Das Android-KMP-Plug-in ist speziell auf KMP-Projekte zugeschnitten und unterscheidet sich in mehreren wichtigen Punkten vom Standard-Plug-in com.android.library:
Architektur mit einer einzigen Variante:Das Plug-in verwendet eine einzige Variante und unterstützt keine Produktvarianten und Build-Typen mehr. Dadurch wird die Konfiguration vereinfacht und die Build-Leistung verbessert.
Für KMP optimiert:Das Plug-in wurde für KMP-Bibliotheken entwickelt und konzentriert sich auf gemeinsamen Kotlin-Code und Interoperabilität. Es unterstützt keine Android-spezifischen nativen 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
android-Block in der Gradle-KMP-DSL, wodurch eine einheitliche KMP-Projektstruktur beibehalten wird. Es gibt keinenandroid-Erweiterungsblock auf oberster Ebene.Aktivierung der Java-Kompilierung erforderlich:Die Java-Kompilierung ist standardmäßig deaktiviert. Verwenden Sie
withJava()imandroid-Block, um sie zu aktivieren. Dadurch werden die Build-Zeiten verbessert, wenn keine Java-Kompilierung erforderlich ist.
Vorteile des Android-KMP-Bibliotheks-Plug-ins
Das Android-KMP-Plug-in bietet folgende 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:Es bietet eine bessere Codevervollständigung, Navigation, Fehlerbehebung und insgesamt eine bessere Entwicklererfahrung bei der Arbeit mit KMP-Android-Bibliotheken.
Vereinfachte Projektkonfiguration:Das Plug-in vereinfacht die Konfiguration für KMP-Projekte, indem Android-spezifische Komplexitäten wie Build-Varianten entfernt werden. Dies führt zu übersichtlicheren und besser wartbaren Build-Dateien. Bisher konnte die Verwendung des Plug-ins
com.android.libraryin KMP-Projekten zu verwirrenden Source-Set-Namen führen, z. B.androidAndroidTest. Diese Benennungskonvention war für Entwickler, die mit Standard-KMP-Projektstrukturen vertraut sind, weniger intuitiv.
Problemumgehungen für nicht unterstützte Funktionen
Im Vergleich zur KMP-Integration mit dem Plug-in com.android.library fehlen im Plug-in com.android.kotlin.multiplatform.library einige Funktionen. Hier sind die Problemumgehungen für die nicht unterstützten Funktionen:
Build-Varianten
Build-Typen und Produktvarianten werden nicht unterstützt. Das liegt daran, dass das neue Plug-in eine Architektur mit einer einzigen Variante verwendet, wodurch die Konfiguration vereinfacht und die Build-Leistung verbessert wird.
Wenn Sie Build-Varianten benötigen, empfehlen wir, ein separates eigenständiges Android-Bibliotheksmodul mit dem Plug-in
com.android.libraryzu erstellen, Build-Typen und Produktvarianten in diesem Modul zu konfigurieren und es dann als Standardprojektabhängigkeit aus demandroidMainSource-Set Ihrer Kotlin Multiplatform-Bibliothek zu verwenden. Weitere Informationen finden Sie unter Android-Bibliothek erstellen und Build-Varianten konfigurieren.Datenbindung und Ansichtbindung
Dies sind Android-spezifische UI-Framework-Funktionen, die eng mit dem Android-Ansichtssystem und XML-Layouts verknüpft sind. Im neuen Android-KMP-Bibliotheks-Plug-in empfehlen wir, die UI mit einem plattformübergreifenden Framework wie Compose Multiplatform zu verarbeiten. Datenbindung und Ansichtbindung gelten als Implementierungsdetails einer endgültigen Android-App und nicht als freigebare Bibliothek.
Unterstützung für native Builds
Das neue Plug-in konzentriert sich auf die Erstellung einer Standard-AAR-Datei für das Android-Ziel. Die Integration von nativem Code in Kotlin Multiplatform wird direkt von den eigenen nativen Zielen von KMP (z. B.
androidNativeArm64undandroidNativeX86) und den C-Interop-Funktionen verarbeitet. Wenn Sie nativen C/C++-Code einfügen müssen, sollten Sie ihn als Teil eines gemeinsamen oder nativen Quellsatzes definieren und die C-Interop imkotlin-Block konfigurieren, anstatt den Android-spezifischenexternalNativeBuild-Mechanismus zu verwenden.Wenn Sie alternativ Unterstützung für native Builds über
externalNativeBuildbenötigen, empfehlen wir, ein separates eigenständigescom.android.library-Modul zu erstellen, in dem Sie nativen Code einbinden können, und diese eigenständige Bibliothek aus demandroidMain-Source-Set Ihres Kotlin Multiplatform-Bibliotheksprojekts zu verwenden. Weitere Informationen finden Sie unter Android-Bibliothek erstellen und C- und C++-Code zum Projekt hinzufügen.BuildConfig-KlasseDie Funktion
BuildConfigist in Umgebungen mit mehreren Varianten am nützlichsten. Da das neue Kotlin Multiplatform-Bibliotheks-Plug-in variantenunabhängig ist und keine Unterstützung für Build-Typen und Produktvarianten bietet, ist diese Funktion nicht implementiert. Alternativ empfehlen wir, das Plug-inBuildKonfigoder ähnliche Community-Lösungen zu verwenden, um Metadaten für alle Ziele zu generieren.
Vorbereitung
Damit Sie das Plug-in com.android.kotlin.multiplatform.library verwenden können, muss Ihr Projekt mit den folgenden Mindestversionen oder höher konfiguriert sein:
- Android Gradle-Plug-in (AGP): 8.10.0
- Kotlin Gradle-Plug-in (KGP): 2.0.0
Android-KMP-Plug-in auf ein vorhandenes Modul anwenden
So wenden Sie das Android-KMP-Plug-in auf ein vorhandenes KMP-Bibliotheksmodul an:
Plug-ins im Versionskatalog deklarieren Öffnen Sie die TOML-Datei des Versionskatalogs (in der Regel
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 = "9.2.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" }Plug-in-Deklaration in der Build-Datei des Stammverzeichnisses anwenden Öffnen Sie die Datei
build.gradle.ktsim Stammverzeichnis Ihres Projekts. Fügen Sie die Plug-in-Aliasse mitapply falsezum Blockpluginshinzu. Dadurch sind die Plug-in-Aliasse 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 }
Plug-in in der Build-Datei eines KMP-Bibliotheksmoduls anwenden Öffnen Sie die Datei
build.gradle.ktsin Ihrem KMP-Bibliotheksmodul und wenden Sie das Plug-in oben in der Datei im Blockpluginsan: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) }
Android-KMP-Ziel konfigurieren Konfigurieren Sie den Kotlin Multiplatform-Block (
kotlin), um das Android-Ziel zu definieren. Geben Sie im Blockkotlindas Android-Ziel mitandroidan:Kotlin
kotlin { android { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { sourceSetTreeName = "test" } 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 { android { namespace = "com.example.kmpfirstlib" compileSdk = 33 minSdk = 24 withJava() // enable java compilation support withHostTestBuilder {}.configure {} withDeviceTestBuilder { it.sourceSetTreeName = "test" } 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.) ... }
Änderungen übernehmen Nachdem Sie das Plug-in angewendet und den Block
kotlinkonfiguriert haben, synchronisieren Sie Ihr Gradle-Projekt, um die Änderungen zu übernehmen.
Von Legacy-Plug-in migrieren
In dieser Anleitung wird beschrieben, wie Sie vom Legacy-Plug-in com.android.library zum Plug-in com.android.kotlin.multiplatform.library migrieren.
1. Quellen verschieben
Mit dem Legacy-Plug-in konnten Sie neben src/androidMain, src/androidHostTest und src/androidDeviceTest auch die Quellsätze src/main, src/test und src/androidTest verwenden. Das neue Plug-in verwendet nur die letztgenannten Quellverzeichnisse. Daher müssen Sie die Quellen von src/main nach src/androidMain, von src/test nach src/androidHostTest und von src/androidTest nach src/androidDeviceTest verschieben.
2. Abhängigkeiten deklarieren
Eine häufige Aufgabe ist das Deklarieren von Abhängigkeiten für Android-spezifische Quellsätze. Mit dem neuen Plug-in müssen diese explizit im Block sourceSets platziert werden, anders als beim zuvor verwendeten allgemeinen Block dependencies.
Android-KMP
Das neue Plug-in fördert eine übersichtlichere Struktur, indem Android-Abhängigkeiten im androidMain Source-Set gruppiert werden. Neben dem Haupt-Source-Set
gibt es zwei Test-Source-Sets, die bei Bedarf erstellt werden:
androidDeviceTest und androidHostTest. Weitere Informationen finden Sie unter Host- und
Gerätetests konfigurieren.
// build.gradle.kts
kotlin {
android {}
//... other targets
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
}
// Dependencies are now scoped to the specific Android source set
androidMain.dependencies {
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.11.0")
}
}
}
Die Quellsätze haben entsprechende Kotlin
Kompilierungen mit den Namen main, deviceTest,
und hostTest. Die Quellsätze und Kompilierungen können im Build-Skript so konfiguriert werden:
// build.gradle.kts
kotlin {
android {
compilations.getByName("deviceTest") {
kotlinOptions.languageVersion = "2.0"
}
}
}
Legacy-Plug-in
Mit dem alten Plug-in konnten Sie Android-spezifische Abhängigkeiten im Abhängigkeitsblock auf oberster Ebene deklarieren, was in einem Multiplatform-Modul manchmal verwirrend sein konnte.
// build.gradle.kts
kotlin {
androidTarget()
//... other targets
}
// Dependencies for all source sets were often mixed in one block
dependencies {
// Common dependencies
commonMainImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
// Android-specific dependencies
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.11.0")
}
3. Android-Ressourcen aktivieren
Die Unterstützung für Android-Ressourcen (res-Ordner) ist im neuen Plug-in standardmäßig nicht aktiviert, um die Build-Leistung zu optimieren. Sie müssen sie aktivieren, um sie zu verwenden. Diese Änderung trägt dazu bei, dass Projekte, für die keine Android-spezifischen Ressourcen erforderlich sind, nicht durch den damit verbundenen Build-Aufwand belastet werden.
Android-KMP
Sie müssen die Verarbeitung von Android-Ressourcen explizit aktivieren. Die Ressourcen sollten in src/androidMain/res platziert werden.
// build.gradle.kts
kotlin {
android {
// ...
// Enable Android resource processing
androidResources {
enable = true
}
}
}
// Project Structure
// └── src
// └── androidMain
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
Legacy-Plug-in
Die Ressourcenverarbeitung war standardmäßig aktiviert. Sie konnten sofort ein res-Verzeichnis in src/main hinzufügen und XML-Drawables, -Werte usw. hinzufügen.
// build.gradle.kts
android {
namespace = "com.example.library"
compileSdk = 34
// No extra configuration was needed to enable resources.
}
// Project Structure
// └── src
// └── main
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
4. Host- und Gerätetests konfigurieren
Eine wichtige Änderung im neuen Plug-in ist, dass Android-Host-seitige (Unit-) und geräteseitige (Instrumentierungs-)Tests standardmäßig deaktiviert sind. Sie müssen die Testquellsätze und ‑konfigurationen explizit aktivieren, während sie mit dem alten Plug-in automatisch erstellt wurden.
Dieses Aktivierungsmodell trägt dazu bei, dass Ihr Projekt schlank bleibt und nur die Build-Logik und Quellsätze enthält, die Sie aktiv verwenden.
Android-KMP
Im neuen Plug-in aktivieren und konfigurieren Sie Tests im Block kotlin.android. Dadurch wird die Einrichtung expliziter und es werden keine nicht verwendeten Testkomponenten erstellt. Der androidUnitTest Source-Set wird zu
androidHostTest (das Testverzeichnis ändert sich von src/androidUnitTest zu
src/androidHostTest) und androidInstrumentedTest wird zu
androidDeviceTest (das Testverzeichnis ändert sich von
src/androidInstrumentedTest zu src/androidDeviceTest).
// build.gradle.kts
kotlin {
android {
// ...
// Opt-in to enable and configure host-side (unit) tests
withHostTest {
isIncludeAndroidResources = true
}
// Opt-in to enable and configure device-side (instrumented) tests
withDeviceTest {
instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
execution = "HOST"
}
}
}
// Project Structure (After Opt-in)
// └── src
// ├── androidHostTest
// └── androidDeviceTest
Legacy-Plug-in
Mit dem Plug-in com.android.library werden die Quellsätze androidUnitTest und androidInstrumentedTest standardmäßig erstellt. Sie konfigurieren ihr Verhalten im Block android, in der Regel mit der DSL testOptions.
// build.gradle.kts
android {
defaultConfig {
// Runner was configured in defaultConfig
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
testOptions {
// Configure unit tests (for the 'test' source set)
unitTests.isIncludeAndroidResources = true
// Configure device tests (for the 'androidTest' source set)
execution = "HOST"
}
}
// Project Structure (Defaults)
// └── src
// ├── test
// └── androidTest
5. Java-Quellkompilierung aktivieren
Wenn Ihre KMP-Bibliothek Java-Quellen für das Android-Ziel kompilieren muss, müssen Sie diese Funktion mit dem neuen Plug-in explizit aktivieren. Beachten Sie, dass dadurch die Kompilierung für Java-Dateien aktiviert wird, die sich direkt in Ihrem Projekt befinden, nicht für die Abhängigkeiten. Auch die Methode zum Festlegen der JVM-Zielversion des Java- und Kotlin-Compilers ändert sich.
Android-KMP
Sie müssen die Java-Kompilierung mit withJava() aktivieren. Das JVM-Ziel wird jetzt direkt im Block kotlin { android {} } konfiguriert, um die Einrichtung zu vereinheitlichen. Wenn Sie hier jvmTarget festlegen, gilt dies sowohl für die Kotlin- als auch für die Java-Kompilierung für das Android-Ziel.
// build.gradle.kts
kotlin {
android {
// Opt-in to enable Java source compilation
withJava()
// Configure the JVM target for both Kotlin and Java sources
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
}
}
// ...
}
// Project Structure:
// └── src
// └── androidMain
// ├── kotlin
// │ └── com/example/MyKotlinClass.kt
// └── java
// └── com.example/MyJavaClass.java
Legacy-Plug-in
Die Java-Kompilierung war standardmäßig aktiviert. Das JVM-Ziel für Java- und Kotlin-Quellen wurde im Android-Block mit „compileOptions“ festgelegt.
// build.gradle.kts
android {
// ...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
kotlin {
androidTarget {
compilations.all {
kotlinOptions.jvmTarget = "1.8"
}
}
}
6. Mit Build-Varianten über androidComponents interagieren
Die Erweiterung androidComponents ist weiterhin verfügbar, um programmatisch mit Build-Artefakten zu interagieren. Während ein Großteil der Variant API gleich bleibt,
die neue AndroidKotlinMultiplatformVariant Schnittstelle ist eingeschränkter, da
das Plug-in nur eine einzige Variante erzeugt.
Daher sind Eigenschaften im Zusammenhang mit Build-Typen und Produktvarianten nicht mehr für das Variantenobjekt verfügbar.
Android-KMP
Der Block onVariants wird jetzt nur einmal durchlaufen. Sie können weiterhin auf allgemeine Eigenschaften wie name und artifacts zugreifen, aber nicht auf Build-Typ-spezifische.
// build.gradle.kts
androidComponents {
onVariants { variant ->
val artifacts = variant.artifacts
}
}
Legacy-Plug-in
Bei mehreren Varianten konnten Sie auf Build-Typ-spezifische Eigenschaften zugreifen, um Aufgaben zu konfigurieren.
// build.gradle.kts
androidComponents {
onVariants(selector().withBuildType("release")) { variant ->
// ...
}
}
7. Varianten von Android-Bibliotheksabhängigkeiten auswählen
Ihre KMP-Bibliothek erzeugt eine einzige Variante für Android. Möglicherweise sind Sie jedoch von einer Standard-Android-Bibliothek (com.android.library) abhängig, die mehrere Varianten hat (z.B. free/paid-Produktvarianten). Es ist häufig erforderlich, zu steuern, wie Ihr Projekt eine Variante aus dieser Abhängigkeit auswählt.
Android-KMP
Das neue Plug-in zentralisiert und verdeutlicht diese Logik im Block kotlin.android.localDependencySelection. Dadurch wird viel klarer, welche Varianten externer Abhängigkeiten für Ihre KMP-Bibliothek mit einer einzigen Variante ausgewählt werden.
// build.gradle.kts
kotlin {
android {
localDependencySelection {
// For dependencies with multiple build types, select 'debug' first, and 'release' in case 'debug' is missing
selectBuildTypeFrom.set(listOf("debug", "release"))
// For dependencies with a 'type' flavor dimension...
productFlavorDimension("type") {
// ...select the 'typeone' flavor.
selectFrom.set(listOf("typeone"))
}
}
}
}
Legacy-Plug-in
Sie haben Strategien zur Auswahl von Abhängigkeiten in den buildTypes and
productFlavors Blöcken konfiguriert. Dabei wurde häufig missingDimensionStrategy verwendet, um eine Standardvariante für eine Dimension bereitzustellen, die Ihre Bibliothek nicht hatte, oder matchingFallbacks innerhalb einer bestimmten Variante, um eine Suchreihenfolge zu definieren.
Weitere Informationen zur API-Nutzung finden Sie unter Fehler bei der Übereinstimmung beheben.
8. Abhängigkeiten für die Compose-Vorschau
Normalerweise möchten wir, dass bestimmte Bibliotheken auf unsere lokale Entwicklungsumgebung beschränkt sind, damit interne Tools nicht in das endgültige veröffentlichte Artefakt gelangen. Das ist mit dem neuen KMP-Android-Plug-in eine Herausforderung, da es die Architektur mit Build-Typen entfernt, die verwendet wurde, um Entwicklungsabhängigkeiten vom Release-Code zu trennen.
Android-KMP
Wenn Sie eine Abhängigkeit nur für die lokale Entwicklung und das Testen hinzufügen möchten, fügen Sie sie direkt der Laufzeit-Classpath-Konfiguration (im Block dependencies auf oberster Ebene) der Haupt-Android-Kompilierung hinzu. Dadurch ist die
Abhängigkeit zur Laufzeit verfügbar (z. B. für Tools wie
die Compose-Vorschau), ist aber nicht Teil des Kompilierungs-
Classpaths oder der veröffentlichten API Ihrer Bibliothek.
// build.gradle.kts
dependencies {
"androidRuntimeClasspath"(libs.androidx.compose.ui.tooling)
}
Legacy-Plug-in
Für Kotlin Multiplatform-Projekte, die das Plug-in com.android.library für das Android-Ziel verwenden, sollte die Konfiguration debugImplementation verwendet werden. Dadurch wird die Abhängigkeit auf den Debug-Build-Typ beschränkt und verhindert, dass sie in die Release-Variante der Bibliothek aufgenommen wird, die von den Nutzern verwendet wird.
// build.gradle.kts
dependencies {
debugImplementation(libs.androidx.compose.ui.tooling)
}
9. JVM-Ziel für das KMP-Android-Ziel konfigurieren
Das KMP-Android-Plug-in legt das JVM-Ziel mit android.compilerOptions.jvmTarget fest, das sowohl für Java als auch für Kotlin gilt. Dadurch wird die Konfiguration im Vergleich zu den separaten Blöcken compileOptions und kotlinOptions in reinen Android-Projekten vereinfacht.
Android-KMP
Wenn Sie mit einem Kotlin Multiplatform-Projekt (KMP) arbeiten, das ein Android-Ziel enthält, haben Sie mehrere Möglichkeiten, die JVM-Zielversion für den Kotlin- und den Java-Compiler zu konfigurieren. Es ist wichtig, den Umfang und die Hierarchie dieser Konfigurationen zu verstehen, um die Bytecode-Kompatibilität Ihres Projekts zu verwalten.
Hier sind die drei wichtigsten Möglichkeiten, das JVM-Ziel festzulegen, sortiert nach Priorität (niedrigste bis höchste). JVM-Zielwerte mit höherer Priorität gelten für eine kleinere Teilmenge der konfigurierten Ziele und überschreiben Werte mit niedrigerer Priorität. Das bedeutet, dass Sie verschiedene JVM-Versionen für verschiedene Ziele und Kompilierungen innerhalb von Zielen in Ihrem Projekt festlegen können.
Kotlin-Toolchain verwenden (niedrigste Priorität)
Die allgemeinste Möglichkeit, das JVM-Ziel festzulegen, besteht darin, die Toolchain im Block kotlin Ihrer Datei build.gradle.kts anzugeben. Mit diesem Ansatz wird das Ziel für Kotlin- und Java-Kompilierungsaufgaben für alle JVM-basierten Ziele in Ihrem Projekt festgelegt, einschließlich Android.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
Bei dieser Konfiguration wird sowohl kotlinc als auch javac auf JVM 21 ausgerichtet. So können Sie eine einheitliche Baseline für Ihr gesamtes Projekt festlegen.
Compileroptionen auf Android-Zielebene verwenden (mittlere Priorität)
Sie können das JVM-Ziel speziell für das Android-KMP-Ziel im Block android angeben. Diese Einstellung überschreibt die projektweite jvmToolchain-Konfiguration und gilt für alle Android-Kompilierungen.
// build.gradle.kts
kotlin {
android {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
}
In diesem Fall wird der Kotlin- und Java-Code des Android-Ziels auf JVM 11 kompiliert, auch wenn eine andere Version für jvmToolchain festgelegt ist.
Compileroptionen auf Kompilierungsebene verwenden (höchste Priorität)
Für die detaillierteste Steuerung können Sie Compileroptionen pro Kompilierung konfigurieren (z. B. nur für androidMain oder androidHostTest). Das ist nützlich, wenn für eine bestimmte Kompilierung eine andere JVM-Version verwendet werden muss. Diese Einstellung überschreibt sowohl die Kotlin-Toolchain als auch die Optionen auf Android-Zielebene.
// build.gradle.kts
kotlin {
android {
compilations.all {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.JVM_11)
}
}
}
}
Mit dieser Konfiguration wird sichergestellt, dass alle Kompilierungen innerhalb des Android-Ziels JVM 11 verwenden, wodurch eine detaillierte Steuerung möglich ist.
Legacy-Plug-in
In einem KMP-Projekt, das das Standard-Android-Bibliotheks-Plug-in (com.android.library) verwendet, unterscheidet sich die Konfiguration leicht von der Konfiguration mit dem KMP-Android-Plug-in (ist aber konzeptionell ähnlich).
Kotlin-Toolchain verwenden
Die Methode kotlin.jvmToolchain() funktioniert identisch und legt sourceCompatibility und targetCompatibility für Java sowie jvmTarget für Kotlin fest. Wir empfehlen diesen Ansatz.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
compileOptions und kotlinOptions
Wenn Sie keine Kotlin-Toolchain verwenden, müssen Sie die JVM-Ziele mit separaten Blöcken für Java und Kotlin konfigurieren.
// build.gradle.kts
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
10. Consumer-Keep-Regeln veröffentlichen
Wenn Ihre KMP-Bibliothek Consumer-Keep-Regeln (z. B. ProGuard-Regeln für R8) für ihre Nutzer bereitstellen muss, müssen Sie die Veröffentlichung im neuen Plug-in explizit aktivieren. Bisher wurden Consumer-Keep-Regeln standardmäßig veröffentlicht, wenn sie angegeben wurden.
Android-KMP
Mit dem neuen Plug-in müssen Sie
optimization.consumerKeepRules.publish = true festlegen und Regeldateien
im consumerKeepRules Block angeben, um Consumer-Keep-Regeln zu veröffentlichen.
// build.gradle.kts
kotlin {
android {
optimization {
consumerKeepRules.apply {
publish = true
file("consumer-proguard-rules.pro")
}
}
}
}
Legacy-Plug-in
Mit com.android.library werden alle Regeldateien, die mit consumerProguardFiles in android.defaultConfig angegeben wurden, standardmäßig in den Artefakten der Bibliothek veröffentlicht.
// build.gradle.kts
android {
defaultConfig {
consumerProguardFiles("consumer-proguard-rules.pro")
}
}
11. Bibliothek in Maven veröffentlichen
Wenn Sie Ihre KMP-Bibliothek in Maven veröffentlichen möchten, damit sie von anderen Projekten verwendet werden kann, unterscheidet sich der Prozess je nachdem, ob Sie das neue Android-KMP-Plug-in oder das Legacy-Plug-in verwenden.
Android-KMP
Das Plug-in com.android.kotlin.multiplatform.library ist in die Standardmechanismen für die Veröffentlichung von Kotlin Multiplatform eingebunden. Über den Standardprozess für die Veröffentlichung von KMP-Bibliotheken hinaus sind keine Android-spezifischen Schritte erforderlich.
Folgen Sie der offiziellen Dokumentation von JetBrains, um Ihre Bibliothek zu veröffentlichen: Set up publishing for a multiplatform library.
Legacy-Plug-in
Wenn Sie com.android.library für das Android-Ziel in einem KMP-Projekt verwenden, müssen Sie der Standardanleitung für die Veröffentlichung von Android-Bibliotheken folgen, um das Android-spezifische Artefakt (.aar) vorzubereiten und zu veröffentlichen.
Eine ausführliche Anleitung finden Sie unter Bibliothek für die Veröffentlichung vorbereiten.
Plug-in-API-Referenz
Das neue Plug-in hat eine andere API-Oberfläche als com.android.library. Ausführliche Informationen zur neuen DSL und zu den neuen Schnittstellen finden Sie in den API-Referenzen:
KotlinMultiplatformAndroidLibraryExtensionKotlinMultiplatformAndroidLibraryTargetKotlinMultiplatformAndroidDeviceTestKotlinMultiplatformAndroidHostTestKotlinMultiplatformAndroidVariant
Bekannte Probleme im Android-KMP-Bibliotheks-Plug-in
Die folgenden bekannten Probleme können auftreten, wenn Sie das neue Plug-in com.android.kotlin.multiplatform.library anwenden:
Compose-Vorschau schlägt bei Verwendung des neuen Android-KMP-Plug-ins fehl
- Behoben in
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3undAndroid Gradle Plugin 9.0.0-alpha13
- Behoben in
-
- Behoben in
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3undAndroid Gradle Plugin 9.0.0-alpha13
- Behoben in
-
- Behoben in
Kotlin Gradle Plugin 2.3.0-Beta2
- Behoben in
Instrumentiertes sourceSetTree für das androidLibrary-Ziel unterstützen
- Behoben in
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3undAndroid Gradle Plugin 9.0.0-alpha13
- Behoben in
Empfehlungen für Sie
- Hinweis: Linktext wird angezeigt, wenn JavaScript deaktiviert ist
- Umgebung einrichten
- KMP-Modul zu einem Projekt hinzufügen