Android Gradle প্লাগ-ইন 8.0.0 হল একটি প্রধান রিলিজ যাতে বিভিন্ন ধরনের নতুন ফিচার ও উন্নতি অন্তর্ভুক্ত আছে।
মানানসই
| সর্বনিম্ন ভার্সন | ডিফল্ট ভার্সন | নোট | |
|---|---|---|---|
| Gradle | ৮.০ | ৮.০ | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK বিল্ড টুল | 30.0.3 | 30.0.3 | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন। |
| NDK | N/A | 25.1.8937393 | NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন। |
| JDK | 17 | 17 | আরও জানতে, JDK ভার্সন সেট করা দেখুন। |
প্যাচ রিলিজ
Android Gradle Plugin 8.0-এর জন্য প্যাচ রিলিজের তালিকা নিচে দেওয়া হল।
Android Gradle প্লাগ-ইন 8.0.2 (মে ২০২৩)
AGP 8.0.2-এ সমাধান করা ত্রুটির তালিকা দেখতে, Android Studio 2022.2.1-এ বন্ধ করা সমস্যা দেখুন।
Android Gradle প্লাগ-ইন 8.0.1 (মে ২০২৩)
এই ছোটখাটো আপডেটে নিম্নলিখিত সমস্যার সমাধান অন্তর্ভুক্ত রয়েছে:
| সমাধান করা সমস্যা | |
|---|---|
|
AGP 7.2.2 -> 7.4.0-এ আপগ্রেড করার পরে এই সমস্যা হয়েছে: "টেবিলে প্রদত্ত আইডি সহ কোনও VersionRequirement নেই"
|
|
|
R8 NullPointerException at markTypeAsLive AGP 7.4.1
|
|
|
[R8 4.0.53] Hard class verification failure on Android 11
|
|
ব্রেকিং পরিবর্তন: মডিউল-লেভেল বিল্ড স্ক্রিপ্টে নেমস্পেস প্রয়োজন
আপনাকে ম্যানিফেস্ট ফাইলের পরিবর্তে মডিউল-লেভেল build.gradle.kts ফাইলে নেমস্পেস সেট করতে হবে। AGP 7.3 থেকে শুরু করে আপনি namespace DSL প্রপার্টি
ব্যবহার করা শুরু করতে পারবেন। আরও জানতে, নেমস্পেস সেট করুন দেখুন।
নেমস্পেস DSL-এ মাইগ্রেট করার সময়, নিম্নলিখিত সমস্যাগুলি সম্পর্কে সচেতন থাকুন:
- AGP-এর আগের ভার্সন, কিছু ক্ষেত্রে, মূল নেমস্পেস বা অ্যাপ্লিকেশন আইডি থেকে ভুলভাবে টেস্ট নেমস্পেস অনুমান করে। AGP আপগ্রেড অ্যাসিস্ট্যান্ট আপগ্রেড ব্লক করে দেয়
যদি এটি দেখতে পায় যে আপনার প্রোজেক্টের প্রধান নেমস্পেস এবং টেস্ট নেমস্পেস
একই। আপগ্রেড ব্লক করা থাকলে, আপনাকে ম্যানুয়ালি
testNamespaceপরিবর্তন করতে হবে এবং সেই অনুযায়ী আপনার সোর্স কোড পরিবর্তন করতে হবে। - টেস্ট নেমস্পেস পরিবর্তন করার পরে, আপনার কোড কম্পাইল হতে পারে
কিন্তু রানটাইমে আপনার ইনস্ট্রুমেন্টেড টেস্ট ব্যর্থ হতে পারে। আপনার ইনস্ট্রুমেন্টেড টেস্ট সোর্স কোড যদি আপনার
androidTestএবং অ্যাপ সোর্স, উভয় জায়গাতেই সংজ্ঞায়িত কোনও রিসোর্সকে রেফার করে, তাহলে এটি হতে পারে।
আরও তথ্যের জন্য, সমস্যা #১৯১৮১৩৬৯১ কমেন্ট #১৯ দেখুন।
ব্রেকিং পরিবর্তন: বিল্ড বিকল্পের ডিফল্ট ভ্যালু
AGP 8.0 থেকে শুরু করে, বিল্ড পারফর্ম্যান্স উন্নত করতে এই ফ্ল্যাগগুলির ডিফল্ট মান পরিবর্তন করা হয়েছে। এইসব পরিবর্তনের কিছু ক্ষেত্রে সাপোর্ট করার জন্য আপনার কোড অ্যাডজাস্ট করতে সাহায্য পেতে, AGP আপগ্রেড অ্যাসিস্ট্যান্ট (টুল > AGP আপগ্রেড অ্যাসিস্ট্যান্ট) ব্যবহার করুন। আপগ্রেড অ্যাসিস্ট্যান্ট আপনাকে নতুন আচরণ বা সেটিং ফ্ল্যাগ অনুযায়ী আপনার কোড আপডেট করার জন্য গাইড করে যাতে আগের আচরণ বজায় থাকে।
| পতাকা | নতুন ডিফল্ট ভ্যালু | আগের ডিফল্ট ভ্যালু | নোট |
|---|---|---|---|
android.defaults.buildfeatures.buildconfig |
false |
true |
AGP 8.0 ডিফল্ট হিসেবে BuildConfig জেনারেট করে না। যেসব প্রোজেক্টে এই বিকল্প প্রয়োজন, সেখানে DSL ব্যবহার করে আপনাকে এই বিকল্প নির্দিষ্ট করতে হবে। |
android.defaults.buildfeatures.aidl |
false |
true |
AGP 8.0 ডিফল্ট হিসেবে AIDL সাপোর্ট চালু করে না। যেসব প্রোজেক্টে এই বিকল্প প্রয়োজন, সেখানে DSL ব্যবহার করে আপনাকে এটি উল্লেখ করতে হবে। AGP 9.0-এ এই ফ্ল্যাগ সরিয়ে দেওয়ার পরিকল্পনা করা হয়েছে। |
android.defaults.buildfeatures.renderscript |
false |
true |
AGP 8.0 ডিফল্ট হিসেবে RenderScript সাপোর্ট চালু করে না। যেসব প্রোজেক্টে এই বিকল্প প্রয়োজন, সেখানে DSL ব্যবহার করে আপনাকে এই বিকল্প উল্লেখ করতে হবে। এই ফ্ল্যাগটি AGP 9.0 থেকে সরিয়ে দেওয়ার পরিকল্পনা করা হয়েছে। |
android.nonFinalResIds |
true |
false |
AGP 8.0 ডিফল্ট হিসেবে নন-ফাইনাল ফিল্ড সহ R ক্লাস
জেনারেট করে। |
android.nonTransitiveRClass |
true |
false |
AGP 8.0 শুধুমাত্র বর্তমান মডিউলে সংজ্ঞায়িত রিসোর্সের জন্য R ক্লাস তৈরি করে। |
android.enableR8.fullMode |
true |
false |
AGP 8.0 ডিফল্ট হিসেবে R8 ফুল মোড চালু করে। আরও জানতে, R8 ফুল মোড দেখুন। |
ব্রেকিং পরিবর্তন: এনফোর্স করা বিল্ড বিকল্পের ভ্যালু
AGP 8.0 থেকে শুরু করে, আপনি আর এইসব ফ্ল্যাগের ভ্যালু পরিবর্তন করতে পারবেন না। আপনি
gradle.properties ফাইলে সেগুলি উল্লেখ করলে, ভ্যালু উপেক্ষা করা হয় এবং AGP
সতর্কতা প্রিন্ট করে।
| পতাকা | এনফোর্স করা ভ্যালু | নোট |
|---|---|---|
android.dependencyResolutionAtConfigurationTime.warn |
true |
কনফিগারেশন ফেজ চলাকালীন AGP 8.0 কনফিগারেশন রেজোলিউশন শনাক্ত করলে, এটি একটি সতর্কতা জারি করে, কারণ এটি Gradle কনফিগারেশন টাইমকে নেতিবাচকভাবে প্রভাবিত করে। |
android.r8.failOnMissingClasses |
true |
আরও ভালো DEX অপ্টিমাইজেশন নিশ্চিত করার জন্য ক্লাস মিসিং থাকলে,
R8 ব্যবহার করে এমন বিল্ড AGP 8.0-এ কাজ করে না। এই সমস্যার সমাধান করতে, আপনাকে
বাদ পড়ে যাওয়া লাইব্রেরি বা -dontwarn রাখার নিয়ম যোগ করতে হবে। আরও জানতে,
R8 শ্রিঙ্কারে ক্লাস সংক্রান্ত সতর্কতা না থাকা
দেখুন। |
android.testConfig.useRelativePath |
true |
ইউনিট টেস্টে Android রিসোর্স, অ্যাসেট ও ম্যানিফেস্ট ব্যবহার করার জন্য সহায়তা চালু করা থাকলে,
AGP 8.0 একটি test_config.properties ফাইল তৈরি করে
যেটিতে শুধুমাত্র রিলেটিভ পাথ
থাকে। এটি নিশ্চিত করে যে Android ইউনিট টেস্ট সবসময় Gradle
বিল্ড ক্যাশে ব্যবহার করতে পারে। |
android.useNewJarCreator |
true |
বিল্ড পারফর্ম্যান্স উন্নত করতে JAR ফাইল তৈরি করার সময় AGP, Zipflinger লাইব্রেরি ব্যবহার করে। |
android.bundletool.includeRepositoriesInDependencyReport |
true |
AAB ও APK-তে SDK ডিপেন্ডেন্সি সংক্রান্ত তথ্য যোগ করার সুবিধা চালু করা হলে, AGP 8.0 এই তথ্যে প্রোজেক্ট রিপোজিটরির একটি তালিকাও যোগ করে। আরও জানতে, Play Console-এর জন্য ডিপেন্ডেন্সি সংক্রান্ত তথ্য দেখুন। |
android.enableArtProfiles |
true |
বেসলাইন প্রোফাইল এখন সবসময় জেনারেট করা হয়। আরও বিবরণের জন্য বেসলাইন প্রোফাইল দেখুন। |
android.enableNewResourceShrinker |
true |
ডিফল্ট হিসেবে নতুন রিসোর্স শ্রিঙ্কার ইমপ্লিমেন্টেশন ব্যবহার করুন। নতুন রিসোর্স শ্রিঙ্কার ডাইনামিক ফিচারের জন্য সহায়তা অন্তর্ভুক্ত করে। |
android.enableSourceSetPathsMap |
true |
আপেক্ষিক রিসোর্স পাথ ম্যাপিং কম্পিউট করার জন্য ব্যবহার করা হয়, যাতে Gradle বিল্ড আরও ঘনঘন আপ-টু-ডেট থাকে। |
android.cacheCompileLibResources |
true |
কম্পাইল করা লাইব্রেরি রিসোর্স এখন ডিফল্ট হিসেবে ক্যাশে করা যেতে পারে কারণ Gradle
প্রোজেক্ট লোকেশনের সাপেক্ষে রিসোর্স ফাইল ট্র্যাক করে। android.enableSourceSetPathsMap
চালু করতে হবে। |
android.disableAutomaticComponentCreation |
true |
AGP 8.0 ডিফল্ট হিসেবে কোনও SoftwareComponent তৈরি করে না। পরিবর্তে, AGP শুধুমাত্র সেইসব ভেরিয়েন্টের জন্য SoftwareComponents তৈরি করে যেগুলি প্রকাশ করার জন্য কনফিগার করা হয়েছে এবং এর জন্য প্রকাশনা DSL ব্যবহার করা হয়। |
এক্সিকিউশন প্রোফাইলের জন্য নতুন স্টেবল ফ্ল্যাগ
AGP-তে নতুন ফ্ল্যাগ android.settings.executionProfile অন্তর্ভুক্ত আছে। SettingsExtension থেকে ডিফল্ট এক্সিকিউশন প্রোফাইল ওভাররাইড করতে
এই ফ্ল্যাগ ব্যবহার করুন। আরও
জানতে, সেটিংস প্লাগ-ইন ডকুমেন্টেশন দেখুন।
এক্সপেরিমেন্টাল ফ্ল্যাগ প্রিভিউ করতে, প্রিভিউ রিলিজ নোট দেখুন।
Kotlin lazy প্রপার্টি অ্যাসাইনমেন্ট কাজ করে না
আপনার বিল্ড স্ক্রিপ্টের জন্য Gradle-এর Kotlin DSL ব্যবহার করলে, মনে রাখবেন যে Android
Studio এবং AGP 8.0, = অপারেটর ব্যবহার করে এক্সপেরিমেন্টাল প্রপার্টি অ্যাসাইনমেন্ট
সমর্থন করে না। এই ফিচার সম্পর্কে আরও জানতে, রিলিজ নোট এবং ডকুমেন্টেশন দেখুন।
বিল্ড অ্যানালাইজার টাস্কের বিভাগ
Android Studio Flamingo থেকে শুরু করে, বিল্ড অ্যানালাইজারে এমন টাস্কের জন্য একটি নতুন ডিফল্ট ভিউ রয়েছে যা বিল্ডের সময়কালকে প্রভাবিত করে। আপনার প্রোজেক্টে AGP 8.0 বা তার পরবর্তী ভার্সন ব্যবহার করা হলে, টাস্ক আলাদা আলাদা করে দেখানোর পরিবর্তে, বিল্ড অ্যানালাইজার সেগুলিকে বিভাগ অনুযায়ী গ্রুপ করে। যেমন, Android রিসোর্স, Kotlin বা Dexing-এর মতো নির্দিষ্ট টাস্ক একসাথে গ্রুপ করা হয় এবং তারপরে বিল্ডের সময়সীমা অনুযায়ী সাজানো হয়। এটি আপনাকে শনাক্ত করতে সাহায্য করে কোন বিভাগটি বিল্ড টাইমে সবচেয়ে বেশি প্রভাব ফেলে। প্রতিটি বিভাগ বড় করলে সংশ্লিষ্ট টাস্কের তালিকা দেখা যায়। গ্রুপ না করে, আলাদা আলাদাভাবে টাস্ক দেখতে, এইভাবে বাছাই করা গ্রুপ ড্রপ-ডাউন ব্যবহার করুন।

নতুন সেটিংস প্লাগ-ইন
AGP 8.0.0-alpha09 নতুন সেটিংস প্লাগ-ইন নিয়ে এসেছে। সেটিংস প্লাগ-ইন আপনাকে গ্লোবাল কনফিগারেশন—যে কনফিগারেশন সব মডিউলে প্রযোজ্য—এক জায়গায় সেন্ট্রালাইজ করতে দেয় যাতে আপনাকে একাধিক মডিউলে কনফিগারেশন কপি ও পেস্ট করতে না হয়। এছাড়াও, আপনি টুল এক্সিকিউশন প্রোফাইল বা টুল কীভাবে চালাতে হবে তার জন্য বিভিন্ন নির্দেশাবলী তৈরি করতে এবং সেগুলির মধ্যে পরিবর্তন করতে সেটিংস প্লাগ-ইন ব্যবহার করতে পারেন।
সেটিংস প্লাগ-ইন ব্যবহার করতে, settings.gradle ফাইলে প্লাগ-ইন প্রয়োগ করুন:
apply plugin 'com.android.settings'
গ্লোবাল কনফিগারেশন সেন্ট্রালাইজ করা
গ্লোবাল কনফিগারেশন কনফিগার করতে, settings.gradle ফাইলে নতুন android ব্লক ব্যবহার করুন। এখানে একটি উদাহরণ দেওয়া হল:
android {
compileSdk 31
minSdk 28
...
}
টুল এক্সিকিউশন প্রোফাইল
এছাড়াও, সেটিংস প্লাগ-ইন আপনাকে কিছু টুলের জন্য এক্সিকিউশন প্রোফাইল তৈরি করতে দেয়। একটি এক্সিকিউশন প্রোফাইল নির্ধারণ করে যে কীভাবে একটি টুল চালানো হয়; আপনি পরিবেশের উপর নির্ভর করে বিভিন্ন এক্সিকিউশন প্রোফাইল বেছে নিতে পারেন। একটি এক্সিকিউশন প্রোফাইলে, আপনি একটি টুলের জন্য JVM আর্গুমেন্ট সেট করতে পারেন এবং এটি একটি পৃথক প্রসেসে চালানোর জন্য কনফিগার করতে পারেন। শুধুমাত্র R8 টুল কাজ করে।
এক্সিকিউশন প্রোফাইল তৈরি করুন এবং
settings.gradle ফাইলে ডিফল্ট এক্সিকিউশন প্রোফাইল সেট করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
android {
execution {
profiles {
high {
r8 {
jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
runInSeparateProcess true
}
}
low {
r8 {
jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
runInSeparateProcess true
}
}
ci {
r8.runInSeparateProcess false
}
}
defaultProfile "low"
}
}
ডিফল্ট প্রোফাইল ওভাররাইড করতে, gradle.properties ফাইলের
android.experimental.settings.executionProfile প্রপার্টি ব্যবহার করে অন্য প্রোফাইল বেছে নিন:
android.experimental.settings.executionProfile=high
এছাড়াও, আপনি কমান্ড লাইন ব্যবহার করে এই প্রপার্টি সেট করতে পারবেন, যা আপনাকে বিভিন্ন ওয়ার্কফ্লো সেট-আপ করতে দেয়। যেমন, আপনার যদি একটি কন্টিনিউয়াস ইন্টিগ্রেশন ওয়ার্কফ্লো থাকে,
তাহলে আপনি settings.gradle ফাইল পরিবর্তন না করেই এক্সিকিউশন প্রোফাইল পরিবর্তন করতে
কমান্ড লাইন ব্যবহার করতে পারেন:
./gradlew assembleRelease \
-Pandroid.experimental.settings.executionProfile=ci
AGP 8.0 চালানোর জন্য JDK 17 প্রয়োজন
আপনার অ্যাপ তৈরি করার জন্য Android Gradle প্লাগ-ইন 8.0 ব্যবহার করার সময়, Gradle রান করার জন্য এখন JDK 17 প্রয়োজন। Android Studio Flamingo-তে JDK 17 বান্ডেল করা থাকে এবং ডিফল্ট হিসেবে এটি ব্যবহার করার জন্য Gradle কনফিগার করে, যার অর্থ হল বেশিরভাগ Android Studio ব্যবহারকারীকে তাদের প্রোজেক্টে কোনও কনফিগারেশন পরিবর্তন করতে হয় না।
Android Studio-র মধ্যে AGP-এর মাধ্যমে ব্যবহৃত JDK ভার্সন ম্যানুয়ালি সেট করতে হলে, আপনাকে JDK 17 বা তার পরবর্তী যেকোনও ভার্সন ব্যবহার করতে হবে।
Android Studio থেকে আলাদাভাবে AGP ব্যবহার করার সময়, JDK 17-এর ইনস্টলেশন ডিরেক্টরিতে
JAVA_HOME এনভায়রনমেন্ট ভেরিয়েবল বা
-Dorg.gradle.java.home কমান্ড-লাইন বিকল্প সেট করে
JDK ভার্সন আপগ্রেড করুন।
সমাধান করা সমস্যা
Android Gradle প্লাগ-ইন 8.0.2
| সমাধান করা সমস্যা | |||||
|---|---|---|---|---|---|
| Shrinker (R8) |
|
||||
Android Gradle প্লাগ-ইন 8.0.1
| সমাধান করা সমস্যা | ||||
|---|---|---|---|---|
| Shrinker (R8) |
|
|||
Android Gradle প্লাগ-ইন 8.0.0
| সমাধান করা সমস্যা | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Android Gradle প্লাগ-ইন |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Dexer (D8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Lint |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Lint ইন্টিগ্রেশন |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Shrinker (R8) |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||