0Pricing
Kotlin Academy · บทเรียน

ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle

กำหนดค่า KSP ใน Gradle เพิ่มซอร์สที่สร้างขึ้น และดีบักเอาต์พุตของตัวประมวลผล

ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle เป็นบทเรียน Kotlin Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Kotlin Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

โครงสร้างแบบหลายโมดูล

การตั้งค่า KSP โดยทั่วไปมีอย่างน้อยสองโมดูล: :annotation (ประกอบด้วยคลาสคำอธิบายประกอบของคุณ) และ :processor (ประกอบด้วย SymbolProcessor) โมดูลผู้ใช้จะใช้ปลั๊กอิน KSP และประกาศการอ้างอิง ksp กับ implementation

การใช้ปลั๊กอิน KSP

ในโมดูลผู้ใช้ build.gradle.kts:

plugins {
    kotlin("jvm")  // or android, multiplatform
    id("com.google.devtools.ksp") version "2.0.0-1.0.21"
}

การประกาศการอ้างอิง ksp

ใช้การกำหนดค่า ksp (ไม่ใช่ implementation) เพื่อเพิ่มตัวประมวลผล KSP ตัวประมวลผลจะทำงานเฉพาะขณะสร้างโปรแกรม และจะไม่รวมอยู่ในอาร์ติแฟกต์สุดท้าย:

dependencies {
    implementation(project(":annotation"))
    ksp(project(":processor"))
}

ไดเรกทอรีซอร์สที่สร้างขึ้น

KSP จะเขียนไฟล์ที่สร้างขึ้นไว้ภายใต้ build/generated/ksp/<sourceSet>/kotlin/ ปลั๊กอิน KSP จะเพิ่มไดเรกทอรีเหล่านี้ลงในชุดซอร์ส Kotlin โดยอัตโนมัติ ดังนั้นโค้ดของคุณจึงมองเห็นคลาสที่สร้างขึ้นได้โดยไม่ต้องกำหนดค่าเอง

การส่งตัวเลือกไปยังตัวประมวลผล

ส่งตัวเลือกขณะสร้างจาก Gradle ไปยังตัวประมวลผลผ่าน ksp { arg("key", "value") } อ่านตัวเลือกเหล่านี้ในตัวประมวลผลผ่าน environment.options["key"]:

// build.gradle.kts (consumer)
ksp {
    arg("generateMocks", "true")
    arg("outputPackage", "com.example.generated")
}

การอ่านตัวเลือกในตัวประมวลผล

ในเมธอด SymbolProcessorProvider.create() ให้เข้าถึงตัวเลือกจากสภาพแวดล้อม:

class MyProcessorProvider : SymbolProcessorProvider {
    override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
        val genMocks = environment.options["generateMocks"] == "true"
        return MyProcessor(environment.codeGenerator, environment.logger, genMocks)
    }
}

การสร้างแบบเพิ่มทีละส่วน

KSP จะติดตามการพึ่งพาระหว่างอินพุตกับเอาต์พุต เชื่อมโยงไฟล์ที่สร้างขึ้นแต่ละไฟล์กับสัญลักษณ์ต้นทางเมื่อเรียกใช้ codeGenerator.createNewFile() จากนั้น KSP จะข้ามการประมวลผลซ้ำเมื่อไม่มีอินพุตที่ติดตามรายการใดเปลี่ยนแปลง

val deps = Dependencies(aggregating = false, *symbols.map { it.containingFile!! }.toTypedArray())
codeGenerator.createNewFile(deps, packageName, fileName)

การใช้ KSP กับ Android

สำหรับโปรเจกต์ Android ให้แทนที่ kapt ด้วย ksp ทั้งในการประกาศปลั๊กอินและการอ้างอิง หากต้องการให้ลักษณะการทำงานของตัวประมวลผลแตกต่างกันระหว่างประเภทการสร้าง ให้ใช้การกำหนดค่าที่รองรับแต่ละรูปแบบ เช่น kspDebug หรือ kspRelease

การใช้ KSP กับ Kotlin Multiplatform

ในโปรเจกต์ KMP ให้ใช้ปลั๊กอิน KSP และใช้ add(kotlinCompilation.defaultSourceSetName + "ksp", project(":processor")) หรือรูปแบบย่ออย่าง kspCommonMainMetadata, kspJvmMain เป็นต้น ทั้งนี้ขึ้นอยู่กับเป้าหมายที่ตัวประมวลผลของคุณรองรับ

การดูไฟล์ที่สร้างขึ้น

หลังจากเรียกใช้ ./gradlew build (หรือ kspKotlin / kspDebugKotlin สำหรับ Android) ให้ตรวจสอบ build/generated/ksp/ IntelliJ และ Android Studio จะทำเครื่องหมายโฟลเดอร์เหล่านี้ว่าเป็นซอร์สที่สร้างขึ้น และอนุญาตให้ไปยังการประกาศที่สร้างขึ้นจากจุดที่มีการใช้งาน

การดีบักตัวประมวลผล

เรียกใช้งานของ Gradle พร้อม --debug หรือเพิ่ม jvmArgs("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") ลงในการกำหนดค่า ksp เพื่อเชื่อมต่อดีบักเกอร์ระยะไกลเข้ากับ JVM ที่ประมวลผลคำอธิบายประกอบ

ตรวจสอบความเข้าใจ

การกำหนดค่า Gradle ใดใช้สำหรับเพิ่มตัวประมวลผล KSP ที่ทำงานขณะสร้างโปรแกรม แต่ไม่รวมอยู่ในคลาสพาธขณะทำงาน

ทบทวน: การผสาน KSP เข้ากับการสร้าง Gradle

ประเด็นสำคัญ:

  • ใช้ปลั๊กอิน com.google.devtools.ksp และเพิ่มตัวประมวลผลด้วยการอ้างอิง ksp()
  • ซอร์สที่สร้างขึ้นจะอยู่ใน build/generated/ksp/ และถูกเพิ่มลงในชุดซอร์สโดยอัตโนมัติ
  • ส่งตัวเลือกจาก Gradle ผ่าน ksp { arg() } และอ่านตัวเลือกผ่าน environment.options
  • ใช้ Dependencies ร่วมกับ createNewFile() เพื่อให้การสร้างใหม่แบบเพิ่มทีละส่วนถูกต้อง
  • รองรับ Android (การกำหนดค่าตามรูปแบบ) และ Kotlin Multiplatform

คำถามที่พบบ่อย

บทเรียน “ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Kotlin Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Kotlin Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle”

กำหนดค่า KSP ใน Gradle เพิ่มซอร์สที่สร้างขึ้น และดีบักเอาต์พุตของตัวประมวลผล คุณปฏิบัติ Kotlin Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Kotlin Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Kotlin Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Kotlin Academy นี้ได้ไหม

ได้ บทเรียน Kotlin Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. KSP กับ KAPT: เหตุใด KSP จึงเร็วกว่า
  2. การเขียน SymbolProcessor แรกของคุณ
  3. การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet
  4. ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle
← กลับไปที่ Kotlin Academy