ย้ายข้อมูลไปยังปลั๊กอิน Android-KMP

ก่อนหน้านี้ วิธีเดียวที่จะผสานรวม 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 ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดไฟล์ 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 ด้วยเวอร์ชันจริงที่คุณใช้

  2. เปิดไฟล์ build.gradle.kts (Kotlin) หรือ build.gradle (Groovy) ที่รูทของโมดูลไลบรารี KMP

  3. ใช้ปลั๊กอินที่ด้านบนของไฟล์ภายในบล็อก 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
    }
  4. กำหนดค่าบล็อก 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.) ...
    }
  5. หลังจากใช้ปลั๊กอินและกำหนดค่าบล็อก kotlin แล้ว ให้ซิงค์โปรเจ็กต์ Gradle เพื่อใช้การเปลี่ยนแปลง

สร้างโมดูลใหม่ด้วยปลั๊กอิน

นอกจากนี้ คุณยังสร้างโมดูลไลบรารี Kotlin Multiplatform ใหม่ได้โดยตรงใน Android Studio ซึ่งจะใช้ปลั๊กอินที่จําเป็นโดยอัตโนมัติ รวมถึงปลั๊กอิน Android-KMP ดูคําแนะนําเพิ่มเติมเกี่ยวกับวิธีสร้างโมดูลไลบรารี KMP ใหม่ด้วย Android Studio ได้ที่เพิ่ม Kotlin Multiplatform ลงในโปรเจ็กต์ที่มีอยู่

ดูข้อมูลเพิ่มเติมเกี่ยวกับระบบนิเวศแบบหลายแพลตฟอร์มโดยรวมและการกําหนดค่าขั้นสูงได้ที่เอกสารประกอบอย่างเป็นทางการของ Kotlin Multiplatform