เพิ่ม Kotlin Multiplatform ลงในโปรเจ็กต์ที่มีอยู่

หากต้องการสร้างโมดูล Kotlin Multiplatform (KMP) ภายในโปรเจ็กต์ Android ให้ใช้เทมเพลตโมดูลที่ใช้ร่วมกันของ Kotlin Multiplatform ซึ่งพร้อมใช้งานใน Android Studio Meerkat และปลั๊กอิน Android Gradle 8.8.0 ขึ้นไป

เทมเพลตโมดูลจะสร้างโมดูลใหม่โดยอัตโนมัติด้วยการกำหนดค่าขั้นต่ำที่กำหนดเป้าหมายไปยังแพลตฟอร์ม Android และ iOS นอกจากนี้ KMP ยังรองรับเป้าหมายอื่นๆ เช่น เดสก์ท็อปและเว็บ ซึ่งคุณสามารถเพิ่มลงในโมดูลได้ในภายหลัง ดูรายการทั้งหมดได้ที่ความเสถียรของแพลตฟอร์มที่รองรับ หากต้องการประกาศเป้าหมาย โปรดดูเป้าหมายในข้อมูลอ้างอิง DSL ของ Gradle แบบหลายแพลตฟอร์ม

ตั้งค่าโมดูล KMP ที่แชร์

หากต้องการสร้างโมดูล KMP ที่แชร์ ให้ทำตามขั้นตอนต่อไปนี้

  1. เลือกไฟล์ > ใหม่ > โมดูลใหม่
  2. เลือกเทมเพลต Kotlin Multiplatform Shared Module ในแผงเทมเพลต
การสร้างโมดูล KMP ใหม่
รูปที่ 1 การสร้างโมดูล KMP ใหม่

ฟิลด์ในเทมเพลตมีดังนี้

  • ชื่อโมดูล - กำหนดชื่อโมดูล Gradle รวมถึงชื่อเฟรมเวิร์ก iOS (เปลี่ยนได้ในภายหลัง)
  • Package name – กำหนดชื่อแพ็กเกจสำหรับไฟล์ในโมดูลนี้
    1. คลิกเสร็จสิ้นและอนุญาตให้ Gradle ซิงค์กับโปรเจ็กต์ นอกจากนี้ ระบบอาจแจ้งให้คุณเพิ่มไฟล์โมดูลที่สร้างขึ้นใหม่ลงในการควบคุมแหล่งที่มาด้วย

เมื่อเสร็จแล้ว มุมมองโปรเจ็กต์ของ Android Studio จะแสดงโมดูลที่แชร์ใหม่พร้อมกับชุดแหล่งที่มาสำหรับแต่ละแพลตฟอร์ม

มุมมองโปรเจ็กต์ที่แสดงโมดูลที่แชร์ใหม่
รูปที่ 2 มุมมองโปรเจ็กต์ที่แสดงโมดูลที่แชร์ใหม่

วิซาร์ดโมดูลจะไม่เพิ่มโมดูลที่สร้างขึ้นใหม่เป็นทรัพยากร Dependency ลงในโมดูลที่มีอยู่ ขั้นตอนถัดไปคือคุณต้องลิงก์โมดูลที่แชร์กับโมดูล Gradle ที่มีอยู่โมดูลใดโมดูลหนึ่งในลักษณะเดียวกับทรัพยากร Dependency อื่นๆ ของ Android ดังนี้

dependencies {
    ...
    implementation(project(":shared"))
}

เมื่อเปิดใช้แล้ว คุณจะเข้าถึงโค้ดได้ตามปกติ จากแอป Android คุณจะเข้าถึงโค้ดที่พร้อมใช้งานใน androidMain หรือ commonMain ได้

ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างโปรเจ็กต์ Kotlin Multiplatform ได้ที่ข้อมูลพื้นฐานเกี่ยวกับโครงสร้างโปรเจ็กต์ Kotlin Multiplatform

ตั้งค่าโมดูลที่แชร์ไปยังแอป iOS

Swift ไม่สามารถใช้โมดูล Kotlin ได้โดยตรง และต้องสร้างเฟรมเวิร์กไบนารีที่คอมไพล์แล้ว

เทมเพลตโมดูลใหม่ใน Android Studio จะกำหนดค่าโมดูลที่ใช้ร่วมกันเพื่อสร้างเฟรมเวิร์กสำหรับสถาปัตยกรรม iOS แต่ละรายการ คุณจะเห็นโค้ดต่อไปนี้ในไฟล์ build.gradle.kts ของโมดูลที่แชร์

val xcfName = "sharedKit"

iosX64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

iosSimulatorArm64 {
  binaries.framework {
    baseName = xcfName
  }
}

ดูข้อมูลเกี่ยวกับการกำหนดสถาปัตยกรรมประเภทอื่นๆ ได้ที่โครงสร้างโปรเจ็กต์แบบลำดับชั้น

หากต้องการเปิดใช้การเข้าถึงโค้ดที่แชร์จากโปรเจ็กต์ iOS ให้เพิ่มระยะสคริปต์เพื่อสร้างเฟรมเวิร์ก Kotlin ก่อนคอมไพล์แหล่งที่มา Swift โดยทำดังนี้

  1. คลิกขวาที่ไฟล์ใน Android Studio แล้วเลือก Open In และ Open in Associated Application ซึ่งจะเปิดแอป iOS ใน Xcode
เปิดในแอปพลิเคชันที่เชื่อมโยง
รูปที่ 3 เปิดในแอปพลิเคชันที่เชื่อมโยง
  1. เปิดการตั้งค่าโปรเจ็กต์โดยดับเบิลคลิกชื่อโปรเจ็กต์ในตัวนำทางโปรเจ็กต์
กล่องโต้ตอบการตั้งค่าโปรเจ็กต์ Xcode
รูปที่ 4 กล่องโต้ตอบการตั้งค่าโปรเจ็กต์ Xcode
  1. เปลี่ยนชื่อเรียกใช้สคริปต์เริ่มต้นเป็นคอมไพล์เฟรมเวิร์ก Kotlin เพื่อให้ระบุสิ่งที่เฟสนี้ทำได้ดีขึ้น ดับเบิลคลิกชื่อเรียกใช้สคริปต์เพื่อแก้ไข
  2. ขยายระยะการสร้าง และในช่องข้อความ Shell ให้ป้อนโค้ดสคริปต์ต่อไปนี้
การเพิ่มระยะการสร้างสคริปต์การเรียกใช้ใหม่
รูปที่ 5 เรียกใช้เฟสการสร้างสคริปต์
  1. ลากเฟสเรียกใช้สคริปต์ไปไว้ก่อนเฟสคอมไพล์แหล่งที่มา

    เรียกใช้ระยะการสร้างสคริปต์ก่อนคอมไพล์แหล่งที่มา
    รูปที่ 6 เรียกใช้เฟสการสร้างสคริปต์ก่อนคอมไพล์แหล่งที่มา

  2. สร้างโปรเจ็กต์ใน Xcode โดยคลิก ⌘B หรือไปที่เมนูผลิตภัณฑ์ แล้วเลือกสร้าง

เมื่อสร้างสำเร็จ คุณจะเห็นไอคอนต่อไปนี้

ข้อความ "Build successful" แสดงใน Xcode
รูปที่ 7 สร้างสำเร็จ

เข้าถึงโค้ดที่แชร์ในแอป iOS

หากต้องการยืนยันว่าแอป iOS สามารถเข้าถึงโค้ดจากโมดูลที่แชร์ได้สำเร็จ ให้ทำดังนี้

  1. ในโปรเจ็กต์ iOS ให้เปิดไฟล์ ContentView.swift ที่ Sources/View/ContentView.swift
  2. เพิ่มการนำเข้า sharedKit ที่ด้านบนของไฟล์
  3. แก้ไขมุมมองข้อความเพื่อรวมข้อมูล Platform_iosKt.platform() ในสตริงที่แสดงดังนี้

การอัปเดตนี้จะตรวจสอบว่าแอปสามารถเรียกใช้ฟังก์ชัน platform() จากโมดูลที่แชร์ได้หรือไม่ ซึ่งควรแสดงผลเป็น "iOS" เมื่อทำงานบนแพลตฟอร์ม iOS

โปรแกรมจำลอง Xcode ที่เรียกใช้แอป iOS
รูปที่ 8 โปรแกรมจำลอง Xcode ที่เรียกใช้แอป iOS

แหล่งข้อมูลเพิ่มเติม