অ্যান্ড্রয়েড গ্রেডল প্লাগইন পূর্বরূপের জন্য নোট রিলিজ করুন

এই পৃষ্ঠায় অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) এর প্রিভিউ রিলিজের জন্য রিলিজ নোট রয়েছে।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.০ হল AGP-এর একটি নতুন প্রধান সংস্করণ, এবং এটি API এবং আচরণগত পরিবর্তন নিয়ে আসে।

Android Gradle প্লাগইন 9.0.0-alpha11 এ আপডেট করতে, Android Studio Otter 2 Feature Drop | 2025.2.2 এ Android Gradle প্লাগইন আপগ্রেড সহকারী ব্যবহার করুন।

AGP আপগ্রেড সহকারী আপনার প্রকল্প আপগ্রেড করার সময় বিদ্যমান আচরণগুলি সংরক্ষণ করতে সাহায্য করে, যখনই উপযুক্ত হবে, আপনাকে AGP 9.0 ব্যবহারের জন্য আপনার প্রকল্প আপগ্রেড করতে দেয়, এমনকি যদি আপনি AGP 9.0-এর সমস্ত নতুন ডিফল্ট গ্রহণ করতে প্রস্তুত না হন।

সামঞ্জস্য

Android Gradle প্লাগইন 9.0.0-alpha11 সর্বোচ্চ যে Android API লেভেলটি সমর্থন করে তা হল API লেভেল 36।

অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন 9.0.0-alpha11 এর জন্য গ্র্যাডেল 9.0.0 প্রয়োজন।

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ মন্তব্য
গ্রেডল ৯.০.০ ৯.০.০ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস ৩৬.০.০ ৩৬.০.০ SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন
এনডিকে নিষিদ্ধ ২৮.২.১৩৬৭৬৩৫৮ NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন
জেডিকে ১৭ ১৭ আরও জানতে, JDK সংস্করণ সেটিং দেখুন।

android ডিএসএল ক্লাসগুলি এখন কেবল নতুন পাবলিক ইন্টারফেস বাস্তবায়ন করে

গত বেশ কয়েক বছর ধরে, কোন API গুলি পাবলিক হবে তা আরও ভালভাবে নিয়ন্ত্রণ করার জন্য আমরা আমাদের DSL এবং API-এর জন্য নতুন ইন্টারফেস চালু করেছি। AGP সংস্করণ 7.x এবং 8.x এখনও পুরানো DSL প্রকারগুলি ব্যবহার করে (উদাহরণস্বরূপ BaseExtension ) যা নতুন পাবলিক ইন্টারফেসগুলিও বাস্তবায়ন করেছে, যাতে ইন্টারফেসের কাজ এগিয়ে যাওয়ার সাথে সাথে সামঞ্জস্য বজায় রাখা যায়।

AGP 9.0 আমাদের নতুন DSL ইন্টারফেসগুলি একচেটিয়াভাবে ব্যবহার করে, এবং বাস্তবায়নগুলি সম্পূর্ণরূপে লুকানো নতুন ধরণের মধ্যে পরিবর্তিত হয়েছে। এটি পুরানো, অবচিত ভেরিয়েন্ট API-তে অ্যাক্সেসও সরিয়ে দেয়।

AGP 9.0 তে আপডেট করার জন্য, আপনাকে নিম্নলিখিতগুলি করতে হতে পারে:

  • নিশ্চিত করুন যে আপনার প্রকল্পটি বিল্ট-ইন কোটলিনের সাথে সামঞ্জস্যপূর্ণ: org.jetbrains.kotlin.android প্লাগইনটি নতুন DSL এর সাথে সামঞ্জস্যপূর্ণ নয়।
  • KMP-এর জন্য KMP প্রকল্পগুলিকে Android Gradle Library Plugin- এ স্যুইচ করুন: com.android.library এবং com.android.application প্লাগইনগুলির মতো একই Gradle সাবপ্রজেক্টে org.jetbrains.kotlin.multiplatform প্লাগইন ব্যবহার করা নতুন DSL-এর সাথে সামঞ্জস্যপূর্ণ নয়।

  • আপনার বিল্ড ফাইলগুলি আপডেট করুন: ইন্টারফেস পরিবর্তনের উদ্দেশ্য DSL-কে যতটা সম্ভব একই রকম রাখা, তবে কিছু ছোটখাটো পরিবর্তন থাকতে পারে।

  • নতুন DSL এবং API রেফারেন্স করার জন্য আপনার কাস্টম বিল্ড লজিক আপডেট করুন: অভ্যন্তরীণ DSL-এর যেকোনো রেফারেন্সকে পাবলিক DSL ইন্টারফেস দিয়ে প্রতিস্থাপন করুন। বেশিরভাগ ক্ষেত্রে এটি এক-একটি প্রতিস্থাপন হবে। applicationVariants এবং অনুরূপ API-এর যেকোনো ব্যবহারকে নতুন androidComponents API দিয়ে প্রতিস্থাপন করুন। এটি আরও জটিল হতে পারে, কারণ androidComponents API প্লাগইনগুলিকে দীর্ঘ সময় ধরে সামঞ্জস্যপূর্ণ রাখার জন্য আরও স্থিতিশীল হওয়ার জন্য ডিজাইন করা হয়েছে। উদাহরণের জন্য আমাদের Gradle রেসিপিগুলি দেখুন।

  • তৃতীয় পক্ষের প্লাগইন আপডেট করুন: কিছু তৃতীয় পক্ষের প্লাগইন এখনও ইন্টারফেস বা API-এর উপর নির্ভর করতে পারে যা আর উন্মুক্ত নয়। AGP 9.0 এর সাথে সামঞ্জস্যপূর্ণ প্লাগইনগুলির সংস্করণগুলিতে স্থানান্তর করুন।

নতুন DSL ইন্টারফেসে স্যুইচ করার ফলে বিভিন্ন অবচিত API ব্যবহার করে প্লাগইন এবং গ্রেডল বিল্ড স্ক্রিপ্টগুলি আটকানো হয়, যার মধ্যে রয়েছে:

android ব্লকে অপ্রচলিত API ফাংশন প্রতিস্থাপন
applicationVariants ,
libraryVariants ,
testVariants , এবং
unitTestVariants
AGP-তে নতুন কার্যকারিতা যোগ করার জন্য প্লাগইনগুলির জন্য এক্সটেনশন পয়েন্ট। এটিকে androidComponents.onVariants API দিয়ে প্রতিস্থাপন করুন, উদাহরণস্বরূপ:
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
পূর্ববর্তী সকল API-এর জন্য সরাসরি প্রতিস্থাপন নাও থাকতে পারে। যদি এমন কোনও ব্যবহারের ঘটনা থাকে যা নতুন ভেরিয়েন্ট API-এর আওতাভুক্ত না হয়, তাহলে একটি সমস্যা দায়ের করুন
variantFilter নির্বাচিত ভেরিয়েন্টগুলি নিষ্ক্রিয় করার অনুমতি দেয়। এটিকে androidComponents.beforeVariants API দিয়ে প্রতিস্থাপন করুন, উদাহরণস্বরূপ:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider এবং
testServer
অ্যান্ড্রয়েড ডিভাইস এবং এমুলেটরগুলির বিরুদ্ধে পরীক্ষা চালানোর জন্য কাস্টম পরীক্ষার পরিবেশের নিবন্ধন। গ্রেডল-পরিচালিত ডিভাইসগুলিতে স্যুইচ করুন।
sdkDirectory ,
ndkDirectory ,
bootClasspath ,
adbExecutable , এবং
adbExe
কাস্টম কাজের জন্য Android SDK-এর বিভিন্ন উপাদান ব্যবহার করা। androidComponents.sdkComponents এ স্যুইচ করুন।
registerArtifactType ,
registerBuildTypeSourceProvider ,
registerProductFlavorSourceProvider ,
registerJavaArtifact ,
registerMultiFlavorSourceProvider , এবং
wrapJavaSourceSet
অপ্রচলিত কার্যকারিতা বেশিরভাগই অ্যান্ড্রয়েড স্টুডিওতে জেনারেট করা উৎসগুলি পরিচালনার সাথে সম্পর্কিত, যা AGP 7.2.0-এ কাজ করা বন্ধ করে দিয়েছে। এই API গুলির জন্য সরাসরি কোনও প্রতিস্থাপন নেই।

যদি আপনি AGP 9.0 তে আপডেট করেন এবং নিম্নলিখিত ত্রুটি বার্তাটি দেখেন, তাহলে এর অর্থ হল আপনার প্রকল্পটি এখনও কিছু পুরানো ধরণের উল্লেখ করছে:

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

যদি আপনি অসঙ্গত থার্ড-পার্টি প্লাগইন দ্বারা ব্লক হয়ে যান, তাহলে আপনি অপ্ট আউট করতে পারেন এবং DSL এর জন্য পুরানো বাস্তবায়নগুলি, সেইসাথে পুরানো ভেরিয়েন্ট API ফিরিয়ে আনতে পারেন। এটি করার সময়, নতুন ইন্টারফেসগুলিও উপলব্ধ থাকে এবং আপনি এখনও আপনার নিজস্ব বিল্ড লজিক নতুন API তে আপডেট করতে পারেন। অপ্ট আউট করতে, আপনার gradle.properties ফাইলে এই লাইনটি অন্তর্ভুক্ত করুন:

android.newDsl=false

AGP 9.0 তে আপগ্রেড করার আগে আপনি নতুন API গুলিতে আপগ্রেড শুরু করতে পারেন। অনেক AGP সংস্করণের জন্য নতুন ইন্টারফেসগুলি উপস্থিত রয়েছে এবং তাই আপনি নতুন এবং পুরাতন উভয়ের মিশ্রণ পেতে পারেন। AGP API রেফারেন্স ডক্স প্রতিটি AGP সংস্করণের API পৃষ্ঠ এবং প্রতিটি ক্লাস, পদ্ধতি এবং ক্ষেত্র কখন যুক্ত করা হয়েছিল তা দেখায়।

৯.০ আলফা পর্বের সময় আমরা প্লাগইন লেখকদের সাথে যোগাযোগ করছি যাতে তারা নতুন মোডের সাথে সম্পূর্ণ সামঞ্জস্যপূর্ণ প্লাগইনগুলিকে অভিযোজিত এবং প্রকাশ করতে সাহায্য করতে পারে, এবং মাইগ্রেশনের মাধ্যমে আপনাকে গাইড করার জন্য অ্যান্ড্রয়েড স্টুডিওতে AGP আপগ্রেড সহকারীকে উন্নত করবে।

যদি আপনি দেখেন যে নতুন DSL বা Variant API-তে কোনও ক্ষমতা বা বৈশিষ্ট্য নেই, তাহলে যত তাড়াতাড়ি সম্ভব একটি সমস্যা দায়ের করুন।

বিল্ট-ইন কোটলিন

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 বিল্ট-ইন কোটলিন সাপোর্ট চালু করে এবং এটি ডিফল্টভাবে সক্ষম করে। এর অর্থ হল কোটলিন সোর্স ফাইলগুলি কম্পাইল করার জন্য আপনাকে আর আপনার বিল্ড ফাইলগুলিতে org.jetbrains.kotlin.android (অথবা kotlin-android ) প্লাগইন প্রয়োগ করতে হবে না। এটি AGP-এর সাথে কোটলিন ইন্টিগ্রেশনকে সহজ করে, অবচিত API-এর ব্যবহার এড়ায় এবং কিছু ক্ষেত্রে কর্মক্ষমতা উন্নত করে।

অতএব, যখন আপনি আপনার প্রকল্পটি AGP 9.0 তে আপগ্রেড করবেন, তখন আপনাকে বিল্ট-ইন কোটলিনেও মাইগ্রেট করতে হবে অথবা অপ্ট আউট করতে হবে

কোটলিন গ্র্যাডেল প্লাগইন 2.2.10 এর উপর রানটাইম নির্ভরতা

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.০-এর রানটাইম নির্ভরতা কোটলিন গ্রেডল প্লাগইন (কেজিপি) ২.২.১০-এর উপর, যা বিল্ট-ইন কোটলিন সাপোর্টের জন্য প্রয়োজনীয় সর্বনিম্ন সংস্করণ।

এর মানে হল আপনি যদি বিল্ট-ইন কোটলিন বেছে নেন এবং 2.2.10 এর চেয়ে কম KGP সংস্করণ ব্যবহার করেন, তাহলে Gradle স্বয়ংক্রিয়ভাবে KGP সংস্করণটিকে 2.2.10 এ আপগ্রেড করবে।

একইভাবে, যদি আপনি 2.2.10-2.0.2 এর চেয়ে কম KSP সংস্করণ ব্যবহার করেন, তাহলে AGP KGP সংস্করণের সাথে মিল রেখে KSP সংস্করণটিকে 2.2.10-2.0.2 এ আপগ্রেড করবে।

অতএব, যদি আপনি বিল্ট-ইন কোটলিন ব্যবহার বন্ধ করে দেন এবং KGP অথবা KSP এর পুরোনো সংস্করণ ব্যবহার করতে চান, তাহলে আপনার টপ-লেভেল বিল্ড ফাইলে নিম্নলিখিতগুলি যোগ করতে হবে:

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("KGP_VERSION") }
        }
        classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

পরীক্ষার ফিক্সচারের জন্য IDE সমর্থন

AGP 9.0 পরীক্ষার ফিক্সচারের জন্য সম্পূর্ণ Android Studio IDE সমর্থন প্রদান করে। এই সমর্থন পেতে, AGP 9.0.0-alpha07 বা উচ্চতর ব্যবহার করুন।

আচরণগত পরিবর্তন

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0-এ নিম্নলিখিত নতুন আচরণ রয়েছে:

আচরণ সুপারিশ
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.০ ডিফল্টরূপে NDK সংস্করণ r28c ব্যবহার করে। আপনি যে NDK সংস্করণটি স্পষ্টভাবে ব্যবহার করতে চান তা নির্দিষ্ট করার কথা বিবেচনা করুন।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.০ ডিফল্টরূপে লাইব্রেরির গ্রাহকদের একই বা উচ্চতর কম্পাইল SDK সংস্করণ ব্যবহার করতে হবে। লাইব্রেরি ব্যবহার করার সময় একই বা উচ্চতর কম্পাইল SDK ব্যবহার করুন। যদি এটি সম্ভব না হয়, অথবা আপনি যে লাইব্রেরি প্রকাশ করেন তার গ্রাহকদের স্যুইচ করার জন্য আরও সময় দিতে চান, তাহলে AarMetadata.minCompileSdk স্পষ্টভাবে সেট করুন।

AGP 9.0-এ নিম্নলিখিত Gradle প্রোপার্টিগুলির ডিফল্ট আপডেট অন্তর্ভুক্ত রয়েছে। এটি আপনাকে আপগ্রেড করার সময় AGP 8.13 আচরণ সংরক্ষণ করার বিকল্প দেয়:

সম্পত্তি ফাংশন AGP 8.13 থেকে AGP 9.0 তে পরিবর্তন করুন সুপারিশ
android.newDsl android ব্লকের লিগ্যাসি বাস্তবায়নগুলি প্রকাশ না করেই নতুন DSL ইন্টারফেসগুলি ব্যবহার করুন।
এর অর্থ হল, android.applicationVariants এর মতো লিগ্যাসি ভেরিয়েন্ট API আর অ্যাক্সেসযোগ্য নয়।
falsetrue আপনি android.newDsl=false সেট করে অপ্ট আউট করতে পারেন।
আপনার প্রকল্পের ব্যবহৃত সমস্ত প্লাগইন এবং বিল্ড লজিক সামঞ্জস্যপূর্ণ হয়ে গেলে, অপ্ট আউটটি সরিয়ে ফেলুন।
android.builtInKotlin বিল্ট-ইন কোটলিন সক্ষম করে falsetrue সম্ভব হলে বিল্ট-ইন কোটলিনে মাইগ্রেট করুন অথবা অপ্ট আউট করুন
android.uniquePackageNames প্রতিটি লাইব্রেরির একটি স্বতন্ত্র প্যাকেজ নাম থাকা বাধ্য করে। falsetrue আপনার প্রকল্পের মধ্যে সমস্ত লাইব্রেরির জন্য অনন্য প্যাকেজ নাম নির্দিষ্ট করুন। যদি তা সম্ভব না হয়, তাহলে আপনি মাইগ্রেট করার সময় এই পতাকাটি অক্ষম করতে পারেন।
android.dependency.useConstraints কনফিগারেশনের মধ্যে নির্ভরতা সীমাবদ্ধতার ব্যবহার নিয়ন্ত্রণ করে।
AGP 9.0-এর ডিফল্ট মান false যা শুধুমাত্র অ্যাপ্লিকেশন ডিভাইস পরীক্ষায় (AndroidTest) সীমাবদ্ধতা ব্যবহার করে। এটিকে true হিসেবে সেট করলে 8.13 আচরণে ফিরে যাবে।
truefalse আপনার প্রয়োজন না হলে সব জায়গায় নির্ভরতা সীমাবদ্ধতা ব্যবহার করবেন না। এই ফ্ল্যাগের নতুন ডিফল্ট গ্রহণ করলে প্রকল্প আমদানি প্রক্রিয়ায় অপ্টিমাইজেশনও সক্ষম হয় যা অনেক অ্যান্ড্রয়েড লাইব্রেরি সাবপ্রজেক্ট সহ বিল্ডের জন্য আমদানির সময় কমিয়ে দেবে।
aandroid.enableAppCompileTimeRClass অ্যাপ্লিকেশনগুলিতে কোড কম্পাইল করুন একটি নন-ফাইনাল R ক্লাসের বিপরীতে, অ্যাপ্লিকেশন কম্পাইলেশনকে লাইব্রেরি কম্পাইলেশনের সাথে সামঞ্জস্যপূর্ণ করে।
এটি ক্রমবর্ধমানতা উন্নত করে এবং সম্পদ প্রক্রিয়াকরণ প্রবাহে ভবিষ্যতের কর্মক্ষমতা অপ্টিমাইজেশনের পথ প্রশস্ত করে।
falsetrue অনেক প্রকল্পই নতুন আচরণ গ্রহণ করতে পারে, কোনও উৎস পরিবর্তন ছাড়াই। যদি R ক্লাস ফিল্ডগুলি এমন কোথাও ব্যবহার করা হয় যেখানে একটি ধ্রুবক প্রয়োজন হয়, যেমন সুইচ কেস, তাহলে চেইনড ইফ স্টেটমেন্ট ব্যবহার করার জন্য রিফ্যাক্টর ব্যবহার করা হয়।
android.sdk.defaultTargetSdkToCompileSdkIfUnset অ্যাপ এবং পরীক্ষায় লক্ষ্য SDK সংস্করণের জন্য ডিফল্ট মান হিসেবে কম্পাইল SDK সংস্করণ ব্যবহার করে।
এই পরিবর্তনের আগে, লক্ষ্য SDK সংস্করণটি ডিফল্টভাবে ন্যূনতম SDK সংস্করণে ব্যবহৃত হত।
falsetrue অ্যাপ এবং পরীক্ষার জন্য স্পষ্টভাবে লক্ষ্য SDK সংস্করণটি নির্দিষ্ট করুন।
android.onlyEnableUnitTestForTheTestedBuildType শুধুমাত্র পরীক্ষিত বিল্ড ধরণের জন্য ইউনিট পরীক্ষার উপাদান তৈরি করে।
ডিফল্ট প্রজেক্টে এর ফলে ডিবাগের জন্য একটি একক ইউনিট পরীক্ষা করা হয়, যেখানে পূর্ববর্তী আচরণে ডিবাগ বা রিলিজের জন্য ইউনিট পরীক্ষা চালানো হত।
falsetrue যদি আপনার প্রকল্পের ডিবাগ এবং রিলিজ উভয়ের জন্য পরীক্ষা চালানোর প্রয়োজন না হয়, তাহলে কোনও পরিবর্তনের প্রয়োজন নেই।
android.proguard.failOnMissingFiles AGP DSL-এ উল্লেখিত Keep ফাইলগুলির কোনওটি ডিস্কে না থাকলে বিল্ডটি একটি ত্রুটির সাথে ব্যর্থ হয়। এই পরিবর্তনের আগে ফাইলের নামের টাইপোগ্রাফির ফলে ফাইলগুলি নীরবে উপেক্ষা করা হত। falsetrue যেকোনো অবৈধ প্রোগার্ড ফাইল ঘোষণা মুছে ফেলুন
android.r8.optimizedResourceShrinking ক্লাস এবং অ্যান্ড্রয়েড রিসোর্স একসাথে বিবেচনা করে R8 কে কম অ্যান্ড্রয়েড রিসোর্স রাখার অনুমতি দেয়। falsetrue যদি আপনার প্রকল্পের রাখার নিয়মগুলি ইতিমধ্যেই সম্পূর্ণ হয়ে থাকে, তাহলে কোনও পরিবর্তনের প্রয়োজন নেই।
android.r8.strictFullModeForKeepRules R8 কে একটি ক্লাস রাখার সময় ডিফল্ট কনস্ট্রাক্টরকে পরোক্ষভাবে না রেখে কম রাখার অনুমতি দেয়। অর্থাৎ, -keep class A আর -keep class A { <init>(); }
falsetrue যদি আপনার প্রকল্পের রাখার নিয়মগুলি ইতিমধ্যেই সম্পূর্ণ হয়ে থাকে, তাহলে কোনও পরিবর্তনের প্রয়োজন নেই।

আপনার প্রোজেক্টের keep নিয়মে -keep class A কে -keep class A { <init>(); } দিয়ে প্রতিস্থাপন করুন, যে কোনও ক্ষেত্রে যেখানে আপনার ডিফল্ট কনস্ট্রাক্টর রাখতে হবে।
android.defaults.buildfeatures.resvalues সকল উপপ্রকল্পে resValues ​​সক্ষম করে truefalse শুধুমাত্র যেসব সাবপ্রকল্পের প্রয়োজন, সেইসব প্রকল্পের গ্র্যাডেল বিল্ড ফাইলে নিম্নলিখিতটি সেট করে resValues ​​সক্ষম করুন:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders সকল সাবপ্রজেক্টে শেডার সংকলন সক্ষম করে truefalse শুধুমাত্র সেই সাবপ্রজেক্টগুলিতে শেডার কম্পাইলেশন সক্ষম করুন যেখানে কম্পাইল করার জন্য শেডার রয়েছে, সেই প্রোজেক্টগুলির গ্রেডল বিল্ড ফাইলগুলিতে নিম্নলিখিতটি সেট করে:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed AGP 9.0 তে, getDefaultProguardFile() শুধুমাত্র proguard-android-optimize.txt সাপোর্ট করবে, proguard-android.txt এর পরিবর্তে। এটি dontoptimize ফ্ল্যাগের দুর্ঘটনাজনিত ব্যবহার প্রতিরোধ করার জন্য, যা proguard-android.txt তে অন্তর্ভুক্ত। falsetrue অপ্টিমাইজেশন এড়াতে চাইলে, আপনি proguard-android-optimize.txt ব্যবহার করার পাশাপাশি একটি কাস্টম proguardFile-এ dontoptimize স্পষ্টভাবে উল্লেখ করতে পারেন। সম্ভব হলে এই ফাইল থেকে dontoptimize ফ্ল্যাগটি সরিয়ে ফেলতে ভুলবেন না, কারণ এটি R8 অপ্টিমাইজেশনের সুবিধা হ্রাস করে। যদি না হয়, android.r8.globalOptionsInConsumerRules.disallowed=false সেট করে অপ্ট আউট করুন।
android.r8.globalOptionsInConsumerRules.disallowed AGP 9.0 থেকে, যদি কনজিউমার কিপ ফাইলগুলিতে সমস্যাযুক্ত প্রোগার্ড কনফিগারেশন থাকে তবে অ্যান্ড্রয়েড লাইব্রেরি এবং ফিচার মডিউল প্রকাশনা ব্যর্থ হবে। কনজিউমার কিপ ফাইলগুলিতে dontoptimize বা dontobfuscate এর মতো গ্লোবাল বিকল্প রয়েছে সেগুলি কেবল অ্যাপ্লিকেশন মডিউলগুলিতে ব্যবহার করা উচিত এবং লাইব্রেরি ব্যবহারকারীদের জন্য অপ্টিমাইজেশন সুবিধা হ্রাস করতে পারে। অ্যান্ড্রয়েড অ্যাপ মডিউল সংকলন যদি প্রাক-সংকলিত নির্ভরতা (JAR বা AAR) এ এমবেড করা থাকে তবে নীরবে এই জাতীয় কোনও গ্লোবাল বিকল্প উপেক্ষা করবে। আপনি কখন এটি ঘটে তা দেখতে পারেন configuration.txt (সাধারণত <app_module>/build/outputs/mapping/<build_variant>/configuration.txt এর মতো পাথে) এই ধরনের মন্তব্যের জন্য চেক করে: # REMOVED CONSUMER RULE: dontoptimize falsetrue প্রকাশিত লাইব্রেরিগুলিতে যেকোনো অসঙ্গতিপূর্ণ নিয়ম সরিয়ে ফেলা উচিত। অভ্যন্তরীণ লাইব্রেরিগুলিতে যেকোনো অসঙ্গতিপূর্ণ কিন্তু প্রয়োজনীয় নিয়ম একটি অ্যাপ মডিউলের একটি proguardFile-এ স্থানান্তর করা উচিত। android.r8.globalOptionsInConsumerRules.disallowed=false সেট করে অপ্ট আউট করুন। আপনার সমস্ত কনজিউমার কিপ ফাইল সামঞ্জস্যপূর্ণ হয়ে গেলে, অপ্ট আউটটি সরিয়ে ফেলুন।

সরানো বৈশিষ্ট্যগুলি

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 নিম্নলিখিত কার্যকারিতা সরিয়ে দেয়:

পরিবর্তিত DSL

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0-এ নিম্নলিখিত ব্রেকিং DSL পরিবর্তনগুলি রয়েছে:

  • CommonExtension এর প্যারামিটারাইজেশন সরানো হয়েছে।

    নিজেই, এটি শুধুমাত্র একটি সোর্স-লেভেল ব্রেকিং পরিবর্তন যা ভবিষ্যতে সোর্স-লেভেল ব্রেকিং পরিবর্তন এড়াতে সাহায্য করবে, তবে এর অর্থ হল ব্লক পদ্ধতিগুলিকে CommonExtension থেকে ApplicationExtension , LibraryExension , DynamicFeatureExtension এবং TestExtension এ স্থানান্তর করতে হবে।

    আপনার প্রকল্পটি AGP 9.0 তে আপগ্রেড করার সময়, Gradle প্লাগইন কোডটি রিফ্যাক্টর করুন যা ঐ প্যারামিটারগুলি বা ব্লক পদ্ধতিগুলি ব্যবহার করে। উদাহরণস্বরূপ, নিম্নলিখিত প্লাগইনটি টাইপ প্যারামিটারটি অপসারণ করার জন্য আপডেট করা হয়েছে এবং সরানো ব্লক পদ্ধতিগুলির উপর নির্ভর করে না:

    এজিপি ৮.১৩

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    এজিপি ৯.০

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    যেসব প্লাগইন AGP ভার্সনের একটি পরিসরকে লক্ষ্য করে, তাদের জন্য সরাসরি গেটার ব্যবহার করা 9.0 এর চেয়ে কম AGP ভার্সনের সাথে বাইনারি সামঞ্জস্যপূর্ণ।

ডিএসএল সরানো হয়েছে

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 অপসারণ করে:

সরানো API গুলি

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 অপসারণ করে:

Gradle বৈশিষ্ট্যগুলি সরানো হয়েছে

ডিফল্টরূপে সক্রিয় থাকা বৈশিষ্ট্যগুলিকে বিশ্বব্যাপী অক্ষম করার উপায় হিসেবে প্রাথমিকভাবে নিম্নলিখিত গ্রেডল বৈশিষ্ট্যগুলি যুক্ত করা হয়েছিল।

এই বৈশিষ্ট্যগুলি AGP 8.0 বা তার নিচের সংস্করণ থেকে ডিফল্টরূপে নিষ্ক্রিয় করা হয়েছে। কেবলমাত্র সেই সাব-প্রকল্পগুলিতে এই বৈশিষ্ট্যগুলি সক্ষম করুন যা আরও দক্ষ বিল্ডের জন্য এগুলি ব্যবহার করে।

সম্পত্তি ফাংশন প্রতিস্থাপন
android.defaults.buildfeatures.aidl সকল উপ-প্রকল্পে AIDL সংকলন সক্ষম করে শুধুমাত্র যেসব সাবপ্রকল্পে AIDL সোর্স আছে, সেখানেই AIDL কম্পাইলেশন সক্ষম করুন, সেইসব প্রকল্পের Gradle বিল্ড ফাইলে নিম্নলিখিত বৈশিষ্ট্যগুলি সেট করে:
android {
  buildFeatures {
    aidl = true
  }
}
AIDL উৎস ধারণকারী প্রতিটি উপপ্রকল্পের গ্র্যাডেল বিল্ড ফাইলে
android.defaults.buildfeatures.renderscript সকল সাবপ্রজেক্টে রেন্ডারস্ক্রিপ্ট সংকলন সক্ষম করে শুধুমাত্র সেই সাবপ্রজেক্টগুলিতে যেখানে রেন্ডারস্ক্রিপ্ট সোর্স আছে সেখানে রেন্ডারস্ক্রিপ্ট কম্পাইলেশন সক্ষম করুন, সেই প্রোজেক্টগুলির গ্র্যাডেল বিল্ড ফাইলগুলিতে নিম্নলিখিত বৈশিষ্ট্য সেট করে:
android {
  buildFeatures {
    renderScript = true
  }
}

জোরপূর্বক গ্রেডল বৈশিষ্ট্য

নিম্নলিখিত Gradle বৈশিষ্ট্যগুলি সেট করলে AGP 9.0 একটি ত্রুটি ঠেলে দেয়।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপগ্রেড অ্যাসিস্ট্যান্ট এই বৈশিষ্ট্যগুলি ব্যবহার করে এমন প্রকল্পগুলিকে AGP 9.0 তে আপগ্রেড করবে না।

সম্পত্তি ফাংশন
android.r8.integratedResourceShrinking রিসোর্স সঙ্কুচিতকরণ এখন সর্বদা R8 এর অংশ হিসাবে পরিচালিত হয়, পূর্ববর্তী বাস্তবায়নটি সরানো হয়েছে।

সমস্যা সমাধান করা হয়েছে

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha10

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
extractNativeLibs এবং useEmbeddedDex ম্যানিফেস্ট থেকে আসা উচিত নয়
AGP 9.0.0-alpha09-এ R8 থেকে সতর্কতা
লিন্ট
বিল্ট-ইন কোটলিন META-INF-তে .kotlin_module যোগ করে না।
লিন্ট ক্লাসপথে বিভিন্ন সংস্করণে ডুপ্লিকেট ক্লাস রয়েছে।
ব্যক্তিগত সম্পদের ওভাররাইডিং সমাধান কাজ করছে না (tools:override = "true")

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha09

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
`legacy-kapt` প্লাগইন `kotlin-kapt` এর বিপরীতে টীকা প্রক্রিয়াকরণ এড়িয়ে যায়
compileSdkSpec.minorApiLevel SettingsExtension এর সাথে কাজ করছে না
[fused lib - public] জেনারেটেড ফিউজড লাইব্রেরিতে উৎস অন্তর্ভুক্ত নেই

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha08

সমস্যা সমাধান করা হয়েছে
AGP 9.0.0-alpha08-এ কোনও পাবলিক সমস্যা সমাধান করা হয়নি।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha07

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
কোড জেনারেশনের কাজ থাকলে একটি বিল্ড ব্যর্থ হয়
`android.builtInKotlin=false` এবং `android.newDsl=false` এবং `android.enableLegacyVariantApi=false` এর ক্ষেত্রে, `kotlin-android` প্লাগইন ব্যবহার করা "API 'applicationVariants' অপ্রচলিত" হলে ব্যর্থ হবে।
বিল্ট-ইন কোটলিন যখন kotlin.stdlib.default.dependency=false ব্যবহার করে তখন unversioned kotlin-stdlib সমাধান করতে ব্যর্থ হয়
DexData ফাইলটি বন্ধ না করেই খোলে, পরিষ্কার করা রোধ করে
AndroidSourceDirectorySet-এর AGP 9.0-এ PatternFilterable সম্প্রসারণ বন্ধ করা উচিত।
শুধুমাত্র পরীক্ষার মডিউলগুলিতে টেস্ট ফিক্সচার ত্রুটি
পরীক্ষার ফিক্সচারে কনটেক্সট রিসিভার ব্যবহার করার সময় ভুল ত্রুটি
টেস্টফিক্সচারে কোটলিন কোডের জন্য ভুল IDE ত্রুটি

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha06

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
নতুন অপ্টিমাইজেশন DSL ডিফল্টরূপে configuration.txt তৈরি করে না
AGP 8.13.0 একটি মডিউলে ন্যাভ গ্রাফ যাচাই করতে ব্যর্থ হয়েছে
AGP অবচিত Gradle API ব্যবহার করে: মাল্টি-স্ট্রিং নোটেশন
minSdkVersion >=21 ব্যবহার করে লিগ্যাসি মাল্টিডেক্স লাইব্রেরি ব্যবহার করার চেষ্টা করা ব্যবহারকারীদের সতর্ক করুন
লিন্ট
লিন্ট চেকসএসডিকেআইন্টএটলিস্ট চেক টীকাযুক্ত মানটি সঠিক কিনা তা পরীক্ষা করে না

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha05

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
android.proguard.failOnMissingFiles consumerProguardFiles এর জন্য কাজ করছে না
Kotlin Gradle প্লাগইন নির্ভরতা 2.2.10 এ আপডেট করুন
KGP API ব্যবহার করে KotlinJvmAndroidCompilation তৈরি করুন
পরীক্ষার উৎসগুলিতে Kotlin স্পষ্ট API মোড প্রয়োগ করা হয়েছে
লিন্ট
লিন্ট নিক্ষেপের সতর্কীকরণ "K2 ক্যাশে পরিষ্কার করা যায়নি"

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha04

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
AGP 9.0 তে ডিফল্ট সোর্স/টার্গেট জাভা সংস্করণ জাভা 8 থেকে জাভা 11 তে স্যুইচ করুন
android.useAndroidX ডিফল্টকে true এ উল্টে দিন
বিল্ট-ইন কোটলিন সহ ক্যাপ্ট প্লাগইন প্রয়োগ করার সময় আরও ভালো ব্যতিক্রম।
লিন্ট
লিন্ট নিক্ষেপের সতর্কীকরণ "K2 ক্যাশে পরিষ্কার করা যায়নি"

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha03

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
যখন `isIncludeAndroidResources` সক্রিয় থাকে, তখন `process{Variant}UnitTestManifest` AGP 8.12.0-এ tools:overrideLibrary ব্যবহারগুলিকে মার্জ করতে ব্যর্থ হয়।
JVM পরীক্ষার কাজের জন্য Gradle-এ AGP অবচয় সতর্কতা সৃষ্টি করছে
DependencyReportTask কনফিগারেশন ক্যাশের সাথে বেমানান।
লিন্ট
বাগ: অব্যবহৃত রিসোর্স অপসারণ করলেও তাদের অনুবাদ মুছে যায় না, এবং এটি সম্পর্কে জিজ্ঞাসাও করা হয় না।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha02

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
প্রোগার্ড ফাইল না থাকলে বিল্ড ব্যর্থ হয়
buildconfig ডিফল্ট gradle.properties ফ্ল্যাগগুলি সরান
অ্যাপের targetSdk ডিফল্ট মান minSdk এর পরিবর্তে compileSdk এর উপর ভিত্তি করে পরিবর্তন করুন।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha01

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
AGP 9.0 থেকে অবচিত AndroidSourceSet.jni সরান
AGP 9.0 থেকে Installation.installOptions() সরান
AGP 9.0 থেকে BuildType.isRenderscriptDebuggable সরান।
android.defaults.buildfeatures.renderscript সরান
`com.android.kotlin.multiplatform.library` গ্র্যাডেল পরিচালিত ডিভাইসগুলির সাথে ক্র্যাশ করে
`android.defaults.buildfeatures.aidl` ডিফল্ট gradle.properties ফ্ল্যাগগুলি সরান