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 rozszerzenia
android
na najwyższym poziomie. Konfiguracja jest obsługiwana za pomocą blokuandroidLibrary
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 konfiguracjiandroidLibrary
w blokukotlin
. 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ł nazwanyandroidAndroidTest
. 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ą wtyczkicom.android.library
. Dalsze korzystanie z wtyczkicom.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:
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_VERSION i ANDROID_KMP_PLUGIN_VERSION wersjami, których używasz.
Otwórz plik
build.gradle.kts
(Kotlin) lubbuild.gradle
(Groovy) w katalogu głównym modułu biblioteki KMP.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 }
Skonfiguruj blok Kotlin Multiplatform (
kotlin
), aby zdefiniować ustawienie docelowe na Androida. W blokukotlin
określ środowisko docelowe Androida za pomocą parametruandroidLibrary
: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.) ... }
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.