הוספה של מעבדי הערות

בדף הזה יש הוראות מפורטות להוספה ולהגדרה של הערות מעבדים כיחסי תלות של פרויקטים. למידע נוסף על מעבדי הערות: אפשר לראות את הכניסה להגדיר יחסי תלות.

אם תוסיפו מעבדי הערות לנתיב הכיתה של הידור, תראו הודעת שגיאה שדומה לזו:

Error: Annotation processors must be explicitly declared now.

כדי לפתור את השגיאה, אפשר להוסיף מעבדי הערות לפרויקט על ידי הגדרת את התלות שלך באמצעות 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")
}

מגניב

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'
}

הערה: כבר אי אפשר להיעזר בפלאגין ל-Android ב-Gradle 3.0.0+ תומך ב- הפלאגין android-apt.

העברת ארגומנטים למעבדי הערות

אם תצטרכו להעביר ארגומנטים למעבד הערות, תוכלו לעשות זאת באמצעות AnnotationProcessorOptions בלוק ה-build של המודול. לדוגמה, אם רוצים להעביר בסוגים של נתונים פרימיטיביים בתור צמדי מפתח/ערך, אפשר להשתמש בנכס argument, כפי שמוצג בהמשך:

Kotlin

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments += mapOf("key1" to "value1",
                                   "key2" to "value2")
            }
        }
    }
}

מגניב

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                argument 'key1', 'value1'
                argument 'key2', 'value2'
            }
        }
    }
}

עם זאת, כשמשתמשים בפלאגין Android Gradle מגרסה 3.2.0 ואילך, צריך להעביר ארגומנטים של מעבד מידע שמייצגים קבצים או ספריות באמצעות Gradle CommandLineArgumentProvider.

השימוש ב-CommandLineArgumentProvider מאפשר לך של מעבד הערות כדי לשפר את הנכונות והביצועים של גרסאות build נקיות מצטברות ושמורות במטמון באמצעות החלת סוג נכס build נוסף הערות לכל ארגומנט.

לדוגמה, המחלקה הבאה מטמיעה את CommandLineArgumentProvider ואת מוסיף הערות לכל ארגומנט עבור המעבד.

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 {...}

מגניב

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, צריך כדי ליצור מכונה ולהעביר אותה לפלאגין של Android באמצעות annotationProcessorOptions.compilerArgumentProvider ל-Assistant, כפי שמוצג בהמשך.

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")))
            }
        }
    }
}

מגניב

// 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 עוזרת לשפר את ביצועי ה-build, לקרוא שמירה במטמון של פרויקטים של Java.

השבתת בדיקת השגיאות של מעבד ההערות

אם יש לכם יחסי תלות בנתיב הכיתה שכולל הערה מעבדים שלא נדרשים לכם, תוכלו להשבית את בדיקת השגיאות על ידי הוספת את הבאים לקובץ build.gradle.kts שלכם. חשוב לזכור שההערה מעבדים שאתה מוסיף לנתיב הכיתה של הידור עדיין לא נוספים. נתיב כיתתי של מעבד מידע.

Kotlin

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                argument("includeCompileClasspath", "false")
            }
        }
    }
}

מגניב

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath false
            }
        }
    }
}

אם משתמשים ב-Kotlin וב-kapt:

Kotlin

android {
    ...
    defaultConfig {
        ...
        kapt {
            includeCompileClasspath = false
        }
    }
}

מגניב

android {
    ...
    defaultConfig {
        ...
        kapt {
            includeCompileClasspath false
        }
    }
}

אם נתקלתם בבעיות אחרי העברת מעבדי ההערות בפרויקט אל ב-classpath של המעבד, תוכלו לאפשר למעבדי הערות classpath על ידי הגדרה של includeCompileClasspath ל-true. עם זאת, הגדרה לא מומלץ להשתמש במאפיין true, והאפשרות לעשות זאת תוסר בעדכון עתידי של הפלאגין ל-Android.