com.android.kotlin.multiplatform.library Gradle eklentisi, Kotlin Çoklu Platform (KMP) kitaplık modülüne Android hedefi eklemek için resmi olarak desteklenen araçtır. Proje yapılandırmasını basitleştirir, derleme performansını artırır ve Android Studio ile daha iyi entegrasyon sağlar.
KMP geliştirme için com.android.library eklentisinin kullanımı, desteği sonlandırılan ve Android Gradle eklentisi 9.0 ve sonraki sürümlerde (2025'in 4. çeyreği) etkinleştirilmesi gereken Android Gradle eklentisi API'lerine bağlıdır. Bu API'lerin Android Gradle eklentisi 10.0'da (2026'nın ikinci yarısı) kaldırılması bekleniyor.
Bu eklentiyi uygulamak için Android-KMP eklentisini uygulama bölümüne bakın. Eski API'lerden geçiş yapmanız gerekiyorsa Geçiş Rehberi'ni inceleyin.
AGP 9.0 ve sonraki sürümlere geçiş konusunda yardım almak için JetBrains tarafından KMP uygulamaları için oluşturulan temsilci becerisini kullanabilirsiniz. Android Studio'da becerileri kullanma hakkında daha fazla bilgi için Temsilci Modu'nu becerilerle genişletme başlıklı makaleyi inceleyin. Yapay zeka sonuçlarının tamamen öngörülebilir olmadığını unutmayın.
Temel özellikler ve farklılıklar
Android-KMP eklentisi, KMP projeleri için özel olarak tasarlanmıştır ve standart com.android.library eklentisinden birkaç önemli açıdan farklıdır:
Tek varyantlı mimari: Eklenti tek bir varyant kullanır. Ürün varyantları ve derleme türleri için desteği kaldırarak yapılandırmayı basitleştirir ve derleme performansını artırır.
KMP için optimize edilmiştir: Eklenti, KMP kitaplıkları için tasarlanmıştır. Paylaşılan Kotlin koduna ve birlikte çalışabilirliğe odaklanır. Android'e özgü yerel derlemeler, AIDL ve RenderScript desteği sunmaz.
Varsayılan olarak devre dışı bırakılan testler: Derleme hızını iyileştirmek için hem birim hem de cihaz (enstrümantasyon) testleri varsayılan olarak devre dışı bırakılır. Gerekirse bunları etkinleştirebilirsiniz.
Üst düzey Android uzantısı yok: Yapılandırma, Gradle KMP DSL'deki bir
androidbloğu ile gerçekleştirilir ve tutarlı bir KMP proje yapısı korunur. Üst düzeyandroiduzantı engellemesi yok.Java derlemesini etkinleştirme: Java derlemesi varsayılan olarak devre dışıdır. Etkinleştirmek için
androidbloğundawithJava()kullanın. Bu sayede, Java derlemesi gerekmediğinde derleme süreleri kısalır.
Android-KMP kitaplık eklentisinin avantajları
Android-KMP eklentisi, KMP projeleri için aşağıdaki avantajları sağlar:
Daha iyi derleme performansı ve kararlılık: KMP projelerinde optimize edilmiş derleme hızları ve daha fazla kararlılık için tasarlanmıştır. KMP iş akışlarına odaklanması, daha verimli ve güvenilir bir derleme süreci sağlar.
Gelişmiş IDE entegrasyonu: KMP Android kitaplıklarıyla çalışırken daha iyi kod tamamlama, gezinme, hata ayıklama ve genel geliştirici deneyimi sunar.
Basitleştirilmiş proje yapılandırması: Eklenti, derleme varyantları gibi Android'e özgü karmaşıklıkları ortadan kaldırarak KMP projelerinin yapılandırmasını basitleştirir. Bu sayede daha temiz ve bakımı daha kolay derleme dosyaları elde edilir. Daha önce, KMP projesinde
com.android.libraryeklentisini kullanmakandroidAndroidTestgibi kafa karıştırıcı kaynak grubu adları oluşturabiliyordu. Bu adlandırma kuralı, standart KMP proje yapılarına aşina olan geliştiriciler için daha az sezgiseldi.
Desteklenmeyen özellikler için geçici çözümler
com.android.library eklentisiyle KMP entegrasyonu ile karşılaştırıldığında com.android.kotlin.multiplatform.library eklentisinde bazı özellikler eksiktir. Desteklenmeyen özellikler için
geçici çözümler şunlardır:
Derleme değişkenleri
Derleme türleri ve ürün türleri desteklenmez. Bunun nedeni, yeni eklentinin tek bir varyant mimarisi kullanmasıdır. Bu mimari, yapılandırmayı basitleştirir ve derleme performansını artırır.
Derleme değişkenlerine ihtiyacınız varsa
com.android.libraryeklentisini kullanarak ayrı bir bağımsız Android kitaplık modülü oluşturmanızı, bu modülde derleme türlerini ve ürün türlerini yapılandırmanızı ve ardından Kotlin Çok Platformlu kitaplığınızınandroidMainkaynak grubundan standart bir proje bağımlılığı olarak kullanmanızı öneririz. Daha fazla bilgi için Android kitaplığı oluşturma ve Derleme değişkenlerini yapılandırma başlıklı makaleleri inceleyin.Veri bağlama ve görünüm bağlama
Bunlar, Android görünüm sistemi ve XML düzenleriyle sıkı bir şekilde bağlantılı olan Android'e özgü kullanıcı arayüzü çerçevesi özellikleridir. Yeni Android-KMP kitaplığı eklentisiyle, kullanıcı arayüzünü Compose Multiplatform gibi çoklu platform çerçevesi kullanarak yönetmenizi öneririz. Veri bağlama ve görünüm bağlama, paylaşılabilir bir kitaplığın değil, nihai bir Android uygulamasının uygulama ayrıntıları olarak kabul edilir.
Yerel derleme desteği
Yeni eklenti, Android hedefi için standart bir AAR oluşturmaya odaklanır. Kotlin Multiplatform'da yerel kod entegrasyonu, doğrudan KMP'nin kendi yerel hedefleri (ör.
androidNativeArm64veandroidNativeX86) ve C-interop özellikleri tarafından gerçekleştirilir. Yerel C/C++ kodu eklemeniz gerekiyorsa bunu ortak veya yerel bir kaynak grubunun parçası olarak tanımlamanız ve Android'e özgüexternalNativeBuildmekanizmasını kullanmak yerinekotlinbloğunda C-interop'u yapılandırmanız gerekir.Alternatif olarak,
externalNativeBuildaracılığıyla yerel derleme desteğine ihtiyacınız varsa yerel kodu entegre edebileceğiniz ayrı bir bağımsızcom.android.librarymodülü oluşturmanızı ve bu bağımsız kitaplığı Kotlin Multiplatform kitaplık projenizinandroidMainkaynak grubundan kullanmanızı öneririz. Daha fazla bilgi için Android kitaplığı oluşturma ve Projenize C ve C++ kodu ekleme başlıklı makaleleri inceleyin.BuildConfigsınıfBuildConfigözelliği, en çok birden fazla varyantın bulunduğu ortamlarda faydalıdır. Yeni Kotlin Çoklu Platform kitaplık eklentisi varyanttan bağımsız olduğundan ve derleme türleri ile ürün türlerini desteklemediğinden bu özellik uygulanmaz. Alternatif olarak, tüm hedefler için meta veri oluşturmak üzereBuildKonfigeklentisini veya benzer topluluk çözümlerini kullanmanızı öneririz.
Ön koşullar
com.android.kotlin.multiplatform.library eklentisini kullanmak için projenizin aşağıdaki minimum sürümlerle veya daha yeni sürümlerle yapılandırılması gerekir:
- Android Gradle Eklentisi (AGP): 8.10.0
- Kotlin Gradle Eklentisi (KGP): 2.0.0
Android-KMP eklentisini mevcut bir modüle uygulama
Android-KMP eklentisini mevcut bir KMP kitaplık modülüne uygulamak için aşağıdaki adımları uygulayın:
Sürüm kataloğunda eklentileri bildirin. Sürüm kataloğu TOML dosyasını (genellikle
gradle/libs.versions.toml) açın ve eklenti tanımları bölümünü ekleyin:# To check the version number of the latest Kotlin release, go to # https://kotlinlang.org/docs/releases.html [versions] androidGradlePlugin = "9.4.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" }Eklenti beyanını kök derleme dosyasına uygulayın. Projenizin kök dizininde bulunan
build.gradle.ktsdosyasını açın.apply falsekullanarak eklenti takma adlarınıpluginsbloğuna ekleyin. Bu sayede, eklenti mantığı kök projenin kendisine uygulanmadan eklenti takma adları tüm alt projelerde kullanılabilir.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 }
Modern
// Root build.gradle file plugins { alias(libs.plugins.kotlin.multiplatform) apply false // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) apply false }
Eklentiyi bir KMP kitaplığı modülü derleme dosyasına uygulayın. KMP kitaplık modülünüzde
build.gradle.ktsdosyasını açın ve eklentiyi dosyanızın üst kısmındakipluginsbloğuna uygulayın:Kotlin
// Module-specific build.gradle.kts file plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Modern
// Module-specific build.gradle file plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Android KMP hedefini yapılandırın. Android hedefini tanımlamak için Kotlin Multiplatform bloğunu (
kotlin) yapılandırın.kotlinbloğunda,androidkullanarak Android hedefini belirtin: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.) ... }
Modern
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.) ... }
Değişiklikleri uygulayın. Eklentiyi uyguladıktan ve
kotlinbloğunu yapılandırdıktan sonra değişiklikleri uygulamak için Gradle projenizi senkronize edin.
Eski eklentiden taşıma
Bu kılavuz, eski com.android.library eklentisinden com.android.kotlin.multiplatform.library eklentisine geçiş yapmanıza yardımcı olur.
1. Kaynakları taşıma
Eski eklenti, src/androidMain, src/androidHostTest ve src/androidDeviceTest kaynak kümelerine ek olarak src/main, src/test ve src/androidTest kaynak kümelerini kullanmanıza olanak tanıyordu. Yeni eklenti yalnızca ikinci kaynak dizinlerini kullandığından kaynakları src/main dizininden src/androidMain dizinine, src/test dizininden src/androidHostTest dizinine ve src/androidTest dizininden src/androidDeviceTest dizinine taşımanız gerekir.
2. Özel kaynak ve kaynak dizinlerini yapılandırma
Standart olmayan dizinlerde kaynaklarınız varsa bunları daha önce sourceSets bloğunu kullanarak yapılandırmışsınızdır. Yeni eklentiyle, değişkene statik kaynak dizinleri eklemek için androidComponents uzantısını kullanın.
Yeni eklentiyle birlikte addStaticSourceDirectory yönteminin, dizini mevcut kaynak dizinleri listesine eklediğini unutmayın. Eski eklentide setSrcDirs yöntemi listeyi değiştirirken srcDir yöntemi listeye ekleme yapar.
Android-KMP
Yeni eklentiyle, varyantın kaynaklarıyla etkileşim kurmak için onVariants bloğunu kullanın.
// build.gradle.kts
androidComponents {
onVariants { variant ->
// Add a directory for Kotlin sources
variant.sources.kotlin?.addStaticSourceDirectory("other/kotlin")
// Add a directory for Android assets
variant.sources.assets?.addStaticSourceDirectory("other/assets")
}
}
Eski Eklenti
com.android.library eklentisiyle, kaynak dizinleri ayarlamak veya eklemek için sourceSets bloğu kullanılıyordu.
// build.gradle.kts
android {
sourceSets {
getByName("main") {
// Replaces the directory for Kotlin sources.
kotlin.setSrcDirs(listOf("other/kotlin"))
// Appends a directory for assets.
assets.srcDir("other/assets")
}
}
}
3. Bağımlılıkları bildirme
Android'e özgü kaynak grupları için bağımlılıkları bildirmek yaygın bir görevdir. Yeni eklenti, daha önce kullanılan genel dependencies bloğunun aksine, bunların sourceSets bloğuna açıkça yerleştirilmesini gerektirir.
Android-KMP
Yeni eklenti, Android bağımlılıklarını androidMain kaynak grubunda gruplandırarak daha temiz bir yapı sağlar. Ana kaynak grubuna ek olarak, isteğe bağlı olarak oluşturulan iki test kaynak grubu vardır: androidDeviceTest ve androidHostTest (Daha fazla bilgi için ana makine ve cihaz testlerini yapılandırma bölümüne bakın).
// 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")
}
}
}
Kaynak gruplarında main, deviceTest ve hostTest adlı karşılık gelen Kotlin derlemeleri bulunur. Kaynak grupları ve derlemeler, derleme komut dosyasında şu şekilde yapılandırılabilir:
// build.gradle.kts
kotlin {
android {
compilations.getByName("deviceTest") {
kotlinOptions.languageVersion = "2.0"
}
}
}
Eski Eklenti
Eski eklentiyle, üst düzey bağımlılıklar bloğunda Android'e özgü bağımlılıkları bildirebiliyordunuz. Bu durum, çoklu platform modülünde bazen kafa karıştırıcı olabiliyordu.
// 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")
}
4. Android kaynaklarını etkinleştirme
Android kaynakları (res klasörleri) için destek, derleme performansını optimize etmek amacıyla yeni eklentiyle varsayılan olarak etkinleştirilmez. Bu özellikleri kullanabilmek için etkinleştirmeniz gerekir. Bu değişiklik, Android'e özgü kaynaklar gerektirmeyen projelerin, ilgili derleme ek yükünden etkilenmemesini sağlar.
Android-KMP
Android kaynak işlemeyi açıkça etkinleştirmeniz gerekir. Kaynaklar src/androidMain/res içine yerleştirilmelidir.
// build.gradle.kts
kotlin {
android {
// ...
// Enable Android resource processing
androidResources {
enable = true
}
}
}
// Project Structure
// └── src
// └── androidMain
// └── res
// ├── values
// │ └── strings.xml
// └── drawable
// └── icon.xml
Eski Eklenti
Kaynak işleme varsayılan olarak etkinleştirildi. src/main içinde hemen bir res dizini ekleyebilir ve XML çizilebilir öğeleri, değerleri vb. eklemeye başlayabilirsiniz.
// 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
5. Ana makine ve cihaz testlerini yapılandırma
Yeni eklenti, varsayılan olarak Android ana makine tarafındaki (birim) ve cihaz tarafındaki (enstrümantasyon) testleri devre dışı bırakır. Test kaynak gruplarını ve yapılandırmalarını oluşturmak için açıkça etkinleştirmeniz gerekir. Eski eklenti ise bunları otomatik olarak oluşturuyordu.
Bu etkinleştirme modeli, projenizin yalın kalmasını ve yalnızca etkin olarak kullandığınız derleme mantığını ve kaynak gruplarını içermesini sağlar.
Android-KMP
Yeni eklentiyle, testleri kotlin.android bloğunda etkinleştirip yapılandırabilirsiniz. Bu sayede kurulum daha net hale gelir ve kullanılmayan test bileşenleri oluşturulmaz. androidUnitTest kaynak grubu androidHostTest olur (test dizini src/androidUnitTest yerine src/androidHostTest olur) ve androidInstrumentedTest, androidDeviceTest olur (test dizini src/androidInstrumentedTest yerine src/androidDeviceTest olur).
// 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
Eski Eklenti
com.android.library eklentisiyle androidUnitTest ve androidInstrumentedTest kaynak grupları varsayılan olarak oluşturulur. Davranışlarını android bloğunda, genellikle testOptions DSL'yi kullanarak yapılandırırsınız.
// 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
6. Java kaynak derlemesini etkinleştirme
KMP kitaplığınızın Android hedefi için Java kaynaklarını derlemesi gerekiyorsa bu işlevi yeni eklentiyle açıkça etkinleştirmeniz gerekir. Bu seçeneğin, bağımlılıklar için değil, doğrudan projenizde bulunan Java dosyaları için derlemeyi etkinleştirdiğini unutmayın. Java ve Kotlin derleyicisinin JVM hedef sürümünü ayarlama yöntemi de değişir.
Android-KMP
withJava() yöntemini çağırarak Java derlemesini etkinleştirmeniz gerekir. JVM hedefi artık daha birleşik bir kurulum için doğrudan kotlin { android {} } bloğunun içinde yapılandırılıyor. Burada jvmTarget ayarını yapmak, Android hedefi için hem Kotlin hem de Java derlemesi için geçerlidir.
// 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
Eski Eklenti
Java derlemesi varsayılan olarak etkinleştirildi. Hem Java hem de Kotlin kaynakları için JVM hedefi, compileOptions kullanılarak android bloğunda ayarlandı.
// build.gradle.kts
android {
// ...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
kotlin {
androidTarget {
compilations.all {
kotlinOptions.jvmTarget = "1.8"
}
}
}
7. androidComponents kullanarak derleme değişkenleriyle etkileşim kurma
androidComponents uzantısı, derleme yapılarıyla programatik olarak etkileşim kurmak için kullanılmaya devam edebilir. Variant API'sinin büyük bir kısmı aynı kalsa da yeni AndroidKotlinMultiplatformVariant arayüzü, eklenti yalnızca tek bir varyant ürettiği için daha sınırlıdır.
Bu nedenle, derleme türleri ve ürün türleriyle ilgili özellikler artık varyant nesnesinde kullanılamaz.
Android-KMP
onVariants bloğu artık tek bir varyant üzerinde iterasyon yapar. name ve artifacts gibi ortak özelliklere erişmeye devam edebilirsiniz ancak derleme türüne özgü özelliklere erişemezsiniz.
// build.gradle.kts
androidComponents {
onVariants { variant ->
val artifacts = variant.artifacts
}
}
Eski Eklenti
Birden fazla varyantla, görevleri yapılandırmak için derleme türüne özgü özelliklere erişebilirsiniz.
// build.gradle.kts
androidComponents {
onVariants(selector().withBuildType("release")) { variant ->
// ...
}
}
8. Android kitaplığı bağımlılıklarının varyantlarını seçme
KMP kitaplığınız Android için tek bir varyant üretir. Ancak birden fazla varyantı (ör. free/paid ürün türü) olan standart bir Android kitaplığına (com.android.library) bağlı olabilirsiniz. Projenizin bu bağımlılıktan bir varyantı nasıl seçeceğini kontrol etmek yaygın bir gereksinimdir.
Android-KMP
Yeni eklenti, bu mantığı kotlin.android.localDependencySelection bloğunda merkezileştirir ve netleştirir. Bu sayede, tek varyantlı KMP kitaplığınız için harici bağımlılıkların hangi varyantlarının seçileceği çok daha net bir şekilde anlaşılır.
// 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"))
}
}
}
}
Eski Eklenti
Bağımlılık seçimi stratejilerini buildTypes and
productFlavors blokları içinde yapılandırdınız. Bu işlem genellikle kitaplığınızda bulunmayan bir boyut için varsayılan bir varyant sağlamak üzere missingDimensionStrategy kullanmayı veya arama sırasını tanımlamak için belirli bir varyantta matchingFallbacks kullanmayı içerir.
API kullanımı hakkında daha ayrıntılı bilgi için Eşleşme Hatalarını Çözme bölümüne bakın.
9. Compose önizleme bağımlılıklarını ekleme
Dahili araçların yayınlanan nihai yapıya sızmasını önlemek için genellikle yerel geliştirme ortamımızın kapsamına giren belirli kitaplıklar kullanmak isteriz. Yeni KMP Android eklentisi, geliştirme bağımlılıklarını yayın kodundan ayırmak için kullanılan derleme türü mimarisini kaldırdığından bu durum bir sorun haline gelir.
Android-KMP
Yalnızca yerel geliştirme ve test için bağımlılık eklemek istiyorsanız bağımlılığı doğrudan ana Android derlemesinin çalışma zamanı sınıf yolu yapılandırmasına (üst düzey dependencies bloğunda) ekleyin. Bu sayede bağımlılık, çalışma zamanında kullanılabilir (ör. Compose Preview gibi araçlar için) ancak derleme sınıf yolunun veya kitaplığınızın yayınlanan API'sinin bir parçası olmaz.
// build.gradle.kts
dependencies {
"androidRuntimeClasspath"(libs.androidx.compose.ui.tooling)
}
Eski Eklenti
Android hedefi için com.android.library eklentisini kullanan Kotlin Çoklu Platform projeleri, debugImplementation yapılandırmasını kullanmalıdır. Bu yapılandırma, bağımlılığı hata ayıklama derlemesi türüyle sınırlandırır ve tüketiciler tarafından kullanılan kitaplığın sürüm varyantına dahil edilmesini engeller.
// build.gradle.kts
dependencies {
debugImplementation(libs.androidx.compose.ui.tooling)
}
10. KMP Android hedefi için JVM hedefini yapılandırma
KMP Android eklentisi, JVM hedefini hem Java hem de Kotlin için geçerli olan android.compilerOptions.jvmTarget kullanarak ayarlar. Bu sayede, saf Android projelerindeki ayrı compileOptions ve kotlinOptions bloklarına kıyasla yapılandırma basitleştirilir.
Android-KMP
Android hedefi içeren bir Kotlin Multiplatform (KMP) projesiyle çalışırken hem Kotlin hem de Java derleyicisi için JVM hedef sürümünü yapılandırmanın birkaç yolu vardır. Bu yapılandırmaların kapsamını ve hiyerarşisini anlamak, projenizin bayt kodu uyumluluğunu yönetmek açısından çok önemlidir.
JVM hedefini ayarlamanın üç temel yolu vardır. Bunlar en düşükten en yüksek önceliğe doğru sıralanmıştır. Daha yüksek önceliğe sahip JVM hedef değerleri, yapılandırılmış hedeflerinizin daha küçük bir alt kümesi için geçerlidir ve daha düşük önceliğe sahip değerleri geçersiz kılar. Bu sayede, projenizdeki farklı hedefler ve hedefler içindeki derlemeler için farklı JVM sürümleri ayarlayabilirsiniz.
Kotlin araç zincirini kullanma (en düşük öncelik)
JVM hedefini ayarlamanın en genel yolu, build.gradle.kts dosyanızın kotlin bloğunda araç zincirini belirtmektir. Bu yaklaşım, Android de dahil olmak üzere projenizdeki tüm JVM tabanlı hedeflerde hem Kotlin hem de Java derleme görevleri için hedefi belirler.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
Bu yapılandırma, hem kotlinc hem de javac'in JVM 21'i hedeflemesini sağlar. Bu, tüm projeniz için tutarlı bir temel oluşturmanın harika bir yoludur.
Android hedef düzeyinde derleyici seçeneklerini kullanma (orta öncelik)
android bloğunda Android KMP hedefi için JVM hedefini belirtebilirsiniz. Bu ayar, proje genelindeki jvmToolchain yapılandırmasını geçersiz kılar ve tüm Android derlemeleri için geçerlidir.
// build.gradle.kts
kotlin {
android {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
}
Bu durumda, jvmToolchain farklı bir sürüme ayarlanmış olsa bile Android hedefinin Kotlin ve Java kodu, JVM 11'i hedefleyecek şekilde derlenir.
Derleme düzeyinde derleyici seçeneklerini kullanma (en yüksek öncelik)
En ayrıntılı kontrol için derleyici seçeneklerini derleme bazında yapılandırabilirsiniz (örneğin, yalnızca androidMain veya androidHostTest için). Bu, belirli bir derlemenin farklı bir JVM sürümünü hedeflemesi gerektiğinde kullanışlıdır. Bu ayar, hem Kotlin araç zincirini hem de Android hedef düzeyi seçeneklerini geçersiz kılar.
// build.gradle.kts
kotlin {
android {
compilations.all {
compileTaskProvider.configure {
compilerOptions.jvmTarget.set(JvmTarget.JVM_11)
}
}
}
}
Bu yapılandırma, Android hedefindeki tüm derlemelerin JVM 11'i kullanmasını sağlayarak ayrıntılı kontrol sağlar.
Eski Eklenti
Standart Android kitaplığı eklentisini (com.android.library) kullanan bir KMP projesinde yapılandırma, KMP Android eklentisini kullandığınız duruma göre biraz farklıdır (ancak kavramsal olarak benzerdir).
Kotlin araç zincirini kullanma
kotlin.jvmToolchain() yöntemi de aynı şekilde çalışır. Java için sourceCompatibility ve targetCompatibility, Kotlin için ise jvmTarget değerini ayarlar. Bu yaklaşımı kullanmanızı öneririz.
// build.gradle.kts
kotlin {
jvmToolchain(21)
}
compileOptions ve kotlinOptions
Kotlin araç zincirini kullanmıyorsanız JVM hedeflerini Java ve Kotlin için ayrı bloklar kullanarak yapılandırmanız gerekir.
// build.gradle.kts
android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
}
11. Tüketici saklama kurallarını yayınlama
KMP kitaplığınızın, tüketicileri için tüketici saklama kuralları (ör. R8 için ProGuard kuralları) göndermesi gerekiyorsa yeni eklentiyle yayınlamayı açıkça etkinleştirmeniz gerekir. Önceden, tüketici saklama kuralları belirtilmişse varsayılan olarak yayınlanıyordu.
Android-KMP
Yeni eklentiyle, tüketici saklama kurallarını yayınlamak için consumerKeepRules bloğunda
optimization.consumerKeepRules.publish = true değerini ayarlamanız ve kural dosyalarını
belirtmeniz gerekir.
// build.gradle.kts
kotlin {
android {
optimization {
consumerKeepRules.apply {
publish = true
file("consumer-proguard-rules.pro")
}
}
}
}
Eski Eklenti
com.android.library ile, android.defaultConfig içinde consumerProguardFiles ile belirtilen tüm kural dosyaları varsayılan olarak kitaplığın yapılarına yayınlanır.
// build.gradle.kts
android {
defaultConfig {
consumerProguardFiles("consumer-proguard-rules.pro")
}
}
12. Kitaplığınızı Maven'da yayınlama
KMP kitaplığınızı diğer projeler tarafından kullanılmak üzere Maven'de yayınlamayı planlıyorsanız süreç, yeni Android-KMP eklentisini mi yoksa eski eklentiyi mi kullandığınıza bağlı olarak değişir.
Android-KMP
com.android.kotlin.multiplatform.library eklentisi, standart Kotlin Multiplatform yayınlama mekanizmalarıyla entegre olur. Standart KMP kitaplığı yayınlama sürecinin dışında Android'e özgü adımlar gerekmez.
Kitaplığınızı yayınlamak için JetBrains'in resmi dokümanlarındaki Çoklu platform kitaplığı için yayınlama ayarlarını yapma başlıklı makaleyi inceleyin.
Eski Eklenti
KMP projesinde Android hedefi için com.android.library kullanırken Android'e özel yapıyı (.aar) hazırlamak ve yayınlamak için standart Android kitaplığı yayınlama kılavuzunu uygulamanız gerekir.
Ayrıntılı talimatlar için Kitaplığınızı yayınlanmaya hazırlama başlıklı makaleyi inceleyin.
Eklenti API referansı
Yeni eklentinin API yüzeyi com.android.library eklentisinden farklıdır. Yeni DSL ve arayüzler hakkında ayrıntılı bilgi için API referanslarına bakın:
KotlinMultiplatformAndroidLibraryExtensionKotlinMultiplatformAndroidLibraryTargetKotlinMultiplatformAndroidDeviceTestKotlinMultiplatformAndroidHostTestKotlinMultiplatformAndroidVariant
Android-KMP kitaplık eklentisiyle ilgili bilinen sorunlar
Yeni com.android.kotlin.multiplatform.library eklentisini uyguladığınızda ortaya çıkabilecek bilinen sorunlar şunlardır:
Yeni android-KMP eklentisi kullanılırken Compose önizlemesi başarısız oluyor
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3veAndroid Gradle Plugin 9.0.0-alpha13içinde sabitlendi
-
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3veAndroid Gradle Plugin 9.0.0-alpha13içinde sabitlendi
-
Kotlin Gradle Plugin 2.3.0-Beta2içinde düzeltildi
androidLibrary hedefi için araçlı sourceSetTree desteği
Android Studio Otter 2 Feature Drop | 2025.2.2 Canary 3veAndroid Gradle Plugin 9.0.0-alpha13içinde sabitlendi
Sizin için önerilenler
- Not: JavaScript kapalıyken bağlantı metni gösterilir.
- Ortamınızı ayarlama
- Projeye KMP modülü ekleme