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

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

KSP (การประมวลผลสัญลักษณ์ Kotlin) เป็นทางเลือกสำหรับ 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 ระดับบนสุด ตรวจสอบว่าคุณเลือก KSP เวอร์ชันที่สอดคล้องกับเวอร์ชัน Kotlin ของโปรเจ็กต์ คุณดูรายการรุ่นได้ในหน้า GitHub ของ KSP

Kotlin

plugins {
    id("com.google.devtools.ksp") version "2.0.21-1.0.27" apply false
}

Groovy

plugins {
    id 'com.google.devtools.ksp' version '2.0.21-1.0.27' 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 ที่การประกาศการพึ่งพา เนื่องจากมีการรวมเครื่องมือประมวลผลคําอธิบายประกอบและเครื่องมือประมวลผล KSP ไว้ในอาร์ติแฟกต์เดียวกัน

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 จะระบุข้อกําหนดประเภทได้อย่างแม่นยํายิ่งขึ้น ซึ่งอาจต้องมีการแก้ไขซอร์สโค้ดด้วย นอกเหนือจากการอัปเดตไฟล์บิลด์
  • หากก่อนหน้านี้คุณส่งอาร์กิวเมนต์ไปยังโปรแกรมประมวลผลคำอธิบายประกอบ ก็อาจต้องส่งอาร์กิวเมนต์เหล่านั้นไปยัง KSP โปรดทราบว่ารูปแบบของอาร์กิวเมนต์อาจแตกต่างกันระหว่าง kapt กับ KSP ดูข้อมูลเพิ่มเติมในเอกสารประกอบ KSP และเอกสารประกอบของไลบรารีที่คุณใช้

นำปลั๊กอิน kapt ออก

เมื่อไม่มี Dependency ที่รวมอยู่กับ kapt ในโมดูลแล้ว ให้นำปลั๊กอิน kapt ออก

หากประกาศไว้ในบล็อกปลั๊กอิน ให้ทำดังนี้

Kotlin

plugins {
    id("org.jetbrains.kotlin.kapt")
}

Groovy

plugins {
    id 'org.jetbrains.kotlin.kapt'
}

หากใช้ไวยากรณ์ apply plugin โดยใช้ Groovy ให้ทำดังนี้

apply plugin: 'kotlin-kapt'

นอกจากนี้ คุณควรนําการกําหนดค่าที่เหลืออยู่ซึ่งเกี่ยวข้องกับ kapt ออกด้วย เช่น

Kotlin


kapt {
    correctErrorTypes = true
    useBuildCache = true
}

Groovy


kapt {
    correctErrorTypes true
    useBuildCache true
}

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