Bu sayfa, ek açıklama ekleme ve yapılandırmayla ilgili ayrıntılı yol gösterici bilgiler içerir işleyenleri proje bağımlılıkları olarak ele alacağız. Ek açıklama işlemcileri hakkında daha fazla bilgi için girişi şurada görün: Bağımlılıkları yapılandırın.
Derleme sınıf yolunuza ek açıklama işlemcileri eklerseniz aşağıdakine benzer bir hata mesajı alırsınız:
Error: Annotation processors must be explicitly declared now.
Bu hatayı düzeltmek için aşağıdakileri yapılandırarak ek açıklama işlemcileri eklemeniz gerekir:
aşağıda gösterildiği gibi annotationProcessor
kullanarak bağımlılığınızı gösterir:
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") }
Eski
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+ için Android eklentisi artık kullanılamıyor
desteklenir
android-apt
eklentisi.
Ek açıklama işlemcilerine bağımsız değişkenleri iletme
Bir ek açıklama işlemcisine bağımsız değişkenler aktarmanız gerekirse bunu
AnnotationProcessorOptions
bloğunu kullanabilirsiniz. Örneğin, benzer pozisyonlarda
anahtar/değer çiftleri olarak temel veri türlerini göstermek istiyorsanız argument
özelliğini,
aşağıdaki gibidir:
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf("key1" to "value1", "key2" to "value2") } } } }
Eski
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument 'key1', 'value1' argument 'key2', 'value2' } } } }
Ancak Android Gradle eklentisi 3.2.0 ve sonraki sürümleri kullanıyorsanız
Gradle'ın
CommandLineArgumentProvider
arayüzü.
CommandLineArgumentProvider
kullanmak size veya
doğruluğunu ve performansını iyileştirmek için ek açıklama işlemcisi yazarını
artımlı ve önbelleğe alınmış temiz derlemeler oluşturmak için artımlı derleme özelliği türü
ek açıklamalar
kullanabilirsiniz.
Örneğin, aşağıdaki sınıf CommandLineArgumentProvider
ve
işleyen için her bağımsız değişkene açıklama 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 {...}
Eski
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,
kullanarak bir örnek oluşturup Android eklentisine aktarmak için
annotationProcessorOptions.compilerArgumentProvider
yöntemini çağırın.
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"))) } } } }
Eski
// 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
uygulamasının avantajları hakkında daha fazla bilgi
derleme performansını iyileştirme,
Java projelerini önbelleğe alma.
Ek açıklama işlemci hatası kontrolünü devre dışı bırak
Derleme sınıf yolunda ek açıklama içeren bağımlılıklarınız varsa
işlemcileri yenileriyle devre dışı bırakmak istiyorsanız hata kontrolünü devre dışı bırakmak için
build.gradle.kts
dosyanıza ekleyin. Ek açıklamanın
derleme sınıf yoluna eklediğiniz işlemciler,
işlemci sınıf yolu.
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument("includeCompileClasspath", "false") } } } }
Eski
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } } }
Kotlin ve kapt kullanıyorsanız:
Kotlin
android { ... defaultConfig { ... kapt { includeCompileClasspath = false } } }
Eski
android { ... defaultConfig { ... kapt { includeCompileClasspath false } } }
Projenizin ek açıklama işlemcilerini
işlemci sınıfı yolunu seçmek isterseniz, derleme işleminde ek açıklama işlemcilerine izin verebilirsiniz
sınıf yolunu belirtmek için includeCompileClasspath
öğesini true
olarak ayarlayın. Ancak bunu ayarlamak
özelliğinin true
değerine ayarlanması önerilmez ve bunu yapma seçeneği kaldırılacaktır
yapılacak bir güncellemeden bahsedeceğiz.