এই পৃষ্ঠায় অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) এর প্রিভিউ রিলিজের জন্য রিলিজ নোট রয়েছে।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.০ হল AGP-এর একটি নতুন প্রধান সংস্করণ, এবং এটি API এবং আচরণগত পরিবর্তন নিয়ে আসে।
Android Gradle plugin 9.0.0-beta03 এ আপডেট করতে, Android Studio Otter 3 Feature Drop | 2025.2.3 এ Android Gradle plugin Upgrade Assistant ব্যবহার করুন।
AGP আপগ্রেড সহকারী আপনার প্রকল্প আপগ্রেড করার সময় বিদ্যমান আচরণগুলি সংরক্ষণ করতে সাহায্য করে, যখনই উপযুক্ত হবে, আপনাকে AGP 9.0 ব্যবহারের জন্য আপনার প্রকল্প আপগ্রেড করতে দেয়, এমনকি যদি আপনি AGP 9.0-এর সমস্ত নতুন ডিফল্ট গ্রহণ করতে প্রস্তুত না হন।
সামঞ্জস্য
Android Gradle প্লাগইন 9.0.0-beta03 সর্বোচ্চ যে Android API লেভেলটি সমর্থন করে তা হল API লেভেল 36।
অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন 9.0.0-beta03 এর জন্য গ্র্যাডেল 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-এর যেকোনো ব্যবহারকে নতুনandroidComponentsAPI দিয়ে প্রতিস্থাপন করুন। এটি আরও জটিল হতে পারে, কারণandroidComponentsAPI প্লাগইনগুলিকে দীর্ঘ সময় ধরে সামঞ্জস্যপূর্ণ রাখার জন্য আরও স্থিতিশীল হওয়ার জন্য ডিজাইন করা হয়েছে। উদাহরণের জন্য আমাদের 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) } } |
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 গুলির জন্য সরাসরি কোনও প্রতিস্থাপন নেই। |
dexOptions | dx টুলের সাথে সম্পর্কিত অপ্রচলিত সেটিংস, যা d8 দ্বারা প্রতিস্থাপিত হয়েছে। Android Gradle প্লাগইন 7.0 এর পর থেকে কোনও সেটিংসের কোনও প্রভাব পড়েনি। | সরাসরি কোনও প্রতিস্থাপন নেই। |
generatePureSplits | তাৎক্ষণিক অ্যাপের জন্য কনফিগারেশন স্প্লিট তৈরি করুন। | কনফিগারেশন স্প্লিট পাঠানোর ক্ষমতা এখন অ্যান্ড্রয়েড অ্যাপ বান্ডেলগুলিতে অন্তর্নির্মিত। |
aidlPackagedList | এই লাইব্রেরির উপর নির্ভরশীল লাইব্রেরি এবং অ্যাপগুলির জন্য API হিসাবে প্রকাশ করার জন্য AIDL ফাইলগুলিকে AAR-তে প্যাকেজ করতে হবে। | এটি এখনও LibraryExtension প্রকাশিত হয় কিন্তু অন্যান্য এক্সটেনশন প্রকারগুলিতে নয়। |
যদি আপনি 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-তে কোনও ক্ষমতা বা বৈশিষ্ট্য নেই, তাহলে যত তাড়াতাড়ি সম্ভব একটি সমস্যা দায়ের করুন।
বিল্ট-ইন কোটলিন
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.০ বিল্ট-ইন কোটলিন সাপোর্ট চালু করে এবং ডিফল্টভাবে এটি সক্ষম করে। এর অর্থ হল কোটলিন সোর্স ফাইলগুলি কম্পাইল করার জন্য আপনাকে আর আপনার বিল্ড ফাইলগুলিতে org.jetbrains.kotlin.android (অথবা kotlin-android ) প্লাগইন প্রয়োগ করতে হবে না। এটি AGP-এর সাথে কোটলিন ইন্টিগ্রেশনকে সহজ করে, অবচিত API-এর ব্যবহার এড়ায় এবং কিছু ক্ষেত্রে কর্মক্ষমতা উন্নত করে।
অতএব, যখন আপনি আপনার প্রকল্পটি AGP 9.0 তে আপগ্রেড করবেন, তখন আপনাকে বিল্ট-ইন কোটলিনেও মাইগ্রেট করতে হবে অথবা অপ্ট আউট করতে হবে ।
আপনি কোটলিন সোর্স নেই এমন গ্রেডল সাবপ্রজেক্টের জন্য বিল্ট-ইন কোটলিন সাপোর্ট বেছে বেছে অক্ষম করতে পারেন।
কোটলিন গ্র্যাডেল প্লাগইনের উপর রানটাইম নির্ভরতা
বিল্ট-ইন কোটলিন সাপোর্ট প্রদানের জন্য, অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 এখন কোটলিন গ্রেডল প্লাগইন (KGP) 2.2.10 এর উপর রানটাইম নির্ভরতা প্রদান করে। এর অর্থ হল আপনাকে আর KGP সংস্করণ ঘোষণা করতে হবে না এবং যদি আপনি 2.2.10 এর চেয়ে কম KGP সংস্করণ ব্যবহার করেন, তাহলে Gradle স্বয়ংক্রিয়ভাবে আপনার KGP সংস্করণটি 2.2.10 এ আপগ্রেড করবে। একইভাবে, যদি আপনি 2.2.10-2.0.2 এর চেয়ে কম KSP সংস্করণ ব্যবহার করেন, তাহলে AGP এটিকে KGP সংস্করণের সাথে মেলে 2.2.10-2.0.2 এ আপগ্রেড করবে।
একটি উচ্চতর KGP সংস্করণে আপগ্রেড করুন
KGP অথবা KSP এর উচ্চতর সংস্করণ ব্যবহার করতে, আপনার শীর্ষ-স্তরের বিল্ড ফাইলে নিম্নলিখিতগুলি যোগ করুন:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
একটি নিম্নতর KGP সংস্করণে ডাউনগ্রেড করুন
আপনি যদি বিল্ট-ইন কোটলিন ব্যবহার বন্ধ করে থাকেন তবেই কেবল KGP সংস্করণটি ডাউনগ্রেড করতে পারবেন। কারণ AGP 9.0 ডিফল্টরূপে বিল্ট-ইন কোটলিন সক্ষম করে এবং বিল্ট-ইন কোটলিনের জন্য KGP 2.2.10 বা তার বেশি সংস্করণ প্রয়োজন।
KGP অথবা KSP এর নিম্ন সংস্করণ ব্যবহার করতে, আপনার শীর্ষ-স্তরের বিল্ড ফাইলে একটি কঠোর সংস্করণ ঘোষণা ব্যবহার করে সেই সংস্করণটি ঘোষণা করুন:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
// For KSP
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
মনে রাখবেন যে আপনি সর্বনিম্ন KGP সংস্করণটি 2.0.0 এ ডাউনগ্রেড করতে পারবেন।
পরীক্ষার ফিক্সচারের জন্য IDE সমর্থন
AGP 9.0 পরীক্ষার ফিক্সচারের জন্য সম্পূর্ণ অ্যান্ড্রয়েড স্টুডিও IDE সমর্থন নিয়ে আসে।
আচরণগত পরিবর্তন
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 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 আর অ্যাক্সেসযোগ্য নয়। | false → true | আপনি android.newDsl=false সেট করে অপ্ট আউট করতে পারেন।আপনার প্রকল্পের ব্যবহৃত সমস্ত প্লাগইন এবং বিল্ড লজিক সামঞ্জস্যপূর্ণ হয়ে গেলে, অপ্ট আউটটি সরিয়ে ফেলুন। |
android. builtInKotlin | বিল্ট-ইন কোটলিন সক্ষম করে | false → true | সম্ভব হলে বিল্ট-ইন কোটলিনে মাইগ্রেট করুন অথবা অপ্ট আউট করুন । |
android. uniquePackage Names | প্রতিটি লাইব্রেরির একটি স্বতন্ত্র প্যাকেজ নাম থাকা বাধ্য করে। | false → true | আপনার প্রকল্পের মধ্যে সমস্ত লাইব্রেরির জন্য অনন্য প্যাকেজ নাম নির্দিষ্ট করুন। যদি তা সম্ভব না হয়, তাহলে আপনি মাইগ্রেট করার সময় এই পতাকাটি অক্ষম করতে পারেন। |
android. useAndroidx | ডিফল্টরূপে androidx নির্ভরতা ব্যবহার করুন। | false → true | androidx নির্ভরতা গ্রহণ করুন। |
android. default. androidx. test. runner | ডিফল্টরূপে androidx.test.runner.AndroidJUnitRunner ক্লাস দিয়ে ডিভাইসে পরীক্ষা চালান, এর জন্য অবচিত InstrumentationTestRunner এর ডিফল্ট প্রতিস্থাপন করুন android {
defaultConfig {
testInstrumentationRunner = "..."
}
} | false → true | AndroidJUnitRunner গ্রহণ করুন, অথবা আপনার কাস্টম testInstrumentationRunner স্পষ্টভাবে উল্লেখ করুন। |
android. dependency. useConstraints | কনফিগারেশনের মধ্যে নির্ভরতা সীমাবদ্ধতার ব্যবহার নিয়ন্ত্রণ করে। AGP 9.0-এর ডিফল্ট মান false যা শুধুমাত্র অ্যাপ্লিকেশন ডিভাইস পরীক্ষায় (AndroidTest) সীমাবদ্ধতা ব্যবহার করে। এটিকে true হিসেবে সেট করলে 8.13 আচরণে ফিরে যাবে। | true → false | আপনার প্রয়োজন না হলে সব জায়গায় নির্ভরতা সীমাবদ্ধতা ব্যবহার করবেন না। এই ফ্ল্যাগের নতুন ডিফল্ট গ্রহণ করলে প্রকল্প আমদানি প্রক্রিয়ায় অপ্টিমাইজেশনও সক্ষম হয় যা অনেক অ্যান্ড্রয়েড লাইব্রেরি সাবপ্রজেক্ট সহ বিল্ডের জন্য আমদানির সময় কমিয়ে দেবে। |
android. enableApp CompileTime RClass | অ্যাপ্লিকেশনগুলিতে কোড কম্পাইল করুন একটি নন-ফাইনাল R ক্লাসের বিপরীতে, অ্যাপ্লিকেশন কম্পাইলেশনকে লাইব্রেরি কম্পাইলেশনের সাথে সামঞ্জস্যপূর্ণ করে। এটি ক্রমবর্ধমানতা উন্নত করে এবং সম্পদ প্রক্রিয়াকরণ প্রবাহে ভবিষ্যতের কর্মক্ষমতা অপ্টিমাইজেশনের পথ প্রশস্ত করে। | false → true | অনেক প্রকল্পই নতুন আচরণ গ্রহণ করতে পারে, কোনও উৎস পরিবর্তন ছাড়াই। যদি R ক্লাস ফিল্ডগুলি এমন কোথাও ব্যবহার করা হয় যেখানে একটি ধ্রুবক প্রয়োজন হয়, যেমন সুইচ কেস, তাহলে চেইনড ইফ স্টেটমেন্ট ব্যবহার করার জন্য রিফ্যাক্টর ব্যবহার করা হয়। |
android. sdk. defaultTargetSdk ToCompileSdk IfUnset | অ্যাপ এবং পরীক্ষায় লক্ষ্য SDK সংস্করণের জন্য ডিফল্ট মান হিসেবে কম্পাইল SDK সংস্করণ ব্যবহার করে। এই পরিবর্তনের আগে, লক্ষ্য SDK সংস্করণটি ডিফল্টভাবে ন্যূনতম SDK সংস্করণে ব্যবহৃত হত। | false → true | অ্যাপ এবং পরীক্ষার জন্য স্পষ্টভাবে লক্ষ্য SDK সংস্করণটি নির্দিষ্ট করুন। |
android. onlyEnableUnitTest ForTheTested BuildType | শুধুমাত্র পরীক্ষিত বিল্ড ধরণের জন্য ইউনিট পরীক্ষার উপাদান তৈরি করে। ডিফল্ট প্রজেক্টে এর ফলে ডিবাগের জন্য একটি একক ইউনিট পরীক্ষা করা হয়, যেখানে পূর্ববর্তী আচরণে ডিবাগ বা রিলিজের জন্য ইউনিট পরীক্ষা চালানো হত। | false → true | যদি আপনার প্রকল্পের ডিবাগ এবং রিলিজ উভয়ের জন্য পরীক্ষা চালানোর প্রয়োজন না হয়, তাহলে কোনও পরিবর্তনের প্রয়োজন নেই। |
android. proguard. failOnMissingFiles | AGP DSL-এ উল্লেখিত Keep ফাইলগুলির কোনওটি ডিস্কে না থাকলে বিল্ডটি একটি ত্রুটির সাথে ব্যর্থ হয়। এই পরিবর্তনের আগে ফাইলের নামের টাইপোগ্রাফির ফলে ফাইলগুলি নীরবে উপেক্ষা করা হত। | false → true | যেকোনো অবৈধ প্রোগার্ড ফাইল ঘোষণা মুছে ফেলুন |
android. r8. optimizedResourceShrinking | ক্লাস এবং অ্যান্ড্রয়েড রিসোর্স একসাথে বিবেচনা করে R8 কে কম অ্যান্ড্রয়েড রিসোর্স রাখার অনুমতি দেয়। | false → true | যদি আপনার প্রকল্পের রাখার নিয়মগুলি ইতিমধ্যেই সম্পূর্ণ হয়ে থাকে, তাহলে কোনও পরিবর্তনের প্রয়োজন নেই। |
android. r8. strictFullMode ForKeepRules | R8 কে একটি ক্লাস রাখার সময় ডিফল্ট কনস্ট্রাক্টরকে পরোক্ষভাবে না রেখে কম রাখার অনুমতি দেয়। অর্থাৎ, -keep class A আর -keep class A { <init>(); } | false → true | যদি আপনার প্রকল্পের রাখার নিয়মগুলি ইতিমধ্যেই সম্পূর্ণ হয়ে থাকে, তাহলে কোনও পরিবর্তনের প্রয়োজন নেই। আপনার প্রোজেক্টের keep নিয়মে -keep class A -keep class A { <init>(); } দিয়ে প্রতিস্থাপন করুন, যে কোনও ক্ষেত্রে যেখানে আপনার ডিফল্ট কনস্ট্রাক্টর রাখতে হবে। |
android. defaults. buildfeatures. resvalues | সকল উপপ্রকল্পে resValues সক্ষম করে | true → false | শুধুমাত্র যেসব সাবপ্রকল্পের প্রয়োজন, সেইসব প্রকল্পের গ্র্যাডেল বিল্ড ফাইলে নিম্নলিখিতটি সেট করে resValues সক্ষম করুন: android {
buildFeatures {
resValues = true
}
} |
android. defaults. buildfeatures. shaders | সকল সাবপ্রজেক্টে শেডার সংকলন সক্ষম করে | true → false | শুধুমাত্র সেই সাবপ্রজেক্টগুলিতে শেডার কম্পাইলেশন সক্ষম করুন যেখানে কম্পাইল করার জন্য শেডার রয়েছে, সেই প্রোজেক্টগুলির গ্রেডল বিল্ড ফাইলগুলিতে নিম্নলিখিতটি সেট করে: android {
buildFeatures {
shaders = true
}
} |
android. r8. proguardAndroidTxt. disallowed | AGP 9.0 তে, getDefaultProguardFile() শুধুমাত্র proguard-android-optimize.txt সাপোর্ট করবে, proguard-android.txt এর পরিবর্তে। এটি dontoptimize ফ্ল্যাগের দুর্ঘটনাজনিত ব্যবহার প্রতিরোধ করার জন্য, যা proguard-android.txt তে অন্তর্ভুক্ত। | false → true | অপ্টিমাইজেশন এড়াতে চাইলে, আপনি proguard-android-optimize.txt ব্যবহার করার পাশাপাশি একটি কাস্টম proguardFile-এ dontoptimize স্পষ্টভাবে উল্লেখ করতে পারেন। সম্ভব হলে এই ফাইল থেকে dontoptimize ফ্ল্যাগটি সরিয়ে ফেলতে ভুলবেন না, কারণ এটি R8 অপ্টিমাইজেশনের সুবিধা হ্রাস করে। যদি না হয়, তাহলে android.r8.globalOptionsInConsumerRules.disallowed=false সেট করে অপ্ট আউট করুন। |
android. r8. globalOptions InConsumerRules. disallowed | AGP 9.0 থেকে, যদি কনজিউমার কিপ ফাইলগুলিতে সমস্যাযুক্ত প্রোগার্ড কনফিগারেশন থাকে তবে অ্যান্ড্রয়েড লাইব্রেরি এবং ফিচার মডিউল প্রকাশনা ব্যর্থ হবে। কনজিউমার কিপ ফাইলগুলিতে dontoptimize বা dontobfuscate এর মতো গ্লোবাল বিকল্প রয়েছে সেগুলি কেবল অ্যাপ্লিকেশন মডিউলগুলিতে ব্যবহার করা উচিত এবং লাইব্রেরি ব্যবহারকারীদের জন্য অপ্টিমাইজেশন সুবিধা হ্রাস করতে পারে। অ্যান্ড্রয়েড অ্যাপ মডিউল সংকলন যদি প্রাক-সংকলিত নির্ভরতা (JAR বা AAR) এ এমবেড করা থাকে তবে নীরবে এই জাতীয় কোনও গ্লোবাল বিকল্প উপেক্ষা করবে। আপনি কখন এটি ঘটে তা দেখতে পারেন configuration.txt (সাধারণত <app_module>/build/outputs/mapping/<build_variant>/configuration.txt এর মতো পাথে) এই ধরনের মন্তব্যের জন্য চেক করে: # REMOVED CONSUMER RULE: dontoptimize | false → true | প্রকাশিত লাইব্রেরিগুলিতে যেকোনো অসঙ্গতিপূর্ণ নিয়ম সরিয়ে ফেলা উচিত। অভ্যন্তরীণ লাইব্রেরিগুলিতে যেকোনো অসঙ্গতিপূর্ণ কিন্তু প্রয়োজনীয় নিয়ম একটি অ্যাপ মডিউলের একটি proguardFile-এ স্থানান্তর করা উচিত। android.r8.globalOptionsInConsumerRules.disallowed=false সেট করে অপ্ট আউট করুন। আপনার সমস্ত কনজিউমার কিপ ফাইল সামঞ্জস্যপূর্ণ হয়ে গেলে, অপ্ট আউটটি সরিয়ে ফেলুন। |
android. sourceset. disallowProvider | AndroidSourceSet DSL ব্যবহার করে জেনারেট করা উৎসের জন্য সরবরাহকারীদের পাস করার অনুমতি দিন না। | false → true | জেনারেট করা উৎসগুলি নিবন্ধন করতে androidComponents এ Sources API ব্যবহার করুন। |
android. custom. shader. path. required | যদি শেডার কম্পাইলেশন সক্রিয় থাকে, তাহলে local.properties এ শেডার কম্পাইলার পাথ স্পষ্টভাবে সেট করা প্রয়োজন। | false → true | আপনার প্রকল্পের local.properties তে glslc.dir=/path/to/shader-tools যোগ করুন। |
সরানো বৈশিষ্ট্যগুলি
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 নিম্নলিখিত কার্যকারিতা সরিয়ে দেয়:
- এমবেডেড ওয়্যার ওএস অ্যাপ সাপোর্ট
AGP 9.0 Wear OS অ্যাপ এম্বেড করার জন্য সমর্থন সরিয়ে দেয়, যা আর Play তে সমর্থিত নয়। এর মধ্যেwearAppকনফিগারেশন এবংAndroidSourceSet.wearAppConfigurationNameDSL অপসারণ অন্তর্ভুক্ত। Wear OS তে আপনার অ্যাপটি কীভাবে প্রকাশ করবেন তা জানতে Distribute to Wear OS দেখুন। -
androidDependenciesএবংsourceSetsরিপোর্ট টাস্ক - ঘনত্ব বিভক্ত APK সমর্থন
AGP 9.0 স্ক্রিন ঘনত্বের উপর ভিত্তি করে বিভক্ত APK তৈরির জন্য সমর্থন সরিয়ে দেয়। কার্যকারিতা এবং সম্পর্কিত API গুলি সরিয়ে ফেলা হয়েছে। AGP 9.0 বা উচ্চতর ব্যবহার করে স্ক্রিন ঘনত্বের উপর ভিত্তি করে APK বিভক্ত করতে, অ্যাপ বান্ডেল ব্যবহার করুন।
পরিবর্তিত DSL
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0-এ নিম্নলিখিত ব্রেকিং DSL পরিবর্তনগুলি রয়েছে:
CommonExtensionএর প্যারামিটারাইজেশন সরানো হয়েছে।নিজেই, এটি শুধুমাত্র একটি সোর্স-লেভেল ব্রেকিং পরিবর্তন যা ভবিষ্যতে সোর্স-লেভেল ব্রেকিং পরিবর্তন এড়াতে সাহায্য করবে, তবে এর অর্থ হল ব্লক পদ্ধতিগুলিকে
CommonExtensionথেকেApplicationExtension,LibraryExtension,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 অপসারণ করে:
AndroidSourceSet.jni, কারণ এটি কার্যকরী ছিল না।AndroidSourceSet.wearAppConfigurationName, কারণ এটি সরানো এমবেডেড Wear OS অ্যাপ সাপোর্টের সাথে সম্পর্কিত।BuildType.isRenderscriptDebuggable, কারণ এটি কার্যকরী ছিল না।DependencyVariantSelection। এটিDependencySelectionদ্বারা প্রতিস্থাপিত হয়, যাkotlin.android.localDependencySelectionহিসাবে প্রকাশিত হয়।Installation.installOptions(String)। এটিInstallation.installOptionsএর পরিবর্তনযোগ্য বৈশিষ্ট্য দ্বারা প্রতিস্থাপিত হয়।পরীক্ষামূলক, কিন্তু কখনও স্থিতিশীল হয়নি
PostProcessingব্লক।ProductFlavor.setDimension, যাdimensionপ্রোপার্টি দ্বারা প্রতিস্থাপিত হয়LanguageSplitOptions, যা শুধুমাত্র Google Play Instant এর জন্য কার্যকর ছিল, যা বন্ধ করা হয়েছে।DensitySplit, কারণ বৈশিষ্ট্যটি আর সমর্থিত নয়। প্রতিস্থাপনের জন্য App Bundles ব্যবহার করা হবে।
সরানো API গুলি
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0 অপসারণ করে:
AndroidComponentsExtension.finalizeDSl। এটিfinalizeDslদ্বারা প্রতিস্থাপিত হয়।Component.transformClassesWith। এটিInstrumentation.transformClassesWithদ্বারা প্রতিস্থাপিত হয়।Component.setAsmFramesComputationMode। এটিInstrumentation.setAsmFramesComputationModeদ্বারা প্রতিস্থাপিত হয়।ComponentBuilder.enabled। এটিComponentBuilder.enableদ্বারা প্রতিস্থাপিত হয়।DependenciesInfoBuilder.includedInApk। Is কেincludeInApkদ্বারা প্রতিস্থাপিত করা হয়েছে।DependenciesInfoBuilder.includedInBundle। Is কেincludeInBundleদ্বারা প্রতিস্থাপিত করা হয়।GeneratesApk.targetSdkVersion। IstargetSdkদ্বারা প্রতিস্থাপিত হয়Variant.minSdkVersion. IsminSdkদ্বারা প্রতিস্থাপিত হয়Variant.maxSdkVersion. Is কেmaxSdkদ্বারা প্রতিস্থাপিত করা হয়েছেVariant.targetSdkVersion. IstargetSdkদ্বারা প্রতিস্থাপিত হয়Variant.unitTest, কারণ এটিcom.android.testপ্লাগইনের ক্ষেত্রে প্রযোজ্য ছিল না।unitTestHasUnitTestসম্প্রসারিতVariantBuilderসাবটাইপে উপলব্ধ।VariantBuilder.targetSdkএবংtargetSdkPreview, কারণ এগুলি লাইব্রেরিতে অর্থবহ ছিল না। পরিবর্তেGeneratesApkBuilder.targetSdkঅথবাGeneratesApkBuilder.targetSdkPreviewব্যবহার করুন।VariantBuilder.enableUnitTest, কারণ এটিcom.android.testপ্লাগইনের ক্ষেত্রে প্রযোজ্য ছিল না।enableUnitTestHasUnitTestBuilderসম্প্রসারিতVariantBuilderসাবটাইপে উপলব্ধ।HasUnitTestBuilderসম্প্রসারিতVariantBuilderসাবটাইপগুলিতে আরও ধারাবাহিকভাবে নামকরণ করাenableUnitTestএর পক্ষেVariantBuilder.unitTestEnabledসরানো হয়েছে।VariantOutput.enable. এটিenabledদ্বারা প্রতিস্থাপিত হয়অবচিত এবং নিষ্ক্রিয়
FeaturePluginএবংFeatureExtension।অবচিত এবং নিষ্ক্রিয়
BaseExtension.registerTransformAPI গুলি, যা কেবলমাত্র AGP 4.2 বা তার নিচের সংস্করণে চলমান লক্ষ্যবস্তুতে সর্বশেষ AGP সংস্করণের বিরুদ্ধে কম্পাইল করার অনুমতি দেয়।
Gradle বৈশিষ্ট্যগুলি সরানো হয়েছে
ডিফল্টরূপে সক্রিয় থাকা বৈশিষ্ট্যগুলিকে বিশ্বব্যাপী অক্ষম করার উপায় হিসেবে প্রাথমিকভাবে নিম্নলিখিত গ্রেডল বৈশিষ্ট্যগুলি যুক্ত করা হয়েছিল।
এই বৈশিষ্ট্যগুলি AGP 8.0 বা তার নিচের সংস্করণ থেকে ডিফল্টরূপে নিষ্ক্রিয় করা হয়েছে। কেবলমাত্র সেই সাব-প্রকল্পগুলিতে এই বৈশিষ্ট্যগুলি সক্ষম করুন যা আরও দক্ষ বিল্ডের জন্য এগুলি ব্যবহার করে।
| সম্পত্তি | ফাংশন | প্রতিস্থাপন |
|---|---|---|
android. defaults. buildfeatures. aidl | সকল উপ-প্রকল্পে AIDL সংকলন সক্ষম করে | শুধুমাত্র যেসব সাবপ্রকল্পে AIDL সোর্স আছে, সেখানেই AIDL কম্পাইলেশন সক্ষম করুন, সেইসব প্রকল্পের Gradle বিল্ড ফাইলে নিম্নলিখিত বৈশিষ্ট্যগুলি সেট করে:android {
buildFeatures {
aidl = true
}
} |
android. defaults. buildfeatures. renderscript | সকল সাবপ্রজেক্টে রেন্ডারস্ক্রিপ্ট সংকলন সক্ষম করে | শুধুমাত্র সেই সাবপ্রজেক্টগুলিতে যেখানে রেন্ডারস্ক্রিপ্ট সোর্স আছে সেখানে রেন্ডারস্ক্রিপ্ট কম্পাইলেশন সক্ষম করুন, সেই প্রোজেক্টগুলির গ্র্যাডেল বিল্ড ফাইলগুলিতে নিম্নলিখিত বৈশিষ্ট্য সেট করে: android {
buildFeatures {
renderScript = true
}
} |
জোরপূর্বক গ্রেডল বৈশিষ্ট্য
নিম্নলিখিত Gradle বৈশিষ্ট্যগুলি সেট করলে AGP 9.0 একটি ত্রুটি ঠেলে দেয়।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপগ্রেড অ্যাসিস্ট্যান্ট এই বৈশিষ্ট্যগুলি ব্যবহার করে এমন প্রকল্পগুলিকে AGP 9.0 তে আপগ্রেড করবে না।
| সম্পত্তি | ফাংশন |
|---|---|
android. r8. integratedResourceShrinking | রিসোর্স সঙ্কুচিতকরণ এখন সর্বদা R8 এর অংশ হিসাবে পরিচালিত হয়, পূর্ববর্তী বাস্তবায়নটি সরানো হয়েছে। |
android. enableNewResourceShrinker. preciseShrinking | রিসোর্স সঙ্কুচিত করার ক্ষেত্রে এখন সর্বদা সুনির্দিষ্ট রিসোর্স সঙ্কুচিত ব্যবহার করা হয়, যা আরও বেশি রিসোর্স অপসারণ করতে সক্ষম করে। |
প্রিভিউ বৈশিষ্ট্য
আমরা যে নতুন বৈশিষ্ট্যগুলি নিয়ে কাজ করছি সেগুলি 9.0 এ চেষ্টা করার জন্য উপলব্ধ।
ফিউজড লাইব্রেরি প্লাগইন
ফিউজড লাইব্রেরি প্লাগইন (প্রিভিউ) আপনাকে একাধিক লাইব্রেরি একটি একক অ্যান্ড্রয়েড লাইব্রেরি AAR হিসেবে প্রকাশ করতে দেয়। এটি আপনার ব্যবহারকারীদের জন্য আপনার প্রকাশিত শিল্পকর্মের উপর নির্ভর করা সহজ করে তুলতে পারে।
শুরু করার বিষয়ে তথ্যের জন্য, Fused Library সহ একাধিক অ্যান্ড্রয়েড লাইব্রেরি প্রকাশ করুন দেখুন।
সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha10
| সমস্যা সমাধান করা হয়েছে | ||||
|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| |||
| লিন্ট |
| |||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha09
| সমস্যা সমাধান করা হয়েছে | ||||
|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| |||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha08
| সমস্যা সমাধান করা হয়েছে | |
|---|---|
| AGP 9.0.0-alpha08-এ কোনও পাবলিক সমস্যা সমাধান করা হয়নি। |
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha07
| সমস্যা সমাধান করা হয়েছে | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| ||||||||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha06
| সমস্যা সমাধান করা হয়েছে | |||||
|---|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| ||||
| লিন্ট |
| ||||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha05
| সমস্যা সমাধান করা হয়েছে | |||||
|---|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| ||||
| লিন্ট |
| ||||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha04
| সমস্যা সমাধান করা হয়েছে | ||||
|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| |||
| লিন্ট |
| |||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha03
| সমস্যা সমাধান করা হয়েছে | ||||
|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| |||
| লিন্ট |
| |||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha02
| সমস্যা সমাধান করা হয়েছে | ||||
|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| |||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 9.0.0-alpha01
| সমস্যা সমাধান করা হয়েছে | |||||||
|---|---|---|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| ||||||