টীকা প্রসেসর যোগ করুন

এই পৃষ্ঠায় প্রকল্প নির্ভরতা হিসাবে টীকা প্রসেসর যোগ এবং কনফিগার করার বিস্তারিত নির্দেশিকা রয়েছে। টীকা প্রসেসর সম্পর্কে আরও জানতে, কনফিগার ডিপেন্ডেন্সিতে এন্ট্রি দেখুন।

আপনি যদি আপনার কম্পাইল ক্লাসপথে টীকা প্রসেসর যোগ করেন, আপনি নিম্নলিখিতগুলির মতো একটি ত্রুটি বার্তা দেখতে পাবেন:

Error: Annotation processors must be explicitly declared now.

এই ত্রুটিটি সমাধান করতে, নীচে দেখানো হিসাবে annotationProcessor ব্যবহার করে আপনার নির্ভরতা কনফিগার করে আপনার প্রকল্পে টীকা প্রসেসর যুক্ত করুন:

কোটলিন

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 প্রপার্টি ব্যবহার করতে পারেন, যেমন নীচে দেখানো হয়েছে:

কোটলিন

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 প্রয়োগ করে এবং প্রসেসরের জন্য প্রতিটি আর্গুমেন্টকে টীকা দেয়।

কোটলিন

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 প্রয়োগ করে এমন একটি ক্লাস সংজ্ঞায়িত করার পরে, আপনাকে একটি উদাহরণ তৈরি করতে হবে এবং নীচে দেখানো হিসাবে annotationProcessorOptions.compilerArgumentProvider পদ্ধতি ব্যবহার করে Android প্লাগইনে পাস করতে হবে।

কোটলিন

// 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.gradle.kts ফাইলে নিম্নলিখিত যোগ করে ত্রুটি পরীক্ষা নিষ্ক্রিয় করতে পারেন। মনে রাখবেন, আপনি কম্পাইল ক্লাসপাথে যে টীকা প্রসেসরগুলি যোগ করেন সেগুলি এখনও প্রসেসর ক্লাসপথে যোগ করা হয়নি।

কোটলিন

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

গ্রোভি

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

আপনি যদি Kotlin এবং kapt ব্যবহার করেন:

কোটলিন

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

গ্রোভি

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

আপনার প্রোজেক্টের টীকা প্রসেসরগুলিকে প্রসেসর ক্লাসপাথে স্থানান্তরিত করার পরে আপনি যদি সমস্যার সম্মুখীন হন, তাহলে আপনি includeCompileClasspathtrue করে কম্পাইল ক্লাসপাথে টীকা প্রসেসরকে অনুমতি দিতে পারেন। যাইহোক, এই সম্পত্তিটিকে true হিসাবে সেট করার সুপারিশ করা হয় না এবং এটি করার বিকল্পটি Android প্লাগইনের ভবিষ্যতের আপডেটে সরানো হবে।