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

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

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 ระดับบนสุด คุณดูรายการรุ่นได้ในหน้า 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
}

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