Daha önce Android'i KMP projesine entegre etmenin tek yolu, normal Android kitaplığı Gradle eklentisini kullanmaktı: com.android.library
. Ancak bu yaklaşım artık kullanımdan kaldırıldı ve Android-KMP eklentisi olarak da bilinen özel com.android.kotlin.multiplatform.library
eklentisi tercih ediliyor. Bu kılavuzda, yeni eklentiye nasıl geçiş yapacağınız açıklanmaktadır.
Temel özellikler ve farklar
Android-KMP eklentisi (com.android.kotlin.multiplatform.library
), özel olarak KMP projeleri için tasarlanmıştır ve geleneksel com.android.library
eklentisinden birkaç önemli açıdan farklıdır:
- Tek varyantlı mimari: Bu eklenti tek bir varyantla çalışır ve standart Android kitaplık projelerinde yaygın olarak bulunan ürün aromaları ve derleme türleri için desteği kaldırarak derleme sürecini kolaylaştırır. Bu, yapılandırmayı basitleştirir ve KMP Android kitaplıklarının derleme performansını artırır.
- KMP için optimize edilmiştir: Bu eklenti, paylaşılan Kotlin koduna ve birlikte çalışabilirliğe odaklanarak özel olarak Kotlin Çok Platformlu Kitaplıklar için tasarlanmıştır. Sonuç olarak, Android'e özgü yerel derlemeler, AIDL (Android Arayüz Tanımlama Dili) ve RenderScript için destek sağlanmaz. Bunlar genellikle KMP paylaşılan kod bağlamında alakalı değildir.
- Testler varsayılan olarak devre dışıdır: Çok platformlu bir ortamda derleme hızını daha da artırmak için testler varsayılan olarak devre dışıdır. Projeniz için gerekiyorsa testleri açıkça etkinleştirebilirsiniz. Bu durum hem ana makinedeki testler (birim testleri) hem de cihazdaki testler (araçla testler) için geçerlidir.
- Üst düzey Android uzantısı yok: Eklenti, Gradle derleme dosyalarınızda üst düzey bir
android
uzantısı oluşturmaz. Yapılandırma, tutarlı bir KMP proje yapısı sürdürmek için Kotlin çok platformlu DSL'sinde birandroidLibrary
bloğuyla yönetilir. - Java derlemeyi etkinleştirme: Java derlemesi varsayılan olarak etkin değildir. KMP kitaplığınızın Java tabanlı kod derlemesi gerekiyorsa
kotlin
bloğunuzdakiandroidLibrary
yapılandırma bloğundawithJava()
API'yi kullanarak bu özelliği açıkça etkinleştirmeniz gerekir. Bu, derleme süreci üzerinde daha ayrıntılı kontrol sağlar ve Java tabanlı kodun derlenmesi gerekmediğinde derleme sürelerini iyileştirebilir.
Taşımanın avantajları
Android-KMP eklentisi, KMP projeleri için aşağıdaki avantajları sağlar:
- Daha iyi derleme performansı ve kararlılık: Android-KMP eklentisi, KMP projelerinde optimize edilmiş derleme hızları ve gelişmiş kararlılık için tasarlanmıştır. Basitleştirilmiş mimarisi ve KMP iş akışlarına odaklanmasıyla daha verimli ve güvenilir bir derleme sürecine katkıda bulunur.
- Gelişmiş IDE entegrasyonu: Eklenti, Android Studio ve diğer Kotlin IDE'leriyle üstün entegrasyon sağlar. Bu sayede, KMP Android kitaplıklarıyla çalışırken daha iyi kod tamamlama, gezinme, hata ayıklama ve genel geliştirici deneyimi elde edebilirsiniz.
- Basitleştirilmiş proje yapılandırması: Android-KMP eklentisi, varyantlar gibi Android'e özgü karmaşıklıkları ortadan kaldırarak KMP projeleri için yapılandırmayı basitleştirir. Bu sayede daha temiz ve daha kolay yönetilebilir derleme dosyaları elde edilir. Ayrıca, KMP Android geliştirmeye yeni başlayan geliştiriciler için öğrenme eğrisi kısaltılır.
Daha önce, Android Gradle eklentisi ile Kotlin Gradle eklentisinin çok platformlu yapıdaki etkileşimi, Android'in
com.android.library
eklentisi kullanılarak bir KMP projesine entegre edilmesi sırasında bazen yanıltıcı kaynak kümesi adlarına neden oluyordu. Örneğin, Android enstrümante testlerini yapılandırmaya özel kaynak grubuandroidAndroidTest
olarak adlandırıldı. Bu adlandırma kuralı, standart KMP proje yapılarına aşina geliştiriciler için daha az sezgisel bir yaklaşımdı. - Resmi ve önerilen çözüm:
com.android.kotlin.multiplatform.library
eklentisi,com.android.library
eklentisi kullanılarak KMP kitaplıklarına Android hedefleri eklemeyle ilgili önceki yöntemin resmi yerine geçer. KMP içincom.android.library
eklentisini kullanmaya devam etmek artık JetBrains tarafından desteklenmeyecek ve gelecekteki güncellemelerden ve iyileştirmelerden yararlanamayacaktır.
Android-KMP eklentisini bir projeye uygulama
Android-KMP eklentisini projenize uygulamanın iki temel yolu vardır: * Mevcut KMP kitaplık modülleri için Gradle dosyalarınızı manuel olarak düzenleyin. * Yeni KMP kitaplık modülleri için yeni modülü doğrudan Android Studio kullanıcı arayüzünden oluşturun.
Eklentiyi 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ğu TOML dosyanızı açın ve
plugins
bölümüne aşağıdakileri ekleyin:[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" }
KOTLIN_PLUGIN_VERSION ve ANDROID_KMP_PLUGIN_VERSION değerlerini kullandığınız gerçek sürümlerle değiştirin.
KMP kitaplık modülünüzün kökündeki
build.gradle.kts
(Kotlin) veyabuild.gradle
(Groovy) dosyanızı açın.Eklentiyi, dosyanızın üst kısmındaki
plugins
bloğuna uygulayın: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 }
Android hedefini tanımlamak için Kotlin Çok Platformlu bloğu (
kotlin
) yapılandırın.kotlin
bloğunda,androidLibrary
kullanarak Android hedefini belirtin: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.) ... }
Eklentiyi uyguladıktan ve
kotlin
bloğunu yapılandırdıktan sonra, değişiklikleri uygulamak için Gradle projenizi senkronize edin.
Eklenti ile yeni bir modül oluşturma
Doğrudan Android Studio'da yeni bir Kotlin Çok Platformlu kitaplık modülü de oluşturabilirsiniz. Bu işlem, Android-KMP eklentisi dahil olmak üzere gerekli eklentileri otomatik olarak uygular. Android Studio ile yeni bir KMP kitaplık modülü oluşturma hakkında daha fazla bilgi için Mevcut bir projeye Kotlin Multiplatform ekleme başlıklı makaleyi inceleyin.
Çok platformlu ekosistemin tamamı ve daha gelişmiş yapılandırmalar hakkında daha fazla bilgi için resmi Kotlin Çok Platformlu belgelerine bakın.