Halaman ini menyertakan panduan mendetail tentang cara menambahkan dan mengonfigurasi pemroses anotasi sebagai dependensi project. Untuk mempelajari pemroses anotasi lebih lanjut, lihat entri di Mengonfigurasi dependensi.
Jika menambahkan pemroses anotasi ke classpath kompilasi, Anda akan melihat pesan error seperti berikut:
Error: Annotation processors must be explicitly declared now.
Untuk mengatasi error ini, tambahkan pemroses anotasi ke project Anda dengan mengonfigurasi
dependensi menggunakan annotationProcessor
seperti di bawah ini:
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") }
Groovy
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' }
Catatan: Plugin Android untuk Gradle 3.0.0 atau yang lebih baru tidak lagi
mendukung
android-apt
plugin.
Meneruskan argumen ke pemroses anotasi
Jika perlu meneruskan argumen ke pemroses anotasi, Anda dapat melakukannya menggunakan blok AnnotationProcessorOptions
dalam konfigurasi build modul. Misalnya, jika ingin meneruskan
jenis data sederhana seperti key-value pair, Anda dapat menggunakan properti argument
,
seperti yang ditunjukkan di bawah:
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf("key1" to "value1", "key2" to "value2") } } } }
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument 'key1', 'value1' argument 'key2', 'value2' } } } }
Namun, saat menggunakan plugin Android Gradle 3.2.0 dan yang lebih tinggi, Anda harus
meneruskan argumen pemroses yang merepresentasikan file atau direktori menggunakan antarmuka
CommandLineArgumentProvider
Gradle.
Penggunaan CommandLineArgumentProvider
memungkinkan Anda atau penulis pemroses anotasi meningkatkan ketepatan dan performa build inkremental dan build bersih yang disimpan dalam cache dengan menerapkan anotasi jenis properti build inkremental ke setiap argumen.
Misalnya, class di bawah mengimplementasikan CommandLineArgumentProvider
dan memberikan anotasi pada setiap argumen untuk pemroses.
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 {...}
Groovy
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 {...}
Setelah menentukan class yang mengimplementasikan CommandLineArgumentProvider
, Anda harus
membuat instance dan meneruskannya ke plugin Android menggunakan metode
annotationProcessorOptions.compilerArgumentProvider
,
seperti ditampilkan di bawah ini.
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"))) } } } }
Groovy
// 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")) } } } }
Untuk mempelajari lebih lanjut cara implementasi CommandLineArgumentProvider
dapat membantu
meningkatkan performa build, baca
Menyimpan data project Java dalam cache.
Menonaktifkan pemeriksaan error pemroses anotasi
Jika memiliki dependensi pada classpath kompilasi yang menyertakan pemroses anotasi yang tidak dibutuhkan, Anda dapat menonaktifkan pemeriksaan error dengan menambahkan hal berikut ini ke file build.gradle.kts
. Perlu diingat bahwa pemroses anotasi
yang Anda tambahkan ke classpath kompilasi tetap tidak ditambahkan ke
classpath pemroses.
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument("includeCompileClasspath", "false") } } } }
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } } }
Jika Anda menggunakan Kotlin dan kapt:
Kotlin
android { ... defaultConfig { ... kapt { includeCompileClasspath = false } } }
Groovy
android { ... defaultConfig { ... kapt { includeCompileClasspath false } } }
Jika mengalami masalah setelah memigrasikan pemroses anotasi project ke
classpath pemroses, Anda dapat mengizinkan pemroses anotasi pada classpath kompilasi
dengan menetapkan includeCompileClasspath
ke true
. Namun, sebaiknya jangan menetapkan properti ini ke true
, dan opsi untuk melakukannya akan dihapus pada update plugin Android mendatang.