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

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

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

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

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

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

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