Kapt (เครื่องมือประมวลผลคำอธิบายประกอบ Kotlin) ช่วยให้คุณใช้โปรเซสเซอร์สำหรับคำอธิบายประกอบ Java กับโค้ด Kotlin ได้ แม้ว่าโปรเซสเซอร์เหล่านั้นจะไม่มีการรองรับ Kotlin โดยเฉพาะก็ตาม ซึ่งทำได้โดยการสร้าง Java Stub จากไฟล์ Kotlin ที่โปรเซสเซอร์อ่านได้ การสร้างสตับนี้เป็นการดำเนินการที่มีค่าใช้จ่ายสูงและส่งผลต่อความเร็วในการสร้างอย่างมาก
KSP (Kotlin Symbol Processing) เป็นทางเลือกที่ใช้ Kotlin เป็นหลักแทน kapt KSP จะวิเคราะห์โค้ด Kotlin โดยตรง ซึ่งเร็วขึ้นสูงสุด 2 เท่า นอกจากนี้ยังเข้าใจโครงสร้างภาษา Kotlin ได้ดีขึ้นด้วย
คุณสามารถเรียกใช้ kapt และ KSP ควบคู่กันในโปรเจ็กต์ขณะที่ย้ายข้อมูล และสามารถย้ายข้อมูลทีละโมดูล ทีละไลบรารีได้
ภาพรวมของขั้นตอนการย้ายข้อมูลมีดังนี้
- ตรวจสอบไลบรารีที่คุณใช้สำหรับการรองรับ KSP
- เพิ่มปลั๊กอิน KSP ลงในโปรเจ็กต์
- แทนที่โปรเซสเซอร์สำหรับคำอธิบายประกอบด้วย KSP
- นำปลั๊กอิน kapt ออก
ตรวจสอบไลบรารีที่คุณใช้สำหรับการรองรับ KSP
ในการเริ่มต้นใช้งาน ให้ตรวจสอบว่าไลบรารีที่คุณใช้กับ kapt รองรับ KSP อยู่แล้วหรือไม่ ซึ่งเป็นกรณีที่เกิดขึ้นกับไลบรารียอดนิยมหลายรายการ (รวมถึง Dagger, Glide, Room และ Moshi) และไลบรารีอื่นๆ กำลังเพิ่มการรองรับ
คุณสามารถดูรายการไลบรารีที่รองรับในเอกสารประกอบ หรือดูเอกสารประกอบและเครื่องมือติดตามปัญหาของไลบรารีที่คุณใช้อยู่
เพิ่มปลั๊กอิน KSP ลงในโปรเจ็กต์
ก่อนอื่น ให้ประกาศปลั๊กอิน KSP ในไฟล์ build.gradle.kts ระดับบนสุด
คุณดูรายการรุ่นต่างๆ ได้ในหน้า GitHub ของ KSP
Kotlin
plugins { id("com.google.devtools.ksp") version "2.3.4" apply false }
ดึงดูด
plugins { id 'com.google.devtools.ksp' version '2.3.4' apply false }
จากนั้นเปิดใช้ KSP ในไฟล์ build.gradle.kts ระดับโมดูล
Kotlin
plugins { id("com.google.devtools.ksp") }
ดึงดูด
plugins { id 'com.google.devtools.ksp' }
แทนที่โปรเซสเซอร์สำหรับคำอธิบายประกอบด้วย KSP
เมื่อเปิดใช้ KSP แล้ว คุณจะเริ่มแทนที่การใช้งาน kapt ด้วย KSP ได้ สำหรับไลบรารีส่วนใหญ่ คุณเพียงแค่ต้องเปลี่ยน kapt เป็น ksp ที่การประกาศ Dependency เนื่องจากไลบรารีเหล่านี้จัดส่งโปรเซสเซอร์สำหรับคำอธิบายประกอบและโปรเซสเซอร์ KSP ในอาร์ติแฟกต์เดียวกัน
Kotlin
dependencies {kapt("androidx.room:room-compiler:2.5.0")ksp("androidx.room:room-compiler:2.5.0") }
ดึงดูด
dependencies {kapt 'androidx.room:room-compiler:2.5.0'ksp 'androidx.room:room-compiler:2.5.0' }
หลังจากย้ายไปใช้ KSP แล้ว ให้ซิงค์และสร้างโปรเจ็กต์เพื่อดูว่ายังทำงานได้อย่างถูกต้องหรือไม่
ปัญหาที่พบได้ทั่วไปซึ่งควรระวังมีดังนี้
- ไลบรารีบางรายการไม่รองรับชุดฟีเจอร์เดียวกันทุกประการกับ kapt และ KSP หากโค้ดใช้งานไม่ได้หลังจากย้ายข้อมูล โปรดดูเอกสารประกอบของไลบรารี
- KSP มีข้อมูลประเภท Kotlin ที่แม่นยำกว่า kapt (เช่น เกี่ยวกับความสามารถในการเป็นค่า Null) ซึ่งหมายความว่าโปรเซสเซอร์ KSP สามารถระบุข้อกำหนดประเภทได้แม่นยำยิ่งขึ้น ซึ่งอาจต้องมีการแก้ไขซอร์สโค้ดด้วย นอกเหนือจากการอัปเดตไฟล์บิลด์
- หากก่อนหน้านี้คุณส่งอาร์กิวเมนต์ไปยังโปรเซสเซอร์สำหรับคำอธิบายประกอบ คุณอาจต้องส่งอาร์กิวเมนต์เหล่านั้นไปยัง KSP ในตอนนี้ โปรดทราบว่ารูปแบบของอาร์กิวเมนต์อาจแตกต่างกันระหว่าง kapt และ KSP ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของ KSP และเอกสารประกอบของไลบรารีที่คุณใช้
นำปลั๊กอิน kapt ออก
เมื่อไม่มีทรัพยากร Dependency ที่รวมอยู่กับ kapt ในโมดูลอีกต่อไป ให้นำปลั๊กอิน kapt ออก
หากมีการประกาศในบล็อกปลั๊กอิน ให้ทำดังนี้
Kotlin
plugins {id("org.jetbrains.kotlin.kapt")}
ดึงดูด
plugins {id 'org.jetbrains.kotlin.kapt'}
หากใช้ไวยากรณ์ apply plugin โดยใช้ Groovy ให้ทำดังนี้
apply plugin: 'kotlin-kapt'
นอกจากนี้ คุณควรนำการกำหนดค่าที่เหลือซึ่งเกี่ยวข้องกับ kapt ออกด้วย เช่น
Kotlin
kapt { correctErrorTypes = true useBuildCache = true }
ดึงดูด
kapt { correctErrorTypes true useBuildCache true }