Android-KMP kitaplığı eklentisine geçiş yapma

Kotlin Multiplatform'da kitaplık modülünü yapılandırmak için bir Gradle eklentisi bulunur.

com.android.kotlin.multiplatform.library eklentisi, normal Android kitaplığı Gradle eklentisi (com.android.library) kullanılarak KMP kitaplıklarına Android hedefleri ekleme yönteminin resmi olarak yerini almıştır.

Önceki yaklaşım, Android-KMP eklentisi olarak da bilinen eklenti lehine artık kullanımdan kaldırılmıştır. KMP için com.android.library eklentinin kullanımı artık JetBrains tarafından desteklenmeyecek ve gelecekteki güncellemelerden ve iyileştirmelerden yararlanmayacak.

Bu eklentiye geçmek için Android-KMP eklentisini uygulama bölümüne bakın.

Temel özellikler ve farklar

Android-KMP eklentisi, özellikle KMP projeleri için 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. Bu sayede, ürün çeşitleri ve derleme türleri için destek kaldırılır. Böylece yapılandırma basitleştirilir ve derleme performansı artırılır.

  • KMP için optimize edildi: Eklenti, KMP kitaplıkları için tasarlanmıştır. Paylaşılan Kotlin kodu ve birlikte çalışabilirliğe odaklanır. Android'e özgü yerel derlemeler, AIDL ve RenderScript desteği yoktur.

  • Varsayılan olarak devre dışı bırakılan testler: Derleme hızını artırmak 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 androidLibrary bloğuyla işlenir ve tutarlı bir KMP proje yapısı korunur. Üst düzey android uzantı engellemesi yok.

  • Java derlemesini etkinleştirme: Java derlemesi varsayılan olarak devre dışıdır. Etkinleştirmek için androidLibrary bloğunda withJava() simgesini kullanın. Bu, Java derlemesi gerekmediğinde derleme sürelerini kısaltır.

Android-KMP kitaplığı eklentisinin avantajları

Android-KMP eklentisi, KMP projeleri için aşağıdaki avantajları sunar:

  • Daha iyi derleme performansı ve kararlılık: Optimize edilmiş derleme hızları ve KMP projelerinde daha iyi kararlılık için tasarlanmıştır. KMP iş akışlarına odaklanması, daha verimli ve güvenilir bir derleme sürecine katkıda bulunur.

  • Gelişmiş IDE entegrasyonu: KMP Android kitaplıklarıyla çalışırken daha iyi kod tamamlama, gezinme, hata ayıklama ve genel geliştirici deneyimi sağlar.

  • Basitleştirilmiş proje yapılandırması: Eklenti, derleme varyantları gibi Android'e özgü karmaşıklıkları 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.library eklentisinin kullanılması, androidAndroidTest gibi kafa karıştırıcı kaynak grubu adlarının oluşturulmasına neden olabiliyordu. Bu adlandırma kuralı, standart KMP proje yapılarına aşina olan geliştiriciler için daha az sezgiseldi.

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:

  1. 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 = "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. Eklenti bildirimini kök derleme dosyasına uygulayın. Projenizin kök dizininde bulunan build.gradle.kts dosyasını açın. plugins kullanarak eklenti takma adlarını apply false bloğuna ekleyin. Bu sayede, eklenti mantığı kök projeye 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
    }

    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. Eklentiyi bir KMP kitaplık modülü derleme dosyasında uygulayın. KMP kitaplık modülünüzdeki build.gradle.kts dosyasını açın ve eklentiyi plugins bloğundaki dosyanızın en üstüne 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)
    }

    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 hedefini yapılandırın. Android hedefini tanımlamak için Kotlin Multiplatform bloğunu (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.) ...
    }
  5. Değişiklikleri uygulayın. Eklentiyi uygulayıp kotlin bloğunu yapılandırdıktan sonra değişiklikleri uygulamak için Gradle projenizi senkronize edin.