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 pojedynczego wariantu: wtyczka działa z pojedynczym wariantem, co upraszcza proces kompilacji przez usunięcie obsługi wersji produktu i typów kompilacji, które są powszechne w standardowych projektach bibliotek Androida. Upraszcza to konfigurację i zwiększa wydajność kompilacji bibliotek KMP na Androida.
  • Zoptymalizowany pod kątem KMP: wtyczka jest przeznaczona specjalnie do bibliotek wieloplatformowych Kotlina, z uwzględnieniem współdzielonego kodu Kotlina i współdziałania. W konsekwencji nie obsługuje ona natywnych kompilacji specyficznych dla Androida, AIDL (języka definiowania interfejsu 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 są one wymagane w Twoim projekcie, 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 withJava() API 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 w języku Java.

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 niezawodnego 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ólne środowisko programistyczne będą działać lepiej podczas pracy z bibliotekami Androida KMP.
  • 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 deweloperzy, 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 w projekcie wtyczki Android-KMP:

Zastosowanie wtyczki do istniejącego modułu

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

  1. Deklarowanie wtyczek w katalogu wersji. Otwórz plik TOML katalogu wersji (zwykle gradle/libs.versions.toml) i dodaj definicje wtyczki do sekcji [plugins].

    [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. Zastosuj deklaracje wtyczki w głównym pliku kompilacji. Otwórz plik build.gradle.kts (Kotlin) lub build.gradle (Groovy) znajdujący się w katalogu głównym projektu. Dodaj aliasy wtyczki do bloku plugins za pomocą elementu apply false. Dzięki temu aliasy wtyczki są dostępne we wszystkich podprojektach bez konieczności stosowania logiki wtyczki w samym projekcie głównym.

    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
    }
  3. Zastosuj wtyczkę w pliku kompilacji modułu biblioteki KMP. Otwórz plik build.gradle.kts (Kotlin) lub build.gradle (Groovy) w module biblioteki KMP. Zastosuj wtyczkę u góry pliku w bloku plugins:

    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)
    }
  4. Skonfiguruj docelowe KMP na Androida. Skonfiguruj blok Kotlin Multiplatform (kotlin), aby określić docelowe urządzenie z Androidem. W bloku kotlin określ ustawienie docelowe Androida za pomocą elementu 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. Zastosuj zmiany. Po zastosowaniu wtyczki i skonfigurowaniu bloku kotlinzsynchronizuj projekt Gradle, aby zastosować zmiany.

Tworzenie nowego modułu za pomocą wtyczki

Nowy moduł biblioteki Kotlin Multiplatform możesz utworzyć bezpośrednio w Android Studio. Wtyczki, w tym wtyczka Android-KMP, zostaną automatycznie zastosowane. Więcej informacji o tworzeniu nowego modułu biblioteki KMP za pomocą 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.