Auf dieser Seite finden Sie eine detaillierte Anleitung zum Hinzufügen und Konfigurieren von Anmerkungs-Prozessoren als Projektabhängigkeiten. Weitere Informationen zu Anmerkungs-Prozessoren finden Sie unter Abhängigkeiten konfigurieren.
Wenn Sie Ihrem Compile-Classpath Anmerkungs-Prozessoren hinzufügen, wird eine Fehlermeldung ähnlich der folgenden angezeigt:
Error: Annotation processors must be explicitly declared now.
Um diesen Fehler zu beheben, fügen Sie Ihrem Projekt Anmerkungs-Prozessoren hinzu. Konfigurieren Sie dazu Ihre Abhängigkeit wie unten gezeigt mit annotationProcessor
:
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' }
Hinweis:Das Android-Plug-in für Gradle 3.0.0 und höher unterstützt das
android-apt
-Plug-in nicht mehr.
Argumente an Annotation Processors übergeben
Wenn Sie einem Anmerkungs-Prozessor Argumente übergeben möchten, können Sie dies mithilfe des Blocks AnnotationProcessorOptions
in der Build-Konfiguration Ihres Moduls tun. Wenn Sie beispielsweise primitive Datentypen als Schlüssel/Wert-Paare übergeben möchten, können Sie die Property argument
verwenden, wie unten gezeigt:
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments += mapOf("key1" to "value1", "key2" to "value2") } } } }
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument 'key1', 'value1' argument 'key2', 'value2' } } } }
Wenn Sie jedoch das Android Gradle-Plug-in 3.2.0 oder höher verwenden, müssen Sie Prozessorargumente, die Dateien oder Verzeichnisse darstellen, über die Gradle-Schnittstelle CommandLineArgumentProvider
übergeben.
Mit CommandLineArgumentProvider
können Sie oder der Autor des Anmerkungs-Prozessors die Korrektheit und Leistung von inkrementellen und im Cache gespeicherten sauberen Builds verbessern, indem Sie auf jedes Argument Anmerkungen zum Inkrements-Build-Eigenschaftstyp anwenden.
In der folgenden Klasse wird beispielsweise CommandLineArgumentProvider
implementiert und jedes Argument für den Prozessor mit Anmerkungen versehen.
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 {...}
Nachdem Sie eine Klasse definiert haben, die CommandLineArgumentProvider
implementiert, müssen Sie eine Instanz erstellen und sie wie unten gezeigt mit der Methode annotationProcessorOptions.compilerArgumentProvider
an das Android-Plug-in übergeben.
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")) } } } }
Weitere Informationen dazu, wie Sie mit CommandLineArgumentProvider
die Build-Leistung verbessern, finden Sie unter Java-Projekte im Cache speichern.
Fehlerprüfung des Annotations-Prozessors deaktivieren
Wenn Sie Abhängigkeiten im Compile-Klassenpfad haben, die Annotationsprozessoren enthalten, die Sie nicht benötigen, können Sie die Fehlerprüfung deaktivieren, indem Sie der Datei build.gradle.kts
Folgendes hinzufügen: Beachten Sie, dass die Anmerkungs-Prozessoren, die Sie dem Compile-ClassPath hinzufügen, nicht dem Processor-ClassPath hinzugefügt werden.
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { argument("includeCompileClasspath", "false") } } } }
Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { includeCompileClasspath false } } } }
Wenn Sie Kotlin und kapt verwenden:
Kotlin
android { ... defaultConfig { ... kapt { includeCompileClasspath = false } } }
Groovy
android { ... defaultConfig { ... kapt { includeCompileClasspath false } } }
Wenn nach der Migration der Annotations-Prozessoren Ihres Projekts in den Prozessor-Classpath Probleme auftreten, können Sie Annotations-Prozessoren im Compile-Classpath zulassen, indem Sie includeCompileClasspath
auf true
festlegen. Wir empfehlen jedoch, diese Eigenschaft nicht auf true
festzulegen. Diese Option wird in einem zukünftigen Update des Android-Plug-ins entfernt.