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

Kotlin Multiplatform มีปลั๊กอิน Gradle สำหรับกำหนดค่าโมดูลไลบรารี

com.android.kotlin.multiplatform.library ปลั๊กอินนี้เป็นตัวแทนอย่างเป็นทางการ ของวิธีก่อนหน้าในการเพิ่มเป้าหมาย Android ลงในไลบรารี KMP โดยใช้ปลั๊กอิน Gradle ของไลบรารี Android ปกติ (com.android.library)

ตอนนี้เราเลิกใช้แนวทางก่อนหน้านี้แล้วและหันมาใช้ปลั๊กอินแทน ซึ่งเรียกอีกอย่างว่าปลั๊กอิน Android-KMP JetBrains จะไม่รองรับการใช้com.android.library ปลั๊กอินสำหรับ KMP อีกต่อไป และคุณจะไม่ได้รับประโยชน์จากการอัปเดตและการปรับปรุงในอนาคต

หากต้องการย้ายข้อมูลไปยังปลั๊กอินนี้ โปรดดูส่วนใช้ปลั๊กอิน Android-KMP

ฟีเจอร์หลักและความแตกต่าง

ปลั๊กอิน Android-KMP ได้รับการปรับแต่งมาสำหรับโปรเจ็กต์ KMP โดยเฉพาะ และแตกต่างจากปลั๊กอิน com.android.library มาตรฐานในหลายๆ ด้านที่สำคัญ ดังนี้

  • สถาปัตยกรรมแบบตัวแปรเดียว: ปลั๊กอินใช้ตัวแปรเดียว ซึ่งจะนำการรองรับ รสชาติของผลิตภัณฑ์และประเภทบิลด์ออก ซึ่งจะช่วยลดความซับซ้อนในการกำหนดค่า และเพิ่มประสิทธิภาพการบิลด์

  • เพิ่มประสิทธิภาพสำหรับ KMP: ปลั๊กอินได้รับการออกแบบมาสำหรับไลบรารี KMP โดยเน้นที่ โค้ด Kotlin ที่แชร์และความสามารถในการทำงานร่วมกัน โดยไม่รองรับ บิลด์แบบเนทีฟเฉพาะ Android, AIDL และ RenderScript

  • การทดสอบที่ปิดใช้โดยค่าเริ่มต้น: ทั้งการทดสอบหน่วยและการทดสอบอุปกรณ์ (การวัด) จะปิดใช้โดยค่าเริ่มต้นเพื่อเพิ่มความเร็วในการสร้าง คุณสามารถเปิดใช้ได้หากจำเป็น

  • ไม่มีส่วนขยาย Android ระดับบนสุด: การกำหนดค่าจะได้รับการจัดการด้วยบล็อก androidLibrary ภายใน KMP DSL ของ Gradle ซึ่งจะรักษาโครงสร้างโปรเจ็กต์ KMP ที่สอดคล้องกัน ไม่มีการบล็อกส่วนขยาย android ระดับบนสุด

  • เลือกใช้การคอมไพล์ Java: ระบบจะปิดใช้การคอมไพล์ Java โดยค่าเริ่มต้น ใช้ withJava() ในบล็อก androidLibrary เพื่อเปิดใช้ ซึ่งจะช่วยปรับปรุงเวลาบิลด์ เมื่อไม่จำเป็นต้องคอมไพล์ Java

ประโยชน์ของปลั๊กอินไลบรารี Android-KMP

ปลั๊กอิน Android-KMP มีประโยชน์ต่อไปนี้สำหรับโปรเจ็กต์ KMP

  • ปรับปรุงประสิทธิภาพและความเสถียรของการสร้าง: ออกแบบมาเพื่อความเร็วในการสร้างที่เพิ่มประสิทธิภาพและปรับปรุงความเสถียรภายในโปรเจ็กต์ KMP การมุ่งเน้นที่เวิร์กโฟลว์ KMP ช่วยให้กระบวนการบิลด์มีประสิทธิภาพและเชื่อถือได้มากขึ้น

  • การผสานรวม IDE ที่ดียิ่งขึ้น: ช่วยให้การเติมโค้ด การนำทาง การแก้ไขข้อบกพร่อง และประสบการณ์โดยรวมของนักพัฒนาซอฟต์แวร์ดีขึ้นเมื่อทำงานกับ ไลบรารี KMP Android

  • การกำหนดค่าโปรเจ็กต์ที่ง่ายขึ้น: ปลั๊กอินช่วยลดความซับซ้อนในการกำหนดค่า สำหรับโปรเจ็กต์ KMP โดยการนำความซับซ้อนเฉพาะของ Android เช่น ตัวแปรบิลด์ ออก ซึ่งจะทำให้ไฟล์บิลด์สะอาดและดูแลรักษาง่ายขึ้น ก่อนหน้านี้ การใช้ปลั๊กอิน com.android.library ในโปรเจ็กต์ KMP อาจสร้างชื่อชุดแหล่งที่มาที่ทำให้สับสน เช่น androidAndroidTest รูปแบบการตั้งชื่อนี้ ไม่ค่อยเป็นที่เข้าใจสำหรับนักพัฒนาซอฟต์แวร์ที่คุ้นเคยกับโครงสร้างโปรเจ็กต์ KMP มาตรฐาน

ใช้ปลั๊กอิน Android-KMP กับโมดูลที่มีอยู่

หากต้องการใช้ปลั๊กอิน Android-KMP กับโมดูลไลบรารี KMP ที่มีอยู่ ให้ทำตามขั้นตอนต่อไปนี้

  1. ประกาศปลั๊กอินในแคตตาล็อกเวอร์ชัน เปิดไฟล์ TOML ของแคตตาล็อกเวอร์ชัน (โดยปกติคือ gradle/libs.versions.toml) แล้วเพิ่มส่วนคำจำกัดความของปลั๊กอิน

    # To check the version number of the latest Kotlin release, go to
    # https://kotlinlang.org/docs/releases.html
    
    [versions]
    androidGradlePlugin = "8.12.0"
    kotlin = "KOTLIN_VERSION"
    
    [plugins]
    kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
    android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "androidGradlePlugin" }
    
  2. ใช้การประกาศปลั๊กอินในไฟล์บิลด์รูท เปิดไฟล์ build.gradle.ktsที่อยู่ในไดเรกทอรีรากของโปรเจ็กต์ เพิ่ม ชื่อแทนของปลั๊กอินลงในpluginsบล็อกโดยใช้apply false ซึ่งจะทำให้ นามแฝงของปลั๊กอินพร้อมใช้งานในโปรเจ็กต์ย่อยทั้งหมดโดยไม่ต้องใช้ตรรกะของปลั๊กอิน กับโปรเจ็กต์รูทเอง

    Kotlin

    // Root build.gradle.kts file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }

    Groovy

    // Root build.gradle file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform) apply false
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library) apply false
    }
  3. ใช้ปลั๊กอินในไฟล์บิลด์ของโมดูลไลบรารี KMP เปิดไฟล์ build.gradle.kts ในโมดูลไลบรารี KMP แล้วใช้ปลั๊กอินที่ด้านบนของไฟล์ภายในบล็อก plugins

    Kotlin

    // Module-specific build.gradle.kts file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }

    Groovy

    // Module-specific build.gradle file
    
    plugins {
       alias(libs.plugins.kotlin.multiplatform)
    
       // Add the following
       alias(libs.plugins.android.kotlin.multiplatform.library)
    }
  4. กำหนดค่าเป้าหมาย KMP ของ Android กำหนดค่าบล็อก 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 เพื่อใช้การเปลี่ยนแปลง