ผสานตัวประมวลผล 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- KSP กับ KAPT: เหตุใด KSP จึงเร็วกว่า
- การเขียน SymbolProcessor แรกของคุณ
- การสร้างซอร์สไฟล์ Kotlin ด้วย KotlinPoet
- ผสานตัวประมวลผล KSP เข้ากับบิลด์ Gradle