Bu sayfada, ek açıklama işleyicilerinin proje bağımlılıkları olarak nasıl ekleneceği ve yapılandırılacağıyla ilgili ayrıntılı bilgiler yer almaktadır. Ek açıklama işleyiciler hakkında daha fazla bilgi edinmek için Bağımlılıkları yapılandırma başlıklı makaleyi inceleyin.
Derleme sınıf yolunıza ek açıklama işleyicileri eklerseniz aşağıdakine benzer bir hata mesajı görürsünüz:
Error: Annotation processors must be explicitly declared now.
Bu hatayı çözmek için bağımlılığınızı aşağıdaki gibi annotationProcessor
kullanarak yapılandırarak projenize ek açıklama işleyicileri ekleyin:
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' }
Not: Gradle 3.0.0 ve sonraki sürümler için Android eklentisi artık
android-apt
eklentisini desteklemiyor.
Ek açıklama işleyicilerine bağımsız değişkenler aktarma
Bir ek açıklama işleyiciye bağımsız değişken iletmeniz gerekiyorsa bunu modülünüzün derleme yapılandırmasında AnnotationProcessorOptions
bloğunu kullanarak yapabilirsiniz. Örneğin, ilkel veri türlerini anahtar/değer çiftleri olarak iletmek istiyorsanız aşağıdaki gibi argument
mülkünü kullanabilirsiniz:
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf("key1" to "value1", "key2" to "value2") } } } }
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument 'key1', 'value1' argument 'key2', 'value2' } } } }
Ancak Android Gradle eklentisi 3.2.0 ve sonraki sürümleri kullanırken Gradle'in CommandLineArgumentProvider
arayüzünü kullanarak dosyaları veya dizinleri temsil eden işlemci bağımsız değişkenlerini iletmeniz gerekir.
CommandLineArgumentProvider
kullanarak, size veya ek açıklama işleyicinin yazarına her bağımsız değişkene artımlı derleme mülk türü ek açıklamaları uygulayarak artımlı ve önbelleğe alınmış temiz derlemelerin doğruluğunu ve performansını iyileştirme olanağı tanınır.
Örneğin, aşağıdaki sınıf CommandLineArgumentProvider
'ü uygular ve işlemci için her bağımsız değişkeni ekler.
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 {...}
CommandLineArgumentProvider
'ü uygulayan bir sınıf tanımladıktan sonra, aşağıda gösterildiği gibi bir örnek oluşturmanız ve annotationProcessorOptions.compilerArgumentProvider
yöntemini kullanarak Android eklentisine iletmeniz gerekir.
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")) } } } }
CommandLineArgumentProvider
'ü uygulamanın derleme performansını nasıl iyileştirdiği hakkında daha fazla bilgi edinmek için Java projelerini önbelleğe alma başlıklı makaleyi okuyun.
Ek açıklama işleyici hata kontrolünü devre dışı bırakma
Derleme sınıf yolu için ihtiyacınız olmayan ek açıklama işleyicileri içeren bağımlılıkları varsa build.gradle.kts
dosyanıza aşağıdakileri ekleyerek hata kontrolünü devre dışı bırakabilirsiniz. Derleme sınıf yoluna eklediğiniz ek açıklama işleyicilerinin, işleyici sınıf yoluna eklenmediğini unutmayın.
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument("includeCompileClasspath", "false") } } } }
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } } }
Kotlin ve kapt kullanıyorsanız:
Kotlin
android { ... defaultConfig { ... kapt { includeCompileClasspath = false } } }
Groovy
android { ... defaultConfig { ... kapt { includeCompileClasspath false } } }
Projenizin ek açıklama işleyicilerini işlemci sınıf yolu klasörüne taşıdıktan sonra sorun yaşıyorsanız includeCompileClasspath
değerini true
olarak ayarlayarak derleme sınıf yolu klasöründe ek açıklama işleyicilere izin verebilirsiniz. Ancak bu mülkün true
olarak ayarlanması önerilmez ve bu işlemi yapma seçeneği Android eklentisinin gelecekteki bir güncellemesinde kaldırılacaktır.