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 plugin 9.0-এর সাথে কাজ করে এমন সর্বাধিক API লেভেল হল API লেভেল 36.1. এখানে অন্যান্য কম্প্যাটিবিলিটি সংক্রান্ত তথ্য দেওয়া হল:
| ন্যূনতম ভার্সন | ডিফল্ট ভার্সন | নোট | |
|---|---|---|---|
| Gradle | 9.1.0 | 9.1.0 | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK Build Tools | ৩৬.০.০ | ৩৬.০.০ | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন। |
| NDK | N/A | 28.2.13676358 | NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন। |
| JDK | 17 | 17 | আরও জানতে, JDK ভার্সন সেট করা দেখুন। |
| Kotlin Gradle প্লাগ-ইন (KGP) | ২.২.১০ | ২.২.১০ | আরও জানতে, Kotlin Gradle প্লাগ-ইনের উপর রানটাইম নির্ভরতা দেখুন। |
android DSL ক্লাস এখন শুধুমাত্র নতুন পাবলিক ইন্টারফেস প্রয়োগ করে
গত কয়েক বছর ধরে, আমরা DSL ও API-এর জন্য
নতুন ইন্টারফেস চালু করেছি যাতে
কোন API সর্বজনীন হবে তা আরও ভালোভাবে নিয়ন্ত্রণ করা যায়। AGP ভার্সন
৭.x ও ৮.x এখনও পুরনো DSL ধরন (যেমন BaseExtension) ব্যবহার করে যা
নতুন পাবলিক ইন্টারফেসও প্রয়োগ করে, যাতে ইন্টারফেসের কাজ
এগিয়ে নিয়ে যাওয়ার সময় সামঞ্জস্য বজায় রাখা যায়।
AGP 9.0 শুধুমাত্র আমাদের নতুন DSL ইন্টারফেস ব্যবহার করে, এবং প্রয়োগ করার পদ্ধতি পরিবর্তন করে নতুন ধরনের করা হয়েছে যা সম্পূর্ণভাবে লুকানো থাকে। এছাড়াও, এটি পুরনো, অননুমোদিত ভ্যারিয়েন্ট API-তে অ্যাক্সেস সরিয়ে দেয়।
AGP 9.0-তে আপডেট করতে, আপনাকে হয়ত নিম্নলিখিত কাজগুলি করতে হবে:
- আপনার প্রোজেক্ট বিল্ট-ইন
Kotlin-এর সাথে মানানসই কিনা তা নিশ্চিত করুন: নতুন DSL-এর সাথে
org.jetbrains.kotlin.androidপ্লাগ-ইন মানানসই নয়। 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 ইন্টারফেসে পরিবর্তন করার ফলে, প্লাগ-ইন ও 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
|
লাইব্রেরি ও এই লাইব্রেরির উপর নির্ভরশীল অ্যাপের জন্য API হিসেবে প্রকাশ করতে AAR-এ প্যাকেজ করার জন্য AIDL ফাইল। |
এটি এখনও
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 বা Variant API-তে কোনও ক্ষমতা বা ফিচার নেই, তাহলে যত তাড়াতাড়ি সম্ভব একটি সমস্যা ফাইল করুন।
বিল্ট-ইন Kotlin
Android Gradle প্লাগ-ইন 9.0 বিল্ট-ইন Kotlin সহায়তা নিয়ে আসে এবং ডিফল্ট হিসেবে এটি চালু করে
। এর অর্থ হল, Kotlin সোর্স ফাইল কম্পাইল করার জন্য
আপনাকে আর বিল্ড ফাইলেorg.jetbrains.kotlin.android (বা kotlin-android) প্লাগ-ইন
প্রয়োগ করতে হবে না।
এটি AGP-র সাথে Kotlin ইন্টিগ্রেশনকে সহজ করে, পুরনো হয়ে যাওয়া API-এর ব্যবহার এড়ায় এবং কিছু ক্ষেত্রে পারফর্ম্যান্স উন্নত করে।
তাই, আপনার প্রোজেক্ট AGP 9.0-তে আপগ্রেড করলে, আপনাকেও বিল্ট-ইন Kotlin-এ মাইগ্রেট করতে হবে অথবা অপ্ট-আউট করতে হবে।
এছাড়াও, Kotlin সোর্স নেই এমন Gradle সাবপ্রজেক্টের জন্য আপনি বেছে বেছে বিল্ট-ইন 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 ভার্সন ব্যবহার করেন, তাহলে KGP ভার্সনের সাথে ম্যাচ করাতে AGP এটিকে 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.devtools.ksp:symbol-processing-gradle-plugin:KSP_VERSION")
}
}
নিচের KGP ভার্সনে ডাউনগ্রেড করা
আপনি 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-এর যে ন্যূনতম ভার্সনে ডাউনগ্রেড করতে পারবেন সেটি হল 2.0.0.
টেস্ট ফিক্সচারের জন্য IDE সহায়তা
AGP 9.0 ভার্সনে টেস্ট ফিক্সচার-এর জন্য সম্পূর্ণ Android Studio IDE সাপোর্ট দেওয়া হয়েছে।
ফিউজড লাইব্রেরি প্লাগ-ইন
Fused Library Plugin (Preview) আপনাকে একাধিক লাইব্রেরি একটি Android Library AAR হিসেবে প্রকাশ করতে দেয়। এর ফলে আপনার প্রকাশিত আর্টিফ্যাক্টের উপর নির্ভর করা আপনার ব্যবহারকারীদের পক্ষে সহজ হতে পারে।
শুরু করা সম্পর্কিত তথ্যের জন্য, Fused Library-এর মাধ্যমে একাধিক Android লাইব্রেরি একটি হিসেবে প্রকাশ করুন দেখুন।
আচরণগত পরিবর্তন
Android Gradle প্লাগ-ইন 9.0-তে নিম্নলিখিত নতুন আচরণ রয়েছে:
| আচরণ | সাজেশন |
|---|---|
Android Gradle প্লাগ-ইন 9.0 ডিফল্ট হিসেবে NDK ভার্সন r28c ব্যবহার করে।
|
আপনি যে NDK ভার্সন ব্যবহার করতে চান সেটি স্পষ্টভাবে উল্লেখ করার কথা বিবেচনা করুন। |
| Android Gradle plugin 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-এ নয়। proguard-android.txt-এ অন্তর্ভুক্ত dontoptimize ফ্ল্যাগ যাতে ভুলবশত ব্যবহার না করা হয়, সেই জন্য এটি করা হয়।
|
false → true |
আপনি অপ্টিমাইজেশন এড়াতে চাইলে, proguard-android-optimize.txt ব্যবহার করার পাশাপাশি কাস্টম proguardFile-এ dontoptimize স্পষ্টভাবে উল্লেখ করতে পারেন। সম্ভব হলে এই ফাইল থেকে dontoptimize ফ্ল্যাগ সরিয়ে দিতে ভুলবেন না, কারণ এটি R8 অপ্টিমাইজেশনের সুবিধা কমিয়ে দেয়। না হলে, android.r8.globalOptionsInConsumerRules.disallowed=false সেট করে বেরিয়ে আসুন।
|
android. |
AGP 9.0 থেকে, গ্রাহক যদি সমস্যাযুক্ত Proguard কনফিগারেশন সহ ফাইল রাখেন, তাহলে Android লাইব্রেরি এবং ফিচার মডিউল প্রকাশ করা যাবে না। dontoptimize বা dontobfuscate-এর মতো গ্লোবাল বিকল্প সহ ফাইল গ্রাহক শুধুমাত্র অ্যাপ্লিকেশন মডিউলে ব্যবহার করতে পারবেন এবং লাইব্রেরি ব্যবহারকারীদের জন্য অপ্টিমাইজেশন সুবিধা কমাতে পারে। প্রি-কম্পাইল করা ডিপেন্ডেন্সি (JAR বা AAR)-তে এম্বেড করা থাকলে, Android অ্যাপ মডিউল কম্পাইলেশন নীরবে এই ধরনের যেকোনও গ্লোবাল বিকল্প উপেক্ষা করবে। আপনি configuration.txt (সাধারণত <app_module>/build/outputs/mapping/<build_variant>/configuration.txt-এর মতো পাথে) চেক করে দেখতে পারেন যে এটি কখন ঘটে। এর মধ্যে এই ধরনের কমেন্ট থাকে: # REMOVED CONSUMER RULE: dontoptimize
|
false → true |
প্রকাশিত লাইব্রেরি থেকে কোনও অনুপযুক্ত নিয়ম সরিয়ে দিতে হবে। ইন্টার্নাল লাইব্রেরি, কোনও অ্যাপ মডিউলের মধ্যে থাকা proguardFile-এ কোনও ইনকম্প্যাটিবল কিন্তু প্রয়োজনীয় নিয়ম সরাতে হবে। android.r8.globalOptionsInConsumerRules.disallowed=false সেট করে অপ্ট-আউট করুন। আপনার সব কনজিউমার কীপ ফাইল কম্প্যাটিবল হয়ে গেলে, অপ্ট-আউট করার সুবিধা সরিয়ে দিন।
|
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-এর প্যারামিটারাইজেশন সরিয়ে দেওয়া হয়েছে।এটি শুধুমাত্র সোর্স-লেভেল ব্রেকিং পরিবর্তন যা ভবিষ্যতে সোর্স-লেভেল ব্রেকিং পরিবর্তন এড়াতে সাহায্য করে, কিন্তু এর অর্থ হল যে ব্লক করার পদ্ধতিগুলি
CommonExtensionথেকেApplicationExtension,LibraryExtension,DynamicFeatureExtensionএবংTestExtension-এ সরাতে হবে।আপনার প্রোজেক্টকে 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 ভার্সনের একটি রেঞ্জকে টার্গেট করে, সেগুলির জন্য সরাসরি গেটার ব্যবহার করলে ৯.০-এর আগের 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প্লাগ-ইনে প্রযোজ্য ছিল না।unitTest,VariantBuilderসাবটাইপে উপলভ্য যাHasUnitTest-এর এক্সটেনশন।VariantBuilder.targetSdkওtargetSdkPreview, কারণ লাইব্রেরিতে এগুলি অর্থপূর্ণ ছিল না। এর পরিবর্তেGeneratesApkBuilder.targetSdkবাGeneratesApkBuilder.targetSdkPreviewব্যবহার করুন।VariantBuilder.enableUnitTest, কারণ এটিcom.android.testপ্লাগ-ইনে প্রযোজ্য ছিল না।enableUnitTest,VariantBuilderসাবটাইপে উপলভ্য যাHasUnitTestBuilder-এর এক্সটেনশন।VariantBuilder.unitTestEnabledসরিয়ে দেওয়া হয়েছে এবং এর পরিবর্তে আরও ধারাবাহিকভাবে নাম দেওয়াenableUnitTestব্যবহার করা হয়েছে, যাVariantBuilderসাবটাইপ এক্সটেনশনHasUnitTestBuilder।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 কম্পাইলেশন চালু করে |
শুধুমাত্র সেইসব সাবপ্রোজেক্টে renderscript কম্পাইলেশন চালু করুন যেখানে
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
এর যেকোনও স্পেসিফিকেশন সেটি ওভাররাইড করবে। একাধিকবার উল্লেখ করা হলে, সবচেয়ে শক্তিশালী ভ্যালু
ব্যবহার করা হয়।
কম্প্যানিয়ন পদ্ধতিতে Keep সংক্রান্ত তথ্য প্রোপাগেট করা বন্ধ করা
কীপ রুল, ডিসুগারিংয়ের অধীন ইন্টারফেস পদ্ধতির সাথে ম্যাচ করলে, R8 আগে ইন্টার্নালি সিন্থেসাইজ করা কম্প্যানিয়ন পদ্ধতিতে অপ্টিমাইজেশন ডিসঅ্যালাও এবং সংকোচন ডিসঅ্যালাও বিট ট্রান্সফার করত।
AGP 9.0 থেকে শুরু করে, কীপ নিয়ম আর কম্প্যানিয়ন পদ্ধতির ক্ষেত্রে প্রযোজ্য হবে না। এটি এই সত্যের সাথে সামঞ্জস্যপূর্ণ যে, কিপ নিয়মগুলি অন্যান্য কম্পাইলার সিন্থেসাইজড ফিল্ড/মেথড/ক্লাসের ক্ষেত্রে প্রযোজ্য নয়।
অপ্টিমাইজ করার অনুমতি নেই এবং ছোট করার অনুমতি নেই বিটগুলি কম্প্যানিয়ন পদ্ধতিতে ট্রান্সফার করার মাধ্যমে, নিম্নলিখিত ব্যবহারের ক্ষেত্রে আগে কাজ করত:
default/static/privateইন্টারফেস পদ্ধতি সহ লাইব্রেরি কম্পাইল করুনminSdk< ২৪ এবং ইন্টারফেস পদ্ধতি বজায় রাখে এমন নিয়ম সহ DEX-এ।- ক্লাসপাথ ও
-applymapping-এ লাইব্রেরি সহ অ্যাপ কম্পাইল করুন। - অ্যাপ ও লাইব্রেরি মার্জ করুন।
মনে রাখবেন, এটি শুধুমাত্র -applymapping-এর সাথে কাজ করে, কারণ disallow
obfuscation বিটটি কম্প্যানিয়ন পদ্ধতিতে ট্রান্সফার করা হয় না—অর্থাৎ,
১ম ধাপ থেকে তৈরি কম্প্যানিয়ন ক্লাসে
অস্পষ্ট করা পদ্ধতির নাম থাকবে।
ভবিষ্যতে minSdk <
24-এর জন্য এই ব্যবহার আর কাজ করবে না। এর বিকল্প সমাধান হল নিম্নলিখিত কাজগুলি করা:
default/static/privateইন্টারফেস পদ্ধতির মাধ্যমে লাইব্রেরিকে ডিসুগার করুন যাতেminSdk< ২৪ সহ ক্লাস ফাইল থাকে।- R8 এবং এমন নিয়ম ব্যবহার করে ডেসুগার করা আর্টিফ্যাক্ট কম্পাইল করুন যা কম্প্যানিয়ন ক্লাসে মেথড রাখে।
- ক্লাসপাথে লাইব্রেরি সহ অ্যাপটি কম্পাইল করুন।
- অ্যাপ ও ডিসেগার করা আর্টিফ্যাক্ট মার্জ করুন।
এর আরেকটি পার্শ্বপ্রতিক্রিয়া হল যে ইন্টারফেস কম্প্যানিয়ন পদ্ধতির মধ্যে অ্যানোনিমাস এবং লোকাল ক্লাসের জন্য ইনার ক্লাস এবং এনক্লোজিং মেথড অ্যাট্রিবিউট আর রাখা সম্ভব নয়।
ডিফল্ট নির্গত সোর্স ফাইল পরিবর্তন করে r8-map-id-<MAP_ID> করুন
এই পরিবর্তন 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 (কোর লাইব্রেরি ডিসুগারিং) কনফিগার করে যাতে DEX
ফাইলে থাকা সব j$ ক্লাসে সিন্থেটিক ক্লাসের জন্য
নতুন ছোট করা ক্লাসের নাম ফর্ম্যাট ব্যবহার করা হয়। নতুন ক্লাসের নামে সাংখ্যিক আইডি (যেমন, $1) ব্যবহার করা হয়।
-addconfigurationdebugging-এর জন্য সহায়তা সরিয়ে দিন
AGP 9.0, -addconfigurationdebugging-এর জন্য সহায়তা সরিয়ে দেয়। ফ্ল্যাগ ব্যবহার করা হলে, কম্পাইলার এখন
একটি সতর্কতা জানায়।
D8/R8 থেকে L8 নিয়ম জেনারেট করার সুবিধা সরিয়ে দেওয়া
এই পরিবর্তনটি শুধুমাত্র D8/R8 কমান্ড লাইন বা সরাসরি API ব্যবহার করা ডেভেলপারদের জন্য প্রাসঙ্গিক।
D8 ও R8 থেকে L8-এর জন্য কীপ নিয়ম জেনারেট করার সুবিধা R8 9.0 সরিয়ে দেয়।
এই উদ্দেশ্যে আপনাকে TraceReferences ব্যবহার করতে হবে।
আরও নির্দিষ্টভাবে, D8Command.builder.setDesugaredLibraryKeepRuleConsumer এবং R8Command.Builder.setDesugaredLibraryKeepRuleConsumer পদ্ধতি সরিয়ে দেওয়া হয়েছে এবং D8 ও R8-এর কমান্ড লাইন
বিকল্প থেকে --desugared-lib-pg-conf-output-এর জন্য
সাপোর্ট সরিয়ে দেওয়া হয়েছে।
সমাধান করা সমস্যা
Android Gradle প্লাগ-ইন 9.0.0
| সমাধান করা সমস্যা | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Android Gradle Plugin |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Lint ইন্টিগ্রেশন |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Shrinker (R8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||