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