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 atlanır. 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ç testleri) 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ı, 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 ve 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 başlıca iki 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 Android Studio kullanıcı arayüzünden doğrudan yeni modülü 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ğunda eklentileri tanımlama. Sürüm kataloğu TOML dosyasını (genellikle
gradle/libs.versions.toml
) açın ve eklenti tanımlarını[plugins]
bölümüne 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.
Kök derleme dosyasında eklenti beyanları uygulayın. Projenizin kök dizininde bulunan
build.gradle.kts
(Kotlin) veyabuild.gradle
(Groovy) dosyasını açın.apply false
kullanarakplugins
bloğuna eklenti takma adlarını ekleyin. Bu sayede, eklenti mantığı kök projeye uygulanmadan eklenti takma adları tüm alt projelerde kullanılabilir.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 }
KMP kitaplık modülü derleme dosyasına eklenti uygulama. KMP kitaplık modülünüzde
build.gradle.kts
(Kotlin) veyabuild.gradle
(Groovy) dosyasını açın. Eklentiyi dosyanızın üst kısmındakiplugins
bloğuna uygulayın:Kotlin
plugins { alias(libs.plugins.kotlin.multiplatform) // Add the following alias(libs.plugins.android.kotlin.multiplatform.library) }
Groovy
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 Ç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.) ... }
Değişiklikleri uygulayın. 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.