หน้านี้มีคำแนะนำโดยละเอียดเกี่ยวกับวิธีเพิ่มและกำหนดค่าคำอธิบายประกอบ เป็นทรัพยากร Dependency ของโปรเจ็กต์ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตัวประมวลผลคำอธิบายประกอบ ดูรายการใน กำหนดค่าทรัพยากร Dependency
หากคุณเพิ่มตัวประมวลผลคำอธิบายประกอบลงในคลาสพาธการคอมไพล์ คุณจะเห็น ข้อความแสดงข้อผิดพลาดที่คล้ายกับข้อความต่อไปนี้
Error: Annotation processors must be explicitly declared now.
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้เพิ่มตัวประมวลผลคำอธิบายประกอบลงในโปรเจ็กต์โดยการกำหนดค่า
ทรัพยากร Dependency ของคุณโดยใช้ annotationProcessor
ดังที่แสดงด้านล่าง
Kotlin
dependencies { // Adds libraries defining annotations to only the compile classpath. compileOnly("com.google.dagger:dagger:version-number") // Adds the annotation processor dependency to the annotation processor classpath. annotationProcessor("com.google.dagger:dagger-compiler:version-number") }
ดึงดูด
dependencies { // Adds libraries defining annotations to only the compile classpath. compileOnly 'com.google.dagger:dagger:version-number' // Adds the annotation processor dependency to the annotation processor classpath. annotationProcessor 'com.google.dagger:dagger-compiler:version-number' }
หมายเหตุ: ไม่มีปลั๊กอิน Android สำหรับ Gradle 3.0.0 ขึ้นไป
สนับสนุน
ปลั๊กอิน android-apt
ส่งอาร์กิวเมนต์ไปยังตัวประมวลผลคำอธิบายประกอบ
หากคุณจำเป็นต้องส่งอาร์กิวเมนต์ไปยังตัวประมวลผลคำอธิบายประกอบ คุณสามารถทำได้โดยใช้
AnnotationProcessorOptions
ในการกำหนดค่าบิลด์ของโมดูล เช่น ถ้าต้องการส่งผ่าน
ประเภทข้อมูลพื้นฐานเป็นคู่คีย์-ค่า
คุณสามารถใช้พร็อพเพอร์ตี้ argument
ดังที่แสดงด้านล่าง
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf("key1" to "value1", "key2" to "value2") } } } }
ดึงดูด
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument 'key1', 'value1' argument 'key2', 'value2' } } } }
อย่างไรก็ตาม เมื่อใช้ปลั๊กอิน Android Gradle 3.2.0 ขึ้นไป คุณจะต้องทำดังนี้
ส่งอาร์กิวเมนต์ตัวประมวลผลที่แสดงไฟล์หรือไดเรกทอรีโดยใช้ Gradle
CommandLineArgumentProvider
การใช้ CommandLineArgumentProvider
ช่วยให้คุณหรือ
ผู้เขียนประมวลผลคำอธิบายประกอบ เพื่อปรับปรุงความถูกต้องและประสิทธิภาพของ
ล้างบิลด์ที่เพิ่มขึ้นและแคชโดยใช้ประเภทพร็อพเพอร์ตี้ของบิลด์ที่เพิ่มขึ้น
คำอธิบายประกอบ
กับอาร์กิวเมนต์
ตัวอย่างเช่น คลาสด้านล่างใช้ CommandLineArgumentProvider
และ
จะอธิบายแต่ละอาร์กิวเมนต์สำหรับตัวประมวลผล
Kotlin
class MyArgsProvider( // Annotates each directory as either an input or output for the // annotation processor. @get:InputFiles // Using this annotation helps Gradle determine which part of the file path // should be considered during up-to-date checks. @get:PathSensitive(PathSensitivity.RELATIVE) val inputDir: FileCollection, @get:OutputDirectory val outputDir: File ) : CommandLineArgumentProvider { // Specifies each directory as a command line argument for the processor. // The Android plugin uses this method to pass the arguments to the // annotation processor. override fun asArguments(): Iterable<String> { // Use the form '-Akey[=value]' to pass your options to the Java compiler. return listOf("-AinputDir=${inputDir.singleFile.absolutePath}", "-AoutputDir=${outputDir.absolutePath}") } } android {...}
ดึงดูด
class MyArgsProvider implements CommandLineArgumentProvider { // Annotates each directory as either an input or output for the // annotation processor. @InputFiles // Using this annotation helps Gradle determine which part of the file path // should be considered during up-to-date checks. @PathSensitive(PathSensitivity.RELATIVE) FileCollection inputDir @OutputDirectory File outputDir // The class constructor sets the paths for the input and output directories. MyArgsProvider(FileCollection input, File output) { inputDir = input outputDir = output } // Specifies each directory as a command line argument for the processor. // The Android plugin uses this method to pass the arguments to the // annotation processor. @Override Iterable<String> asArguments() { // Use the form '-Akey[=value]' to pass your options to the Java compiler. ["-AinputDir=${inputDir.singleFile.absolutePath}", "-AoutputDir=${outputDir.absolutePath}"] } } android {...}
หลังจากกำหนดคลาสที่ใช้งาน CommandLineArgumentProvider
แล้ว คุณจะต้อง
เพื่อสร้างอินสแตนซ์และส่งไปยังปลั๊กอิน Android โดยใช้
annotationProcessorOptions.compilerArgumentProvider
ตามที่แสดงด้านล่าง
Kotlin
// This is in your module's build.gradle file. android { defaultConfig { javaCompileOptions { annotationProcessorOptions { // Creates a new MyArgsProvider object, specifies the input and // output paths for the constructor, and passes the object // to the Android plugin. compilerArgumentProvider(MyArgsProvider(files("input/path"), file("output/path"))) } } } }
ดึงดูด
// This is in your module's build.gradle file. android { defaultConfig { javaCompileOptions { annotationProcessorOptions { // Creates a new MyArgsProvider object, specifies the input and // output paths for the constructor, and passes the object // to the Android plugin. compilerArgumentProvider new MyArgsProvider(files("input/path"), new File("output/path")) } } } }
หากต้องการดูข้อมูลเพิ่มเติมว่าการใช้งาน CommandLineArgumentProvider
มีประโยชน์อย่างไร
ปรับปรุงประสิทธิภาพของบิลด์, อ่าน
โปรเจ็กต์การแคช Java
ปิดใช้การตรวจสอบข้อผิดพลาดของตัวประมวลผลคำอธิบายประกอบ
หากคุณมีทรัพยากร Dependency ในคลาสพาธคอมไพล์ที่มีคำอธิบายประกอบ
ที่คุณไม่ต้องการ คุณสามารถปิดใช้งานการตรวจสอบข้อผิดพลาด
ต่อไปนี้ลงในไฟล์ build.gradle.kts
ของคุณ โปรดทราบว่าคำอธิบายประกอบ
ตัวประมวลผลที่คุณเพิ่มลงในคลาสพาธการคอมไพล์จะยังคงไม่เพิ่มลงใน
คลาสพาธของผู้ประมวลผลข้อมูล
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument("includeCompileClasspath", "false") } } } }
ดึงดูด
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } } }
หากใช้ Kotlin และ kapt ให้ทำดังนี้
Kotlin
android { ... defaultConfig { ... kapt { includeCompileClasspath = false } } }
ดึงดูด
android { ... defaultConfig { ... kapt { includeCompileClasspath false } } }
หากคุณพบปัญหาหลังจากย้ายข้อมูลตัวประมวลผลคำอธิบายประกอบของโปรเจ็กต์ไปยัง
คลาสพาธของตัวประมวลผล คุณสามารถอนุญาตตัวประมวลผลคำอธิบายประกอบในคอมไพล์
classpath มีค่าได้ โดยตั้งค่า includeCompileClasspath
เป็น true
แต่การตั้งค่า
ไม่แนะนําให้ใช้พร็อพเพอร์ตี้ true
และระบบจะนำตัวเลือกในการเชื่อมโยงออก
เกี่ยวกับการอัปเดตปลั๊กอิน Android ในอนาคต