Sebelumnya, satu-satunya cara untuk mengintegrasikan Android ke dalam project KMP adalah dengan menggunakan
plugin Gradle library Android reguler: com.android.library
. Namun, pendekatan
ini kini tidak digunakan lagi dan diganti dengan plugin
com.android.kotlin.multiplatform.library
khusus, yang juga disebut sebagai
plugin Android-KMP. Panduan ini menjelaskan cara bermigrasi ke plugin
baru.
Fitur dan perbedaan utama
Plugin Android-KMP (com.android.kotlin.multiplatform.library
) disesuaikan
khusus untuk project KMP dan berbeda dengan plugin
com.android.library
tradisional dalam beberapa aspek utama:
- Arsitektur varian tunggal: Plugin beroperasi dengan satu varian, yang menyederhanakan proses build dengan menghapus dukungan untuk ragam produk dan jenis build yang biasa ditemukan di project library Android standar. Hal ini menyederhanakan konfigurasi dan meningkatkan performa build untuk library Android KMP.
- Dioptimalkan untuk KMP: Plugin ini dirancang khusus untuk library Multiplatform Kotlin, yang berfokus pada kode Kotlin bersama dan interoperabilitas. Akibatnya, build ini menghilangkan dukungan untuk build native khusus Android, AIDL (Android Interface Definition Language), dan RenderScript, yang biasanya tidak relevan dalam konteks kode bersama KMP.
- Pengujian dinonaktifkan secara default: Untuk lebih meningkatkan kecepatan build di lingkungan multiplatform, pengujian dinonaktifkan secara default. Anda dapat secara eksplisit mengaktifkan pengujian jika diperlukan untuk project Anda. Hal ini berlaku untuk pengujian pada host (pengujian unit) dan pengujian pada perangkat (pengujian instrumentasi).
- Tidak ada ekstensi Android Level Teratas: Plugin tidak membuat ekstensi
android
level teratas dalam file build Gradle Anda. Konfigurasi ditangani dengan blokandroidLibrary
dalam DSL multiplatform Kotlin, yang mempertahankan struktur project KMP yang konsisten. - Kompilasi Java keikutsertaan: Kompilasi Java tidak diaktifkan secara default. Jika
library KMP Anda perlu mengompilasi kode berbasis Java, Anda harus memilih ikut secara eksplisit
dengan menggunakan
withJava()
API dalam blok konfigurasiandroidLibrary
di blokkotlin
. Hal ini memungkinkan kontrol yang lebih baik atas proses kompilasi dan dapat meningkatkan waktu build jika kompilasi kode berbasis Java tidak diperlukan.
Manfaat migrasi
Plugin Android-KMP memberikan manfaat berikut untuk project KMP:
- Peningkatan performa dan stabilitas build: Plugin Android-KMP dirancang untuk kecepatan build yang dioptimalkan dan stabilitas yang ditingkatkan dalam project KMP. Arsitekturnya yang disederhanakan dan fokus pada alur kerja KMP berkontribusi pada proses build yang lebih efisien dan andal.
- Integrasi IDE yang ditingkatkan: Plugin ini memberikan integrasi yang lebih baik dengan Android Studio dan IDE Kotlin lainnya. Hal ini menghasilkan pelengkapan kode, navigasi, proses debug, dan pengalaman developer yang lebih baik secara keseluruhan saat menggunakan library Android KMP.
- Konfigurasi project yang disederhanakan: Dengan menghapus kompleksitas khusus
Android seperti varian, plugin Android-KMP menyederhanakan konfigurasi
untuk project KMP. Hal ini menghasilkan file build yang lebih rapi dan lebih mudah dikelola serta
mengurangi kurva pembelajaran bagi developer yang baru mengenal pengembangan Android KMP.
Sebelumnya, saat mengintegrasikan Android ke dalam project KMP menggunakan
plugin
com.android.library
, interaksi antara plugin Android Gradle dan plugin Kotlin Gradle dalam struktur multiplatform terkadang menghasilkan nama set sumber yang menyesatkan. Misalnya, set sumber yang didedikasikan untuk mengonfigurasi pengujian berinstrumen Android diberi namaandroidAndroidTest
. Konvensi penamaan ini kurang intuitif bagi developer yang sudah terbiasa dengan struktur project KMP standar. - Solusi resmi dan direkomendasikan: Plugin
com.android.kotlin.multiplatform.library
adalah pengganti resmi untuk metode sebelumnya dalam menambahkan target Android ke library KMP menggunakan plugincom.android.library
. Melanjutkan penggunaan plugincom.android.library
untuk KMP tidak akan lagi didukung oleh JetBrains dan tidak akan mendapatkan manfaat dari update dan peningkatan di masa mendatang.
Menerapkan plugin Android-KMP ke project
Ada dua cara utama untuk menerapkan plugin Android-KMP ke project Anda: * Untuk modul library KMP yang ada, edit file Gradle Anda secara manual. * Untuk modul library KMP baru, buat modul baru secara langsung dari UI Android Studio.
Menerapkan plugin ke modul yang ada
Untuk menerapkan plugin Android-KMP ke modul library KMP yang ada, ikuti langkah-langkah berikut:
Buka file TOML katalog versi, lalu tambahkan kode berikut ke bagian
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" }
Ganti KOTLIN_PLUGIN_VERSION dan ANDROID_KMP_PLUGIN_VERSION dengan versi sebenarnya yang Anda gunakan.
Buka file
build.gradle.kts
(Kotlin) ataubuild.gradle
(Groovy) di root modul library KMP Anda.Terapkan plugin di bagian atas file dalam blok
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 }
Konfigurasikan blok Multiplatform Kotlin (
kotlin
) untuk menentukan target Android. Dalam blokkotlin
, tentukan target Android menggunakanandroidLibrary
: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.) ... }
Setelah menerapkan plugin dan mengonfigurasi blok
kotlin
, sinkronkan project Gradle Anda untuk menerapkan perubahan.
Membuat modul baru dengan plugin
Anda juga dapat membuat modul library Kotlin Multiplatform baru langsung dalam Android Studio. Tindakan ini akan otomatis menerapkan plugin yang diperlukan, termasuk plugin Android-KMP. Untuk panduan lebih lanjut tentang cara membuat modul library KMP baru dengan Android Studio, lihat Menambahkan Kotlin Multiplatform ke project yang ada.
Untuk informasi lebih lanjut tentang keseluruhan ekosistem multiplatform dan konfigurasi lanjutan lainnya, lihat dokumentasi Multiplatform Kotlin resmi.