Przejście na wtyczkę Android-KMP

Wcześniej jedynym sposobem na zintegrowanie Androida z projektem KMP było użycie zwykłej wtyczki Gradle do biblioteki Androida: com.android.library. To podejście zostało jednak wycofane na rzecz dedykowanej wtyczki com.android.kotlin.multiplatform.library, zwanej też wtyczką KM Android. Z tego przewodnika dowiesz się, jak przejść na nowy wtyczek.

Najważniejsze funkcje i różnice

Wtyczka Android-KMP (com.android.kotlin.multiplatform.library) jest dostosowana specjalnie do projektów KMP i różni się od tradycyjnej wtyczki com.android.library w kilku kluczowych aspektach:

  • Architektura z jednym wariantem: wtyczka działa z jednym wariantem, co upraszcza proces kompilacji, ponieważ usuwa obsługę wersji produktu i typów kompilacji, które są powszechne w standardowych projektach bibliotek Androida. Upraszcza to konfigurację i polepsza wydajność kompilacji bibliotek KMP na Androida.
  • Zoptymalizowany pod kątem KMP: wtyczka jest przeznaczona do bibliotek Kotlin Multiplatform, a szczególnie do udostępnianego kodu Kotlin i współdziałania. W konsekwencji nie obsługuje kompilacji natywnych specyficznych dla Androida, AIDL (języka definiowania interfejsu na Androida) ani RenderScript, które nie są zwykle istotne w kontekście kodu udostępnionego KMP.
  • Testy wyłączone domyślnie: aby jeszcze bardziej zwiększyć szybkość kompilacji w środowisku wieloplatformowym, testy są domyślnie wyłączone. Jeśli testy są wymagane w przypadku Twojego projektu, możesz je włączyć. Dotyczy to zarówno testów na hoście (testów jednostkowych), jak i testów na urządzeniu (testów inkrementalnych).
  • Brak rozszerzenia Androida na najwyższym poziomie: wtyczka nie tworzy w plikach kompilacji Gradle rozszerzeniaandroid na najwyższym poziomie. Konfiguracja jest obsługiwana za pomocą bloku androidLibrary w ramach platformy wieloplatformowej Kotlin DSL, co zapewnia spójną strukturę projektu KMP.
  • Kompilacja Java z opcją włączenia: kompilacja Java jest domyślnie wyłączona. Jeśli biblioteka KMP musi kompilować kod w języku Java, musisz wyraźnie włączyć tę opcję, używając interfejsu API withJava() w bloku konfiguracji androidLibrary w bloku kotlin. Umożliwia to większą kontrolę nad procesem kompilacji i może skrócić czas kompilacji, gdy nie jest wymagana kompilacja kodu opartego na Javie.

Zalety migracji

Wtyczka Android-KMP zapewnia te korzyści w przypadku projektów KMP:

  • Zwiększona wydajność i stabilność kompilacji: wtyczka Android-KMP została zaprojektowana w celu optymalizacji szybkości kompilacji i zwiększenia stabilności projektów KMP. Jej uproszczona architektura i skupienie się na przepływach pracy KMP przyczyniają się do bardziej wydajnego i solidnego procesu kompilacji.
  • Ulepszona integracja z IDE: wtyczka zapewnia lepszą integrację z Android Studio i innymi IDE w języku Kotlin. Dzięki temu funkcje uzupełniania kodu, nawigacji, debugowania i ogólnego interfejsu programisty będą działać lepiej podczas pracy z bibliotekami KMP Android.
  • Uproszczona konfiguracja projektu: usuwając złożone funkcje związane z Androidem, takie jak warianty, wtyczka Android-KMP upraszcza konfigurację projektów KMP. Dzięki temu pliki kompilacji są bardziej przejrzyste i łatwiejsze w utrzymaniu, a programiści, którzy dopiero zaczynają tworzyć aplikacje na Androida za pomocą KMP, szybciej się tego uczą. Wcześniej podczas integrowania Androida z projektem KMP za pomocą wtyczki com.android.library interakcja między wtyczką Androida do obsługi Gradle a wtyczką Kotlin do obsługi Gradle w ramach struktury wieloplatformowej czasami powodowała wprowadzenie w nazwach zestawów źródeł informacji, które mogły wprowadzać w błąd. Na przykład zestaw źródeł przeznaczony do konfigurowania testów z instrumentacją na Androida został nazwany androidAndroidTest. Ta konwencja nazewnictwa była mniej intuicyjna dla programistów znających standardowe struktury projektów KMP.
  • Oficjalne i zalecane rozwiązanie: wtyczka com.android.kotlin.multiplatform.library jest oficjalną alternatywą dla poprzedniej metody dodawania docelowych wersji na Androida do bibliotek KMP za pomocą wtyczki com.android.library. Dalsze korzystanie z wtyczki com.android.library do KMP nie będzie już obsługiwane przez JetBrains i nie będzie objęte przyszłymi aktualizacjami ani ulepszeniami.

Stosowanie w projekcie wtyczki Android-KMP

Istnieją 2 podstawowe sposoby zastosowania wtyczki Android-KMP w projekcie: * W przypadku dotychczasowych modułów bibliotek KMP ręcznie edytuj pliki Gradle. * W przypadku nowych modułów biblioteki KMP utwórz nowy moduł bezpośrednio w interfejsie Androida Studio.

Zastosowanie wtyczki do istniejącego modułu

Aby zastosować wtyczkę Android-KMP do istniejącego modułu biblioteki KMP, wykonaj te czynności:

  1. Otwórz plik TOML katalogu wersji i w sekcji plugins dodaj:

    [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" }
    

    Zastąp KOTLIN_PLUGIN_VERSIONANDROID_KMP_PLUGIN_VERSION wersjami, których używasz.

  2. Otwórz plik build.gradle.kts (Kotlin) lub build.gradle (Groovy) w katalogu głównym modułu biblioteki KMP.

  3. Zastosuj wtyczkę u góry pliku w bloku plugins:

    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
    }
  4. Skonfiguruj blok Kotlin Multiplatform (kotlin), aby zdefiniować ustawienie docelowe na Androida. W bloku kotlin określ środowisko docelowe Androida za pomocą parametru androidLibrary:

    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. Po zastosowaniu wtyczki i skonfigurowaniu bloku kotlin zsynchronizuj projekt Gradle, aby zastosować zmiany.

Tworzenie nowego modułu za pomocą wtyczki

Nowy moduł biblioteki Kotlin Multiplatform możesz też utworzyć bezpośrednio w Android Studio. Wtyczki potrzebne do działania aplikacji zostaną zastosowane automatycznie, w tym wtyczka Android-KMP. Więcej informacji o tworzeniu nowego modułu biblioteki KMP w Android Studio znajdziesz w artykule Dodawanie Kotlina Multiplatform do istniejącego projektu.

Więcej informacji o całym ekosystemie wieloplatformowym i bardziej zaawansowanych konfiguracjach znajdziesz w oficjalnej dokumentacji Kotlina na wiele platform.