ย้ายข้อมูลจาก Kapt ไปยัง KSP

Kapt (เครื่องมือประมวลผลคำอธิบายประกอบ Kotlin) ช่วยให้คุณใช้ ตัวประมวลผลคำอธิบายประกอบ Java ที่ใช้โค้ด Kotlin แม้ว่าตัวประมวลผลเหล่านั้นจะไม่มี การรองรับ Kotlin โดยเฉพาะ ซึ่งทำได้โดยสร้างสตับ Java จาก ไฟล์ Kotlin ที่ผู้ประมวลผลข้อมูลอ่านได้ การสร้างต้นขั้วนี้เป็น การดำเนินการที่มีค่าใช้จ่ายสูงและมีผลกระทบอย่างมากต่อความเร็วของการสร้าง

KSP (Kotlin Symbolให้ความช่วยเหลือ) เป็นทางเลือกที่ใช้ Kotlin เป็นหลักแทน Kapt. KSP วิเคราะห์โค้ด Kotlin โดยตรงสูงสุด 2 เท่า เร็วขึ้น และมีความเข้าใจเกี่ยวกับ Kotlin มากกว่า และโครงสร้างภาษาได้

ขณะนี้ Kapt อยู่ในโหมดบำรุงรักษาและเราขอแนะนำให้ย้ายข้อมูลจาก kapt ไปยัง KSP หากเป็นไปได้ ในกรณีส่วนใหญ่ การย้ายข้อมูลนี้ต้องการการเปลี่ยนแปลงเฉพาะ การกำหนดค่าบิลด์ของโปรเจ็กต์

คุณจะเรียกใช้ kapt และ KSP พร้อมกันในโปรเจ็กต์ได้ขณะที่ และสามารถย้ายข้อมูลได้ทีละโมดูล และไลบรารีตามไลบรารี

ภาพรวมของขั้นตอนการย้ายข้อมูลมีดังนี้

  1. ตรวจสอบไลบรารีที่คุณใช้สำหรับการสนับสนุน KSP
  2. เพิ่มปลั๊กอิน KSP ในโปรเจ็กต์
  3. แทนที่ตัวประมวลผลคำอธิบายประกอบด้วย KSP
  4. นำปลั๊กอิน 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
}

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