इस पेज पर, एनोटेशन जोड़ने और कॉन्फ़िगर करने के तरीके के बारे में ज़्यादा जानकारी दी गई है पर निर्भर करता है. एनोटेशन प्रोसेसर के बारे में ज़्यादा जानने के लिए, इसमें एंट्री देखें डिपेंडेंसी कॉन्फ़िगर करें.
अगर कंपाइल क्लासपाथ में एनोटेशन प्रोसेसर जोड़े जाते हैं, तो आपको गड़बड़ी का मैसेज मिलता है, जो नीचे दिया गया है:
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' }
ध्यान दें: Gradle 3.0.0 के बाद के लिए, Android प्लग इन अब काम नहीं करता
का समर्थन करता है
android-apt
प्लगिन.
एनोटेशन प्रोसेसर को आर्ग्युमेंट पास करें
अगर आपको किसी एनोटेशन प्रोसेसर को आर्ग्युमेंट पास करने हैं, तो
AnnotationProcessorOptions
आपके मॉड्यूल के बिल्ड कॉन्फ़िगरेशन में ब्लॉक होना चाहिए. उदाहरण के लिए, यदि आपको
की-वैल्यू पेयर के तौर पर, प्रिमिटिव डेटा टाइप के लिए, आप 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
का इस्तेमाल करने पर, आपको या
एनोटेशन प्रोसेसर लेखक की मदद से,
इंक्रीमेंटल बिल्ड प्रॉपर्टी टाइप को लागू करके, इंक्रीमेंटल और कैश मेमोरी में सेव किए गए क्लीन बिल्ड
एनोटेशन
कानूनी विरोध सबमिट करें.
उदाहरण के लिए, नीचे दी गई क्लास 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
तरीका, जैसा कि नीचे दिखाया गया है.
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
को लागू करने से कैसे मदद मिलती है, इस बारे में ज़्यादा जानने के लिए
बिल्ड की परफ़ॉर्मेंस को बेहतर बनाएं, पढ़ें
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 } } }
अगर आपको अपने प्रोजेक्ट के एनोटेशन प्रोसेसर को
प्रोसेसर क्लासपाथ का इस्तेमाल करते हैं, तो आप कंपाइलेशन पर एनोटेशन प्रोसेसर को अनुमति दे सकते हैं
क्लासपाथ को includeCompileClasspath
से true
पर सेट करके. हालांकि, अगर
true
को प्रॉपर्टी इस्तेमाल करने का सुझाव नहीं दिया जाता. हालांकि, ऐसा करने का विकल्प हटा दिया जाएगा
करने के लिए डिज़ाइन किया गया है.