Android Gradle প্লাগ-ইন 9.0 হল একটি প্রধান রিলিজ যা API এবং আচরণে পরিবর্তন নিয়ে আসে।
Android Gradle প্লাগ-ইন 9.0.1-এ আপডেট করতে, Android Gradle প্লাগ-ইন আপগ্রেড অ্যাসিস্ট্যান্ট ব্যবহার করুন। AGP আপগ্রেড অ্যাসিস্ট্যান্ট আপনার প্রোজেক্ট আপগ্রেড করার সময়, যখনই উপযুক্ত হয়, বিদ্যমান আচরণগুলি সংরক্ষণ করতে সাহায্য করে, যাতে আপনি AGP 9.0-এ সমস্ত নতুন ডিফল্ট গ্রহণ করার জন্য প্রস্তুত না থাকলেও AGP 9.0 ব্যবহার করার জন্য আপনার প্রোজেক্ট আপগ্রেড করতে পারেন।
আপগ্রেড করার প্রসেস আরও সহজ করতে, দুটি এজেন্ট স্কিলও উপলভ্য আছে। KMP অ্যাপ নয় এমন অ্যাপের জন্য, Android স্কিল রিপোজিটরি থেকে AGP 9 আপগ্রেড স্কিল ব্যবহার করে দেখুন। KMP অ্যাপের জন্য, JetBrains থেকে AGP 9 আপগ্রেড স্কিল ব্যবহার করে দেখুন। Android Studio-তে স্কিল ব্যবহার করা সম্পর্কে আরও তথ্যের জন্য, স্কিলের মাধ্যমে এজেন্ট মোড এক্সটেন্ড করুন দেখুন।
মানানসই
Android Gradle প্লাগ-ইন 9.0-এ কাজ করে এমন সর্বাধিক API লেভেল হল API লেভেল 36.1। এখানে অন্যান্য কম্প্যাটিবিলিটি সংক্রান্ত তথ্য দেওয়া হল:
| সর্বনিম্ন ভার্সন | ডিফল্ট ভার্সন | নোট | |
|---|---|---|---|
| Gradle | 9.1.0 | 9.1.0 | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK বিল্ড টুল | 36.0.0 | 36.0.0 | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন। |
| NDK | N/A | 28.2.13676358 | NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন। |
| JDK | 17 | 17 | আরও জানতে, JDK ভার্সন সেট করা দেখুন। |
| Kotlin Gradle প্লাগ-ইন (KGP) | ২.২.১০ | ২.২.১০ | আরও জানতে, Kotlin Gradle প্লাগ-ইনের উপর রানটাইম ডিপেন্ডেন্সি দেখুন। |
android DSL ক্লাস এখন শুধু নতুন পাবলিক ইন্টারফেস প্রয়োগ করে
গত কয়েক বছর ধরে, কোন API পাবলিক তা আরও ভালোভাবে নিয়ন্ত্রণ করার জন্য
আমরা DSL ও API-এর জন্য নতুন ইন্টারফেস
চালু করেছি। AGP ভার্সন
7.x এবং 8.x এখনও পুরনো DSL টাইপ (যেমন BaseExtension) ব্যবহার করে যা
ইন্টারফেসে কাজ করার সময় কম্প্যাটিবিলিটি বজায় রাখার জন্য
নতুন পাবলিক ইন্টারফেসও প্রয়োগ করেছে।
AGP 9.0 শুধুমাত্র আমাদের নতুন DSL ইন্টারফেস ব্যবহার করে, এবং ইমপ্লিমেন্টেশনগুলি নতুন ধরনের পরিবর্তিত হয়েছে যা সম্পূর্ণরূপে লুকানো আছে। এটি পুরনো, অননুমোদিত ভেরিয়েন্ট API-এর অ্যাক্সেসও সরিয়ে দেয়।
AGP 9.0-এ আপডেট করতে, আপনাকে নিম্নলিখিত কাজগুলি করতে হতে পারে:
- আপনার প্রোজেক্ট বিল্ট-ইন
Kotlin-এর সাথে মানানসই কিনা তা নিশ্চিত করুন:
org.jetbrains.kotlin.androidপ্লাগ-ইন নতুন DSL-এর সাথে মানানসই নয়। KMP প্রোজেক্টকে KMP-এর জন্য Android Gradle Library প্লাগ-ইনে:
com.android.libraryএবংcom.android.applicationপ্লাগ-ইনের মতো একই Gradle সাবপ্রোজেক্টেorg.jetbrains.kotlin.multiplatformপ্লাগ-ইন ব্যবহার করা নতুন DSL-এর সাথে মানানসই নয়।আপনার বিল্ড ফাইল আপডেট করুন: ইন্টারফেসের পরিবর্তন DSL-কে যতটা সম্ভব একই রকম রাখার জন্য করা হলেও, কিছু ছোটখাটো পরিবর্তন হতে পারে।
নতুন DSL ও API রেফারেন্স করতে আপনার কাস্টম বিল্ড লজিক আপডেট করুন: ইন্টার্নাল DSL-এর যেকোনও রেফারেন্স পাবলিক DSL ইন্টারফেস দিয়ে পরিবর্তন করুন। বেশিরভাগ ক্ষেত্রে এটি একটির পরিবর্তে আরেকটি হিসেবে কাজ করবে।
applicationVariantsএবং একই ধরনের API-এর যেকোনও ব্যবহার নতুনandroidComponentsAPI দিয়ে প্রতিস্থাপন করুন। এটি আরও জটিল হতে পারে, কারণandroidComponentsAPI এমনভাবে ডিজাইন করা হয়েছে যাতে প্লাগ-ইন আরও বেশি সময় ধরে মানানসই থাকে। উদাহরণ দেখতে আমাদের Gradle Recipes চেক করুন।থার্ড-পার্টি প্লাগ-ইন আপডেট করুন: কিছু থার্ড-পার্টি প্লাগ-ইন এখনও এমন ইন্টারফেস বা API-এর উপর নির্ভর করতে পারে যা আর প্রকাশ করা হয় না। AGP 9.0-এর সাথে মানানসই প্লাগ-ইনের ভার্সনে মাইগ্রেট করুন।
নতুন DSL ইন্টারফেসে পরিবর্তন করার ফলে প্লাগ-ইন ও Gradle বিল্ড স্ক্রিপ্ট বিভিন্ন বন্ধ হয়ে যাওয়া 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
|
Android ডিভাইস এবং এমুলেটরের বিরুদ্ধে পরীক্ষা চালানোর জন্য কাস্টম টেস্ট এনভায়রনমেন্টের রেজিস্ট্রেশন। | Gradle-এর ম্যানেজ করা ডিভাইস বিকল্পে পাল্টে নিন। |
sdkDirectory,ndkDirectory,bootClasspath,adbExecutable এবংadbExe
|
কাস্টম টাস্কের জন্য Android SDK-এর বিভিন্ন কম্পোনেন্ট ব্যবহার করা। |
androidComponents.sdkComponents-এ
পাল্টান।
|
registerArtifactType,registerBuildTypeSourceProvider,registerProductFlavorSourceProvider,registerJavaArtifact,registerMultiFlavorSourceProvider, এবংwrapJavaSourceSet |
Android Studio-তে জেনারেট করা সোর্স ম্যানেজ করার সাথে সম্পর্কিত বেশিরভাগ ফাংশনালিটি এখন আর কাজ করে না, যা AGP 7.2.0-তে কাজ করা বন্ধ করে দিয়েছে। | এইসব API-এর সরাসরি কোনও বিকল্প নেই। |
dexOptions
|
dx টুলের সাথে সম্পর্কিত পুরনো সেটিংস, যা
d8 দ্বারা পরিবর্তন করা হয়েছে। Android Gradle প্লাগ-ইন 7.0-এর পর থেকে
কোনও সেটিংসের কোনও প্রভাব নেই।
|
সরাসরি কোনও বিকল্প নেই। |
generatePureSplits
|
ইনস্ট্যান্ট অ্যাপের জন্য কনফিগারেশন স্প্লিট জেনারেট করুন। | কনফিগারেশন স্প্লিট শিপ করার ক্ষমতা এখন Android অ্যাপ বান্ডেলে বিল্ট-ইন করা আছে। |
aidlPackagedList
|
AAR-এ প্যাকেজ করার জন্য AIDL ফাইল যাতে লাইব্রেরি এবং এই লাইব্রেরির উপর নির্ভর করে এমন অ্যাপের জন্য এটি API হিসেবে প্রকাশ করা যায়। |
এটি এখনও
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.4 আপনাকে আলাদা আলাদা মডিউল অপ্ট-আউট করার সুবিধা দেয়। কীভাবে তা জানতে, Variant API মডিউল অপ্ট-আউট দেখুন।
AGP 9.0-এ আগের ক্লাসগুলি বন্ধ করা হয়েছে বলে চিহ্নিত করা হয়েছে। এর অর্থ হল, যেসব প্রোজেক্ট
newDsl ফ্ল্যাগ থেকে অপ্ট-আউট করে, সেগুলি android ব্লক সহ
অবচিতি সংক্রান্ত সতর্কতা দেখতে পাবে।
এছাড়াও, AGP 9.0-এ আপগ্রেড করার আগে আপনি নতুন API-তে আপগ্রেড করা শুরু করতে পারেন। নতুন ইন্টারফেস অনেক AGP ভার্সনে উপলভ্য আছে, তাই আপনি নতুন ও পুরনো ভার্সন একসাথে ব্যবহার করতে পারবেন। AGP API রেফারেন্স ডকুমেন্ট প্রতিটি AGP ভার্সনের জন্য API সারফেস দেখায় এবং প্রতিটি ক্লাস, পদ্ধতি ও ফিল্ড কখন যোগ করা হয়েছে তা দেখায়।
আমরা সাধারণত ব্যবহৃত প্লাগ-ইনের লেখকদের সাথে যোগাযোগ করছি যাতে তারা নতুন মোডের সাথে সম্পূর্ণ মানানসই প্লাগ-ইন মানিয়ে নিতে এবং প্রকাশ করতে পারে এবং মাইগ্রেশনের মাধ্যমে আপনাকে গাইড করার জন্য Android Studio-তে AGP আপগ্রেড অ্যাসিস্ট্যান্ট উন্নত করা চালিয়ে যাব।
আপনি যদি দেখেন যে নতুন DSL বা ভেরিয়েন্ট API-তে ক্ষমতা বা ফিচার নেই, তাহলে যত তাড়াতাড়ি সম্ভব একটি সমস্যা ফাইল করুন।
বিল্ট-ইন Kotlin
Android Gradle প্লাগ-ইন 9.0-এ বিল্ট-ইন Kotlin সাপোর্ট চালু করা হয়েছে এবং ডিফল্ট হিসেবে এটি
চালু করা হয়েছে। এর অর্থ হল, Kotlin সোর্স ফাইল কম্পাইল করার জন্য
আপনার বিল্ড ফাইলে org.jetbrains.kotlin.android (বা kotlin-android) প্লাগ-ইন
আপনাকে আর প্রয়োগ করতে হবে না।
এটি AGP-এর সাথে Kotlin ইন্টিগ্রেশনকে সহজ করে, বাতিল করা API-এর ব্যবহার এড়ায় এবং কিছু ক্ষেত্রে পারফর্ম্যান্স উন্নত করে।
তাই, আপনার প্রোজেক্ট AGP 9.0-এ আপগ্রেড করার সময়, আপনাকে বিল্ট-ইন Kotlin-এ মাইগ্রেট করতে হবে অথবা অপ্ট-আউট করতে হবে।
এছাড়াও, আপনি Gradle সাবপ্রোজেক্টের জন্য বিল্ট-ইন Kotlin সাপোর্ট বেছে নিয়ে বন্ধ করতে পারবেন, যেখানে Kotlin সোর্স নেই।
Kotlin Gradle প্লাগ-ইনের উপর রানটাইম ডিপেন্ডেন্সি
বিল্ট-ইন Kotlin সহায়তা প্রদান করতে, Android Gradle প্লাগ-ইন 9.0-এর এখন Kotlin Gradle প্লাগ-ইন (KGP) 2.2.10-এর উপর রানটাইম ডিপেন্ডেন্সি আছে। এর অর্থ হল, আপনাকে আর KGP ভার্সন ঘোষণা করতে হবে না এবং আপনি যদি 2.2.10-এর থেকে পুরনো KGP ভার্সন ব্যবহার করেন, তাহলে Gradle অটোমেটিক আপনার KGP ভার্সন 2.2.10-এ আপগ্রেড করে দেবে। একইভাবে, আপনি যদি 2.2.10-2.0.2-এর থেকে কম KSP ভার্সন ব্যবহার করেন, তাহলে AGP এটিকে 2.2.10-2.0.2-এ আপগ্রেড করবে যাতে KGP ভার্সনের সাথে ম্যাচ করে।
আরও উন্নত KGP ভার্সনে আপগ্রেড করুন
KGP বা KSP-এর আরও উন্নত ভার্সন ব্যবহার করতে, আপনার টপ-লেভেল বিল্ড ফাইলে নিম্নলিখিতগুলি যোগ করুন:
buildscript {
dependencies {
// For KGP
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")
// For KSP
classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
KGP-এর পুরনো ভার্সনে ডাউনগ্রেড করুন
আপনি যদি বিল্ট-ইন Kotlin থেকে অপ্ট-আউট করে থাকেন, তাহলে শুধু KGP ভার্সন ডাউনগ্রেড করতে পারবেন। এর কারণ হল AGP 9.0 ডিফল্ট হিসেবে বিল্ট-ইন Kotlin চালু করে এবং বিল্ট-ইন Kotlin-এর জন্য 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.devtools.ksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
মনে রাখবেন, আপনি KGP-এর সর্বনিম্ন ২.০.০ ভার্সনে ডাউনগ্রেড করতে পারবেন।
টেস্ট ফিক্সচারের জন্য IDE সহায়তা
AGP 9.0-এ টেস্ট ফিক্সচার-এর জন্য সম্পূর্ণ Android Studio IDE সাপোর্ট রয়েছে।
Fused Library প্লাগ-ইন
Fused Library প্লাগ-ইন (প্রিভিউ) আপনাকে একটি Android Library AAR হিসেবে একাধিক লাইব্রেরি প্রকাশ করতে দেয়। এটি আপনার ব্যবহারকারীদের জন্য আপনার প্রকাশিত আর্টিফ্যাক্টের উপর নির্ভর করা সহজ করে তুলতে পারে।
শুরু করার ব্যাপারে তথ্য পেতে, ফিউজড লাইব্রেরির মাধ্যমে একাধিক Android লাইব্রেরি একটি হিসেবে প্রকাশ করুন দেখুন।
আচরণগত পরিবর্তন
Android Gradle প্লাগ-ইন 9.0-এ নিম্নলিখিত নতুন আচরণ রয়েছে:
| আচরণ | সাজেশন |
|---|---|
Android Gradle প্লাগ-ইন 9.0 ডিফল্ট হিসেবে NDK ভার্সন r28c ব্যবহার করে।
|
আপনি যে NDK ভার্সন ব্যবহার করতে চান সেটি স্পষ্টভাবে উল্লেখ করার কথা বিবেচনা করুন। |
| Android Gradle প্লাগ-ইন 9.0-এর জন্য ডিফল্ট হিসেবে লাইব্রেরির গ্রাহকদের একই বা তার চেয়ে উন্নত কম্পাইল SDK ভার্সন ব্যবহার করতে হয়। |
কোনও লাইব্রেরি ব্যবহার করার সময় একই বা আরও উন্নত কম্পাইল SDK ব্যবহার করুন।
এটি সম্ভব না হলে অথবা আপনি যদি আপনার প্রকাশিত লাইব্রেরির গ্রাহকদের
সুইচ করার জন্য আরও সময় দিতে চান, তাহলে
AarMetadata.minCompileSdk
স্পষ্টভাবে সেট করুন।
|
AGP 9.0-এ নিম্নলিখিত Gradle প্রপার্টির ডিফল্ট আপডেট অন্তর্ভুক্ত রয়েছে। আপগ্রেড করার সময় AGP 8.13-এর আচরণ বজায় রাখার জন্য এটি আপনাকে বিকল্প দেয়:
| প্রপার্টি | ফাংশন | AGP 8.13 থেকে AGP 9.0-এ পরিবর্তন করুন | সাজেশন |
|---|---|---|---|
android. |
android ব্লকের লিগ্যাসি ইমপ্লিমেন্টেশন প্রকাশ না করেই, নতুন DSL ইন্টারফেস ব্যবহার করুন।এর অর্থ হল, লিগ্যাসি ভ্যারিয়েন্ট API, যেমন android.applicationVariants
আর অ্যাক্সেস করা যাবে না।
|
false → true |
আপনি
android.newDsl=false সেট করে অপ্ট-আউট করতে পারবেন।আপনার প্রোজেক্টে ব্যবহৃত সব প্লাগ-ইন ও বিল্ড লজিক মানানসই হয়ে গেলে, অপ্ট-আউট করার বিকল্প সরিয়ে দিন। |
android. |
বিল্ট-ইন Kotlin চালু করে | false → true |
বিল্ট-ইন Kotlin-এ মাইগ্রেট করুন যদি আপনি পারেন অথবা অপ্ট-আউট করুন। |
android. |
প্রতিটি লাইব্রেরির একটি স্বতন্ত্র প্যাকেজের নাম আছে কিনা তা নিশ্চিত করে। | false → true |
আপনার প্রোজেক্টের মধ্যে সব লাইব্রেরির জন্য অনন্য প্যাকেজের নাম উল্লেখ করুন। এটি সম্ভব না হলে, মাইগ্রেট করার সময় আপনি এই ফ্ল্যাগ বন্ধ করে দিতে পারেন। |
android. |
ডিফল্ট হিসেবে androidx
ডিপেন্ডেন্সি ব্যবহার করুন।
|
false → true |
androidx
ডিপেন্ডেন্সি গ্রহণ করুন।
|
android. |
ডিফল্ট হিসেবে
androidx.test.runner.AndroidJUnitRunner
ক্লাসের সাথে অন-ডিভাইস টেস্ট রান করুন, InstrumentationTestRunner-এর
জন্য বন্ধ হয়ে যাওয়া ডিফল্ট পরিবর্তন করে
android {
defaultConfig {
testInstrumentationRunner = "..."
}
} |
false → true |
AndroidJUnitRunner
গ্রহণ করুন,
অথবা আপনার কাস্টম testInstrumentationRunner স্পষ্টভাবে উল্লেখ করুন।
|
android. |
কনফিগারেশনের মধ্যে ডিপেন্ডেন্সি কনস্ট্রেন্টের ব্যবহার নিয়ন্ত্রণ করে। AGP 9.0-এ ডিফল্ট হল false যা শুধুমাত্র অ্যাপ্লিকেশন ডিভাইস টেস্টে (AndroidTest) কনস্ট্রেন্ট ব্যবহার করে।
এটি true-এ সেট করলে 8.13-এর মতো কাজ করবে।
|
true → false |
প্রয়োজন না হলে সব জায়গায় ডিপেন্ডেন্সি কনস্ট্রেন্ট ব্যবহার করবেন না। এই ফ্ল্যাগের নতুন ডিফল্ট গ্রহণ করলে, প্রজেক্ট ইম্পোর্ট প্রসেসে অপ্টিমাইজেশনও চালু হয়, যা অনেক Android লাইব্রেরি সাবপ্রজেক্ট সহ বিল্ডের জন্য ইম্পোর্ট করার সময় কমিয়ে দেয়। |
android. |
নন-ফাইনাল R ক্লাসের বিপরীতে অ্যাপ্লিকেশনে কোড কম্পাইল করুন, লাইব্রেরি কম্পাইলেশনের সাথে অ্যাপ্লিকেশন কম্পাইলেশন নিয়ে আসুন। এটি ইনক্রিমেন্টালিটি উন্নত করে এবং রিসোর্স প্রসেসিং ফ্লোতে ভবিষ্যতের পারফর্ম্যান্স অপ্টিমাইজেশনের পথ প্রশস্ত করে। |
false → true |
অনেক প্রোজেক্ট সোর্সে কোনও পরিবর্তন না করেই নতুন আচরণ গ্রহণ করতে পারে। R ক্লাস ফিল্ড যদি এমন কোথাও ব্যবহার করা হয় যেখানে কনস্ট্যান্ট প্রয়োজন, যেমন সুইচ কেস, তাহলে চেইনড if স্টেটমেন্ট ব্যবহার করার জন্য রিফ্যাক্টর করুন। |
android. |
অ্যাপ ও টেস্টে টার্গেট SDK ভার্সনের জন্য ডিফল্ট ভ্যালু হিসেবে কম্পাইল SDK ভার্সন
ব্যবহার করে। এই পরিবর্তনের আগে, টার্গেট SDK ভার্সন ডিফল্ট হিসেবে ন্যূনতম SDK ভার্সনে সেট করা থাকত। |
false → true |
অ্যাপ ও টেস্টের জন্য টার্গেট SDK ভার্সন স্পষ্টভাবে উল্লেখ করুন। |
android. |
শুধুমাত্র টেস্ট করা বিল্ড টাইপের জন্য ইউনিট টেস্ট কম্পোনেন্ট তৈরি করে। ডিফল্ট প্রোজেক্টে এর ফলে ডিবাগের জন্য একটি ইউনিট টেস্ট হয়, যেখানে আগের আচরণ ছিল ডিবাগ বা রিলিজের জন্য ইউনিট টেস্ট রান করা। |
false → true |
আপনার প্রোজেক্টে ডিবাগ ও রিলিজ, দুটির জন্যই টেস্ট রান করার প্রয়োজন না হলে, কোনও পরিবর্তন করতে হবে না। |
android. |
AGP DSL-এ উল্লেখ করা কোনও ফাইল ডিস্কে না থাকলে, বিল্ড ব্যর্থ হয় এবং একটি ত্রুটি দেখায়। এই পরিবর্তনের আগে ফাইলের নামে টাইপো থাকলে ফাইলগুলি নীরবে উপেক্ষা করা হত। | false → true |
ভুল ProGuard ফাইল ঘোষণা সরিয়ে দিন |
android. |
ক্লাস ও Android রিসোর্স একসাথে বিবেচনা করে R8-কে কম Android রিসোর্স রাখার অনুমতি দেয়। | false → true |
আপনার প্রোজেক্টের 'রাখার নিয়ম' আগে থেকেই সম্পূর্ণ হয়ে থাকলে, কোনও পরিবর্তন করার প্রয়োজন নেই। |
android. |
কোনও ক্লাস রাখা হলে, ডিফল্ট কনস্ট্রাক্টরকে অন্তর্নিহিতভাবে না রেখে R8-কে কম রাখার অনুমতি দেয়।
অর্থাৎ, -keep class A আর
-keep class A { <init>(); }বোঝায় না |
false → true |
আপনার প্রোজেক্টের 'রাখার নিয়ম' আগে থেকেই সম্পূর্ণ হয়ে থাকলে, কোনও পরিবর্তন করার প্রয়োজন নেই।
আপনার প্রোজেক্টের কিপ রুলে -keep class A
-এর জায়গায়
-keep class A { <init>(); }
ব্যবহার করুন, যেখানে ডিফল্ট কনস্ট্রাক্টর
রাখতে হবে।
|
android. |
সব সাবপ্রোজেক্টে
resValues
চালু করে
|
true → false |
শুধুমাত্র সেইসব সাবপ্রোজেক্টে resValues চালু করুন যেগুলিতে এটি প্রয়োজন
এবং এর জন্য সেইসব প্রোজেক্টের Gradle বিল্ড ফাইলে নিম্নলিখিতগুলি সেট করুন:
android {
buildFeatures {
resValues = true
}
} |
android. |
সব সাবপ্রোজেক্টে শেডার কম্পাইলেশন চালু করে | true → false |
শুধুমাত্র সেইসব সাবপ্রোজেক্টে শেডার কম্পাইলেশন চালু করুন যেগুলিতে কম্পাইল করার জন্য শেডার আছে।
এর জন্য সেইসব প্রোজেক্টের Gradle বিল্ড ফাইলে নিম্নলিখিত সেটিংস
করুন:
android {
buildFeatures {
shaders = true
}
} |
android. |
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. |
AGP 9.0 থেকে, গ্রাহকের রাখা ফাইলে সমস্যাযুক্ত Proguard কনফিগারেশন থাকলে Android লাইব্রেরি এবং ফিচার মডিউল প্রকাশ করা যাবে না। কনজিউমার কিপ ফাইল যাতে dontoptimize বা dontobfuscate-এর মতো গ্লোবাল বিকল্প থাকে, তা শুধুমাত্র অ্যাপ্লিকেশন মডিউলে ব্যবহার করা উচিত এবং লাইব্রেরি ব্যবহারকারীদের জন্য অপ্টিমাইজেশন সুবিধা কমাতে পারে। Android অ্যাপ মডিউল কম্পাইলেশন, প্রি-কম্পাইল করা ডিপেন্ডেন্সিতে (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 সেট করে অপ্ট-আউট করুন। আপনার সব কনজিউমার Keep ফাইল মানানসই হয়ে গেলে, অপ্ট-আউট সরিয়ে দিন।
|
android. |
AndroidSourceSet
DSL ব্যবহার করে জেনারেট করা সোর্সের জন্য পাসিং প্রোভাইডারকে অনুমতি দেবেন না।
|
false → true |
তৈরি করা সোর্স রেজিস্টার করতে androidComponents-এ
Sources
API ব্যবহার করুন।
|
android. |
শেডার কম্পাইলেশন চালু থাকলে, শেডার কম্পাইলার পাথ স্পষ্টভাবে
local.properties-এ
সেট করতে হবে।
|
false → true |
আপনার প্রোজেক্টের local.properties-এ
glslc.dir=/path/to/shader-tools যোগ করুন।
|
সরানো ফিচার
Android Gradle প্লাগ-ইন 9.0 নিম্নলিখিত কার্যকারিতা সরিয়ে দেয়:
- এম্বেড করা Wear OS অ্যাপের জন্য সহায়তা
AGP 9.0 এম্বেড করা Wear OS অ্যাপের জন্য সহায়তা সরিয়ে দেয়, যা Play-তে আর সমর্থিত নয়। এর মধ্যেwearAppকনফিগারেশন এবংAndroidSourceSet.wearAppConfigurationNameDSL সরিয়ে দেওয়া অন্তর্ভুক্ত। Wear OS-এ আপনার অ্যাপ কীভাবে প্রকাশ করবেন তা জানতে Wear OS-এ ডিস্ট্রিবিউট করুন দেখুন। androidDependenciesএবংsourceSetsরিপোর্ট টাস্ক- ঘনত্ব স্প্লিট APK সাপোর্ট
AGP 9.0 স্ক্রিন ঘনত্বের উপর ভিত্তি করে স্প্লিট APK তৈরি করার সাপোর্ট সরিয়ে দেয়। ফাংশনালিটি এবং সংশ্লিষ্ট API সরিয়ে দেওয়া হয়েছে। AGP 9.0 বা তার পরবর্তী ভার্সন ব্যবহার করে স্ক্রিন ডেনসিটির ভিত্তিতে APK স্প্লিট করতে, অ্যাপ বান্ডেল ব্যবহার করুন।
পরিবর্তিত DSL
Android Gradle প্লাগ-ইন 9.0-এ নিম্নলিখিত ব্রেকিং DSL পরিবর্তন আছে:
CommonExtension-এর প্যারামিটারাইজেশন সরিয়ে দেওয়া হয়েছে।In itself, this is only a source-level breaking change to help avoid future source-level breaking changes, but it also means that the block methods need to move from
CommonExtensiontoApplicationExtension,LibraryExtension,DynamicFeatureExtensionandTestExtension.আপনার প্রোজেক্ট AGP 9.0-এ আপগ্রেড করার সময়, Gradle প্লাগ-ইন কোড রিফ্যাক্টর করুন যা সেইসব প্যারামিটার বা ব্লক পদ্ধতি ব্যবহার করে। যেমন, নিম্নলিখিত প্লাগ-ইনটি আপডেট করা হয়েছে যাতে টাইপ প্যারামিটার সরিয়ে দেওয়া যায় এবং সরিয়ে দেওয়া ব্লক পদ্ধতির উপর নির্ভর করতে না হয়:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }যেসব প্লাগ-ইন AGP ভার্সনের রেঞ্জকে টার্গেট করে, সেগুলির জন্য সরাসরি গেটার ব্যবহার করা 9.0-এর থেকে কম AGP ভার্সনের সাথে বাইনারি কম্প্যাটিবল।
সরানো DSL
Android Gradle প্লাগ-ইন 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, কারণ ফিচারটি আর কাজ করে না। পরিবর্তন হল অ্যাপ বান্ডেল ব্যবহার করা।
সরিয়ে দেওয়া API
Android Gradle প্লাগ-ইন 9.0 এগুলি সরিয়ে দেয়:
AndroidComponentsExtension.finalizeDSl. এটি পরিবর্তন করেfinalizeDslকরা হয়েছেComponent.transformClassesWith। এটি পরিবর্তন করেInstrumentation.transformClassesWithকরা হয়েছেComponent.setAsmFramesComputationMode। এটি পরিবর্তন করেInstrumentation.setAsmFramesComputationModeকরা হয়েছেComponentBuilder.enabled। এটিComponentBuilder.enableদ্বারা প্রতিস্থাপিত হয়েছে।DependenciesInfoBuilder.includedInApk। এটিincludeInApkদিয়ে প্রতিস্থাপন করা হয়েছেDependenciesInfoBuilder.includedInBundle। এটিincludeInBundleদিয়ে প্রতিস্থাপন করা হয়েছেGeneratesApk.targetSdkVersion। এটিtargetSdkদিয়ে প্রতিস্থাপন করা হয়েছেVariant.minSdkVersion. এটিminSdkদিয়ে প্রতিস্থাপন করা হয়েছেVariant.maxSdkVersion. এটিmaxSdkদিয়ে প্রতিস্থাপন করা হয়েছেVariant.targetSdkVersion. এটিtargetSdkদিয়ে প্রতিস্থাপন করা হয়েছেVariant.unitTest, কারণ এটিcom.android.testপ্লাগ-ইনের ক্ষেত্রে প্রযোজ্য ছিল না।unitTestVariantBuilderসাবটাইপে উপলভ্য যাHasUnitTest-এর এক্সটেনশন।VariantBuilder.targetSdkএবংtargetSdkPreview, কারণ লাইব্রেরিতে এগুলি অর্থপূর্ণ ছিল না। পরিবর্তেGeneratesApkBuilder.targetSdkঅথবাGeneratesApkBuilder.targetSdkPreviewব্যবহার করুন।VariantBuilder.enableUnitTest, কারণ এটিcom.android.testপ্লাগ-ইনের ক্ষেত্রে প্রযোজ্য ছিল না।enableUnitTestVariantBuilderসাবটাইপে উপলভ্য যাHasUnitTestBuilder-এর এক্সটেনশন।HasUnitTestBuilder-এর এক্সটেনশন হিসেবেVariantBuilderসাবটাইপে আরও ধারাবাহিকভাবে নামকরণ করাenableUnitTest-এর জন্যVariantBuilder.unitTestEnabledসরিয়ে দেওয়া হয়েছে।VariantOutput.enable। এটিenabledদিয়ে প্রতিস্থাপন করা হয়েছেবন্ধ করা হয়েছে এবং কাজ করে না এমন
FeaturePluginএবংFeatureExtension।বন্ধ হয়ে যাওয়া ও বন্ধ করা
BaseExtension.registerTransformAPI, যা শুধুমাত্র লেটেস্ট AGP ভার্সনের সাথে কম্পাইল করার অনুমতি দেওয়ার জন্য রয়েছে, AGP 4.2 বা তার আগের ভার্সনে রান করার জন্য টার্গেট করা হয়েছে।
Gradle প্রপার্টি সরানো হয়েছে
নিম্নলিখিত Gradle প্রপার্টিগুলি প্রাথমিকভাবে ডিফল্টভাবে চালু থাকা ফিচারগুলি গ্লোবালি বন্ধ করার উপায় হিসাবে যোগ করা হয়েছিল।
AGP 8.0 বা তার আগের ভার্সন থেকে এইসব ফিচার সাধারণত বন্ধ করা থাকে। আরও দক্ষ বিল্ডের জন্য শুধুমাত্র সেই সাব-প্রোজেক্টে এই ফিচারগুলি চালু করুন যেগুলি সেগুলি ব্যবহার করে।
| প্রপার্টি | ফাংশন | পরিবর্তন |
|---|---|---|
android. |
সব সাবপ্রোজেক্টে AIDL কম্পাইলেশন চালু করে |
শুধুমাত্র সেইসব সাবপ্রোজেক্টে AIDL কম্পাইলেশন চালু করুন যেখানে
AIDL সোর্স আছে
এবং এটি করতে সেইসব প্রোজেক্টের Gradle বিল্ড ফাইলে নিম্নলিখিত প্রপার্টি সেট করুন:
android {
buildFeatures {
aidl = true
}
} |
android. |
সব সাবপ্রোজেক্টে RenderScript কম্পাইলেশন চালু করে |
শুধুমাত্র সেইসব সাবপ্রোজেক্টে রেন্ডারস্ক্রিপ্ট কম্পাইলেশন চালু করুন যেখানে
রেন্ডারস্ক্রিপ্ট সোর্স আছে
এবং এটি করতে সেইসব প্রোজেক্টের Gradle বিল্ড ফাইলে নিম্নলিখিত প্রপার্টি সেট করুন:
android {
buildFeatures {
renderScript = true
}
} |
এনফোর্স করা Gradle প্রপার্টি
আপনি নিম্নলিখিত Gradle প্রপার্টি সেট করলে AGP 9.0 একটি সমস্যা দেখায়।
Android Gradle প্লাগ-ইন আপগ্রেড অ্যাসিস্ট্যান্ট, এইসব প্রপার্টি ব্যবহার করে এমন প্রোজেক্টকে AGP 9.0-তে আপগ্রেড করবে না।
| প্রপার্টি | ফাংশন |
|---|---|
android. |
রিসোর্স সরিয়ে দেওয়ার প্রসেস এখন সবসময় R8-এর অংশ হিসেবে রান করে, আগের ইমপ্লিমেন্টেশন সরিয়ে দেওয়া হয়েছে। |
android. |
রিসোর্স সরিয়ে দেওয়ার ক্ষেত্রে এখন সবসময় সুনির্দিষ্ট রিসোর্স সরিয়ে দেওয়ার পদ্ধতি ব্যবহার করা হয়, যার ফলে আরও বেশি রিসোর্স সরিয়ে দেওয়া সম্ভব হয়। |
R8 পরিবর্তন
AGP 9.0.0-এ নিম্নলিখিত R8 পরিবর্তনগুলি অন্তর্ভুক্ত করা হয়েছে।
নতুন কনফিগারেশন বিকল্প -processkotlinnullchecks
Kotlin-এর নাল চেক প্রসেস করার জন্য R8 কনফিগার করতে আমরা নতুন R8 বিকল্প -processkotlinnullchecks যোগ করেছি। বিকল্পটিতে একটি বাধ্যতামূলক আর্গুমেন্ট লাগে যা অবশ্যই
নিম্নলিখিত তিনটি মানের মধ্যে একটি হতে হবে: keep, remove_message এবং remove।
এই বিকল্পটি Kotlin কম্পাইলারের যোগ করা নিম্নলিখিত নাল চেক প্রসেস করে:
class kotlin.jvm.internal.Intrinsics {
void checkNotNull(java.lang.Object);
void checkNotNull(java.lang.Object, java.lang.String);
void checkExpressionValueIsNotNull(
java.lang.Object, java.lang.String);
void checkNotNullExpressionValue(
java.lang.Object, java.lang.String);
void checkReturnedValueIsNotNull(
java.lang.Object, java.lang.String);
void checkReturnedValueIsNotNull(
java.lang.Object, java.lang.String, java.lang.String);
void checkFieldIsNotNull(java.lang.Object, java.lang.String);
void checkFieldIsNotNull(
java.lang.Object, java.lang.String, java.lang.String);
void checkParameterIsNotNull(java.lang.Object, java.lang.String);
void checkNotNullParameter(java.lang.Object, java.lang.String);
}
সবচেয়ে দুর্বল থেকে সবচেয়ে শক্তিশালী পর্যন্ত সাজানো বিকল্পের ভ্যালুর নিম্নলিখিত প্রভাব রয়েছে:
keepচেক পরিবর্তন করে না।remove_messageপ্রতিটি চেক মেথড কলকে কলের প্রথম আর্গুমেন্টেgetClass()-এ একটি কলে রিরাইট করে (কার্যকরভাবে নাল চেক রেখে, কিন্তু কোনও মেসেজ ছাড়াই)।removeচেক সম্পূর্ণভাবে সরিয়ে দেয়।
ডিফল্ট হিসেবে R8
remove_message ব্যবহার করে। -processkotlinnullchecks-এর যেকোনও স্পেসিফিকেশন
সেটি ওভাররাইড করবে। একাধিকবার উল্লেখ করা হলে, সবচেয়ে শক্তিশালী ভ্যালু
ব্যবহার করা হয়।
কম্প্যানিয়ন পদ্ধতিতে তথ্য রাখার প্রচার বন্ধ করুন
কিপ রুল ইন্টারফেস পদ্ধতির সাথে ম্যাচ করলে, যা ডিসুগারিংয়ের সাপেক্ষে, R8 আগে অভ্যন্তরীণভাবে অপ্টিমাইজেশন অনুমোদন না করা এবং সঙ্কোচন অনুমোদন না করা বিট সিন্থেসাইজড কম্প্যানিয়ন পদ্ধতিতে ট্রান্সফার করে।
AGP 9.0 থেকে শুরু করে, কম্প্যানিয়ন পদ্ধতিতে নিয়ম আর প্রযোজ্য হবে না। এটি এই তথ্যের সাথে সামঞ্জস্যপূর্ণ যে রাখার নিয়ম অন্যান্য কম্পাইলার সিন্থেসাইজড ফিল্ড/পদ্ধতি/ক্লাসের ক্ষেত্রে প্রযোজ্য নয়।
অপ্টিমাইজেশন অনুমোদন না করা এবং ছোট করা অনুমোদন না করা বিটগুলি কম্প্যানিয়ন পদ্ধতিতে ট্রান্সফার করার মাধ্যমে, নিম্নলিখিত ব্যবহারের ক্ষেত্রে আগে কাজ করত:
default/static/privateইন্টারফেস পদ্ধতি সহ একটি লাইব্রেরি কম্পাইল করুন DEX-এminSdk< ২৪ এবং ইন্টারফেস পদ্ধতি বজায় রাখে এমন নিয়ম সহ।- ক্লাসপাথ ও
-applymapping-এ লাইব্রেরি সহ অ্যাপ কম্পাইল করুন। - অ্যাপ ও লাইব্রেরি মার্জ করুন।
মনে রাখবেন যে এটি শুধুমাত্র -applymapping-এর সাথে কাজ করে কারণ disallow
obfuscation বিট কম্প্যানিয়ন পদ্ধতিতে ট্রান্সফার করা হয় না—অর্থাৎ, ধাপ ১ থেকে তৈরি করা কম্প্যানিয়ন ক্লাসে অস্পষ্ট পদ্ধতির
নাম থাকবে।
ভবিষ্যতে এই ব্যবহারের ক্ষেত্রে minSdk <
২৪-এর জন্য আর কাজ করবে না। এই সমস্যার সমাধান করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
minSdk< ২৪ সহ ক্লাস ফাইলের জন্যdefault/static/privateইন্টারফেস পদ্ধতি ব্যবহার করে লাইব্রেরি ডিসুগার করুন।- R8 এবং ইন্টারফেস পদ্ধতিগুলি কম্প্যানিয়ন ক্লাসে রাখে এমন নিয়ম ব্যবহার করে ডিসুগার করা আর্টিফ্যাক্ট কম্পাইল করুন।
- ক্লাসপাথে লাইব্রেরির সাথে অ্যাপটি কম্পাইল করুন।
- অ্যাপ ও ডিসুগার করা আর্টিফ্যাক্ট মার্জ করুন।
এর আরেকটি পার্শ্বপ্রতিক্রিয়া হল, ইন্টারফেস কম্প্যানিয়ন পদ্ধতির মধ্যে অজ্ঞাত ও স্থানীয় ক্লাসের জন্য ইনার ক্লাস ও এনক্লোজিং পদ্ধতি অ্যাট্রিবিউট আর রাখা যাবে না।
ডিফল্ট এমিট করা সোর্স ফাইল পরিবর্তন করে r8-map-id-<MAP_ID> করুন
এই পরিবর্তন 8.12.0 থেকে শুরু করে AGP-তে করা হয়েছে।
রিট্রেসিংয়ের প্রয়োজন হলে (অর্থাৎ,
অবফিউসকেশন বা অপ্টিমাইজেশন চালু থাকলে) কোনও ক্লাসের জন্য ডিফল্ট এমিটেড সোর্স ফাইল অ্যাট্রিবিউট
SourceFile থেকে r8-map-id-<MAP_ID>-এ পরিবর্তিত হয়।
একটি অস্পষ্ট স্ট্যাক ট্রেস দেওয়া হলে, নতুন সোর্স ফাইল অ্যাট্রিবিউট রিট্রেসিংয়ের জন্য প্রয়োজনীয় ম্যাপিং ফাইলের আইডি এক্সট্র্যাক্ট করা সম্ভব করে তোলে, যা Logcat-এ স্ট্যাক ট্রেসের অটোমেটিক রিট্রেসিং-এর জন্য ব্যবহার করা যেতে পারে।
কাস্টম সোর্স ফাইল অ্যাট্রিবিউট ব্যবহার করা হলে (-renamesourcefileattribute)
এই কাস্টম সোর্স ফাইল অ্যাট্রিবিউট প্রাধান্য পেতে থাকবে।
ProGuard কম্প্যাটিবিলিটি মোডে (যখন gradle.properties-এ
android.enableR8.fullMode=false থাকে), r8-map-id-<MAP_ID>-এর সোর্স ফাইল অ্যাট্রিবিউট
এমিট করলে, শুধুমাত্র তখনই তা কার্যকর হয় যদি SourceFile
অ্যাট্রিবিউট না রাখা হয়। যেসব অ্যাপ ProGuard কম্প্যাটিবিলিটি মোড ব্যবহার করে এবং
স্ট্যাক ট্রেসে ম্যাপিং ফাইল আইডি অন্তর্ভুক্ত করতে চায়, তাদের
-keepattributes SourceFile সরিয়ে দিতে হবে (অথবা R8 ফুল মোডে মাইগ্রেট করতে হবে)।
r8-map-id-<MAP_ID>-এ ব্যবহৃত ম্যাপ আইডি হল সম্পূর্ণ ম্যাপ হ্যাশ, ম্যাপ হ্যাশের ৭ অক্ষরের প্রিফিক্স নয়, যা আগে ব্যবহার করা হত।
L8 ডিসুগারিংয়ে মিনিমাইজ করা সিন্থেটিক নামের ব্যবহার চালু করুন
D8-এর মাধ্যমে তৈরি সিন্থেটিক ক্লাসের নামে সাধারণত সাবস্ট্রিং
$$ExternalSynthetic থাকে যা আপনাকে জানায় যে এটি D8-এর মাধ্যমে তৈরি সিন্থেটিক।
এছাড়াও, সিন্থেটিকের নাম সিন্থেটিকের ধরনও এনকোড করে (যেমন, Backport, Lambda)। এর ফলে DEX সাইজের উপর নেতিবাচক প্রভাব পড়ে, কারণ ক্লাস নেম স্ট্রিং পুলে আরও বেশি জায়গা নেয়।
AGP 9.0, L8 (কোর লাইব্রেরি ডিসুগারিং) কনফিগার করে যাতে সব j$ ক্লাস সহ DEX
ফাইল সিন্থেটিক ক্লাসের জন্য নতুন সংক্ষিপ্ত ক্লাস নামের ফর্ম্যাট
ব্যবহার করে। নতুন ক্লাসের নামে একটি সাংখ্যিক আইডি (যেমন, $1) ব্যবহার করা হয়।
-addconfigurationdebugging-এর জন্য সহায়তা সরিয়ে দিন
AGP 9.0-এ -addconfigurationdebugging-এর জন্য সহায়তা সরিয়ে দেওয়া হয়েছে। কম্পাইলার এখন
ফ্ল্যাগ ব্যবহার করা হলে একটি সতর্কতা রিপোর্ট করে।
D8/R8 থেকে L8 নিয়ম জেনারেট করার জন্য সহায়তা সরিয়ে দিন
এই পরিবর্তন শুধুমাত্র সেইসব ডেভেলপারদের জন্য প্রাসঙ্গিক যারা D8/R8 কমান্ড লাইন বা সরাসরি API ব্যবহার করেন।
R8 9.0, D8 ও R8 থেকে L8-এর জন্য কিপ রুল জেনারেট করার সুবিধা সরিয়ে দেয়।
এর পরিবর্তে এই উদ্দেশ্যে আপনার TraceReferences ব্যবহার করা উচিত।
আরও নির্দিষ্টভাবে, D8Command.builder.setDesugaredLibraryKeepRuleConsumer এবং
R8Command.Builder.setDesugaredLibraryKeepRuleConsumer পদ্ধতিগুলি সরানো হয়েছে এবং
D8 এবং R8-এর কমান্ড লাইন বিকল্পগুলি থেকে
--desugared-lib-pg-conf-output-এর জন্য সহায়তা সরানো হয়েছে।
সমাধান করা সমস্যা
Android Gradle প্লাগ-ইন 9.0.0
| সমাধান করা সমস্যা | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Android Gradle প্লাগ-ইন |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Lint ইন্টিগ্রেশন |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Shrinker (R8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||