ก่อนหน้านี้ วิธีเดียวที่จะผสานรวม Android เข้ากับโปรเจ็กต์ KMP ได้คือการใช้ปลั๊กอิน Gradle ของไลบรารี Android ปกติ com.android.library
อย่างไรก็ตาม ตอนนี้เราเลิกใช้งานแนวทางนี้แล้วเพื่อหันมาใช้com.android.kotlin.multiplatform.library
ปลั๊กอินเฉพาะ ซึ่งเรียกอีกอย่างว่าปลั๊กอิน Android-KMP คู่มือนี้จะอธิบายวิธีย้ายข้อมูลไปยังปลั๊กอินใหม่
ฟีเจอร์และความแตกต่างที่สำคัญ
ปลั๊กอิน Android-KMP (com.android.kotlin.multiplatform.library
) ปรับแต่งมาโดยเฉพาะสำหรับโปรเจ็กต์ KMP และแตกต่างจากปลั๊กอิน com.android.library
แบบดั้งเดิมในหลายแง่มุมสำคัญ ดังนี้
- สถาปัตยกรรมตัวแปรเดียว: ปลั๊กอินจะทํางานกับตัวแปรเดียว ซึ่งจะปรับปรุงกระบวนการสร้างให้มีประสิทธิภาพมากขึ้นด้วยการนําการรองรับ Flavor ของผลิตภัณฑ์และประเภทการสร้างที่พบได้ทั่วไปในโปรเจ็กต์ไลบรารี Android มาตรฐานออก ซึ่งจะลดความซับซ้อนในการกําหนดค่าและปรับปรุงประสิทธิภาพการสร้างสําหรับไลบรารี KMP Android
- เพิ่มประสิทธิภาพสำหรับ KMP: ปลั๊กอินนี้ออกแบบมาโดยเฉพาะสำหรับไลบรารี Kotlin แบบหลายแพลตฟอร์ม โดยมุ่งเน้นที่โค้ด Kotlin ที่แชร์และการทํางานร่วมกัน ด้วยเหตุนี้ จึงไม่มีการสนับสนุนสำหรับบิลด์เนทีฟเฉพาะ Android, AIDL (Android Interface Definition Language) และ RenderScript ซึ่งโดยทั่วไปจะไม่เกี่ยวข้องในบริบทโค้ดที่แชร์ของ KMP
- การทดสอบปิดใช้โดยค่าเริ่มต้น: ระบบจะปิดใช้การทดสอบโดยค่าเริ่มต้นเพื่อเพิ่มความเร็วในการสร้างในสภาพแวดล้อมแบบหลายแพลตฟอร์ม คุณสามารถเปิดใช้การทดสอบได้อย่างชัดเจนหากจําเป็นสําหรับโปรเจ็กต์ ซึ่งมีผลกับการทดสอบทั้งบนโฮสต์ (การทดสอบ 1 หน่วย) และการทดสอบบนอุปกรณ์ (การทดสอบเครื่องมือวัด)
- ไม่มีส่วนขยาย Android ระดับบนสุด: ปลั๊กอินไม่ได้สร้างส่วนขยาย
android
ระดับบนสุดในไฟล์บิลด์ Gradle การกำหนดค่าจะจัดการด้วยบล็อกandroidLibrary
ภายใน DSL แบบหลายแพลตฟอร์มของ Kotlin ซึ่งจะรักษาโครงสร้างโปรเจ็กต์ KMP ให้สอดคล้องกัน - การคอมไพล์ Java แบบเลือกใช้: ระบบจะไม่เปิดใช้การคอมไพล์ Java โดยค่าเริ่มต้น หากต้องคอมไพล์โค้ด Java ในไลบรารี KMP คุณต้องเลือกใช้อย่างชัดเจนโดยใช้
withJava()
API ภายในบล็อกการกําหนดค่าandroidLibrary
ในบล็อกkotlin
ซึ่งช่วยให้ควบคุมกระบวนการคอมไพล์ได้ดียิ่งขึ้นและปรับปรุงเวลาสร้างได้เมื่อไม่จำเป็นต้องคอมไพล์โค้ดที่ใช้ Java
ประโยชน์ของการย้ายข้อมูล
ปลั๊กอิน Android-KMP มีประโยชน์ต่อไปนี้สำหรับโปรเจ็กต์ KMP
- ปรับปรุงประสิทธิภาพและความเสถียรของบิลด์: ปลั๊กอิน Android-KMP ได้รับการออกแบบมาเพื่อเพิ่มความเร็วในการบิลด์และเพิ่มความเสถียรภายในโปรเจ็กต์ KMP สถาปัตยกรรมที่มีประสิทธิภาพและมุ่งเน้นที่เวิร์กโฟลว์ KMP ช่วยให้กระบวนการสร้างมีประสิทธิภาพและเชื่อถือได้มากขึ้น
- การผสานรวม IDE ที่ปรับปรุงแล้ว: ปลั๊กอินให้การผสานรวมที่เหนือกว่ากับ Android Studio และ IDE อื่นๆ ของ Kotlin ซึ่งจะช่วยให้การเติมโค้ด การนำทาง การแก้ไขข้อบกพร่อง และประสบการณ์โดยรวมของนักพัฒนาซอฟต์แวร์ดีขึ้นเมื่อทำงานกับไลบรารี KMP Android
- การกำหนดค่าโปรเจ็กต์ที่ง่ายขึ้น: ปลั๊กอิน Android-KMP ลดความซับซ้อนในการกำหนดค่าสำหรับโปรเจ็กต์ KMP ด้วยการนำความซับซ้อนเฉพาะ Android เช่น ตัวแปร ออก การดำเนินการนี้ทำให้ไฟล์บิลด์สะอาดขึ้น ดูแลรักษาได้ง่ายขึ้น และลดเวลาการเรียนรู้สำหรับนักพัฒนาแอปที่เพิ่งเริ่มพัฒนาแอป Android ด้วย KMP
ก่อนหน้านี้ เมื่อผสานรวม Android เข้ากับโปรเจ็กต์ KMP โดยใช้ปลั๊กอิน
com.android.library
การทำงานร่วมกันระหว่างปลั๊กอิน Android Gradle กับปลั๊กอิน Kotlin Gradle ภายในโครงสร้างแบบหลายแพลตฟอร์มบางครั้งส่งผลให้ชื่อชุดแหล่งที่มาทำให้เข้าใจผิด ตัวอย่างเช่น ชุดแหล่งที่มาที่กําหนดไว้สําหรับการกําหนดค่าการทดสอบที่มีเครื่องมือวัดของ Android มีชื่อว่าandroidAndroidTest
รูปแบบการตั้งชื่อนี้ใช้งานยากสำหรับนักพัฒนาซอฟต์แวร์ที่คุ้นเคยกับโครงสร้างโปรเจ็กต์ KMP มาตรฐาน - วิธีแก้ปัญหาอย่างเป็นทางการและที่แนะนำ: ปลั๊กอิน
com.android.kotlin.multiplatform.library
เป็นวิธีอย่างเป็นทางการในการแทนที่วิธีก่อนหน้าในการเพิ่มเป้าหมาย Android ลงในไลบรารี KMP โดยใช้ปลั๊กอินcom.android.library
JetBrains จะไม่รองรับการใช้com.android.library
ต่อไปสำหรับ KMP และคุณจะไม่ได้รับประโยชน์จากการอัปเดตและการปรับปรุงในอนาคต
ใช้ปลั๊กอิน Android-KMP ในโปรเจ็กต์
วิธีหลักๆ 2 วิธีในการใช้ปลั๊กอิน Android-KMP กับโปรเจ็กต์มีดังนี้ * สําหรับโมดูลคลัง KMP ที่มีอยู่ ให้แก้ไขไฟล์ Gradle ด้วยตนเอง * สำหรับโมดูลไลบรารี KMP ใหม่ ให้สร้างโมดูลใหม่โดยตรงจาก UI ของ Android Studio
ใช้ปลั๊กอินกับโมดูลที่มีอยู่
หากต้องการใช้ปลั๊กอิน Android-KMP กับโมดูลไลบรารี KMP ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้
เปิดไฟล์ TOML ของแคตตาล็อกเวอร์ชัน แล้วเพิ่มข้อมูลต่อไปนี้ลงในส่วน
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" }
แทนที่ KOTLIN_PLUGIN_VERSION และ ANDROID_KMP_PLUGIN_VERSION ด้วยเวอร์ชันจริงที่คุณใช้
เปิดไฟล์
build.gradle.kts
(Kotlin) หรือbuild.gradle
(Groovy) ที่รูทของโมดูลไลบรารี KMPใช้ปลั๊กอินที่ด้านบนของไฟล์ภายในบล็อก
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 }
กำหนดค่าบล็อก Kotlin Multiplatform (
kotlin
) เพื่อกำหนดเป้าหมาย Android ภายในบล็อกkotlin
ให้ระบุเป้าหมาย Android โดยใช้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.) ... }
หลังจากใช้ปลั๊กอินและกำหนดค่าบล็อก
kotlin
แล้ว ให้ซิงค์โปรเจ็กต์ Gradle เพื่อใช้การเปลี่ยนแปลง
สร้างโมดูลใหม่ด้วยปลั๊กอิน
นอกจากนี้ คุณยังสร้างโมดูลไลบรารี Kotlin Multiplatform ใหม่ได้โดยตรงใน Android Studio ซึ่งจะใช้ปลั๊กอินที่จําเป็นโดยอัตโนมัติ รวมถึงปลั๊กอิน Android-KMP ดูคําแนะนําเพิ่มเติมเกี่ยวกับวิธีสร้างโมดูลไลบรารี KMP ใหม่ด้วย Android Studio ได้ที่เพิ่ม Kotlin Multiplatform ลงในโปรเจ็กต์ที่มีอยู่
ดูข้อมูลเพิ่มเติมเกี่ยวกับระบบนิเวศแบบหลายแพลตฟอร์มโดยรวมและการกําหนดค่าขั้นสูงได้ที่เอกสารประกอบอย่างเป็นทางการของ Kotlin Multiplatform