Ek açıklama işlemcileri ekleme

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.