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 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
withJava()
API 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 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ł 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 w projekcie wtyczki Android-KMP:
- 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 Android Studio.
Zastosowanie wtyczki do istniejącego modułu
Aby zastosować wtyczkę Android-KMP do istniejącego modułu biblioteki KMP, wykonaj te czynności:
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_VERSION i ANDROID_KMP_PLUGIN_VERSION wersjami, których używasz.
Zastosuj deklaracje wtyczki w głównym pliku kompilacji. Otwórz plik
build.gradle.kts
(Kotlin) lubbuild.gradle
(Groovy) znajdujący się w katalogu głównym projektu. Dodaj aliasy wtyczki do blokuplugins
za pomocą elementuapply 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 }
Zastosuj wtyczkę w pliku kompilacji modułu biblioteki KMP. Otwórz plik
build.gradle.kts
(Kotlin) lubbuild.gradle
(Groovy) w module biblioteki KMP. Zastosuj wtyczkę u góry pliku w blokuplugins
: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) }
Skonfiguruj docelowe KMP na Androida. Skonfiguruj blok Kotlin Multiplatform (
kotlin
), aby określić docelowe urządzenie z Androidem. W blokukotlin
określ ustawienie docelowe Androida za pomocą elementuandroidLibrary
: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.) ... }
Zastosuj zmiany. 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 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.