Ek açıklama işlemcileri ekleme

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.