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