অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.০ একটি প্রধান রিলিজ, যাতে বিভিন্ন নতুন বৈশিষ্ট্য এবং উন্নতি অন্তর্ভুক্ত রয়েছে।
সামঞ্জস্যতা
| সর্বনিম্ন সংস্করণ | ডিফল্ট সংস্করণ | নোট | |
|---|---|---|---|
| গ্রেডল | ৮.০ | ৮.০ | আরও জানতে, Gradle আপডেট করা দেখুন। |
| এসডিকে বিল্ড টুলস | ৩০.০.৩ | ৩০.০.৩ | এসডিকে বিল্ড টুলস ইনস্টল বা কনফিগার করুন । |
| এনডিকে | প্রযোজ্য নয় | ২৫.১.৮৯৩৭৩৯৩ | NDK-এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন । |
| জেডিকে | ১৭ | ১৭ | আরও জানতে, JDK সংস্করণ নির্ধারণ দেখুন। |
প্যাচ রিলিজ
নিচে অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০-এর প্যাচ রিলিজগুলোর তালিকা দেওয়া হলো।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.২ (মে ২০২৩)
AGP 8.0.2-এ সমাধান করা বাগগুলির তালিকার জন্য, Android Studio 2022.2.1-এর বন্ধ ইস্যুগুলি দেখুন।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.১ (মে ২০২৩)
এই ছোট আপডেটটিতে নিম্নলিখিত বাগ ফিক্সগুলো অন্তর্ভুক্ত করা হয়েছে:
| সমাধান করা সমস্যাগুলি | |
|---|---|
AGP 7.2.2 থেকে 7.4.0-এ আপগ্রেড করার পর ত্রুটি: "টেবিলে প্রদত্ত আইডি সহ কোনো VersionRequirement নেই"। | |
R8 NullPointerException at markTypeAsLive AGP 7.4.1 | |
[R8 4.0.53] অ্যান্ড্রয়েড ১১-এ হার্ড ক্লাস ভেরিফিকেশন ব্যর্থতা | |
বড় পরিবর্তন: মডিউল-স্তরের বিল্ড স্ক্রিপ্টে নেমস্পেস আবশ্যক।
আপনাকে ম্যানিফেস্ট ফাইলের পরিবর্তে মডিউল-স্তরের build.gradle.kts ফাইলে নেমস্পেস সেট করতে হবে। আপনি AGP 7.3 থেকে namespace DSL প্রপার্টি ব্যবহার শুরু করতে পারেন। আরও জানতে, "একটি নেমস্পেস সেট করুন " দেখুন।
নেমস্পেস ডিএসএল-এ স্থানান্তরিত করার সময় নিম্নলিখিত বিষয়গুলো সম্পর্কে সচেতন থাকুন:
- AGP-এর পূর্ববর্তী সংস্করণগুলি কিছু ক্ষেত্রে প্রধান নেমস্পেস বা অ্যাপ্লিকেশন আইডি থেকে টেস্ট নেমস্পেস ভুলভাবে অনুমান করে। AGP আপগ্রেড অ্যাসিস্ট্যান্ট যদি দেখে যে আপনার প্রোজেক্টের প্রধান নেমস্পেস এবং টেস্ট নেমস্পেস একই, তবে এটি আপগ্রেডটি আটকে দেয়। যদি আপগ্রেডটি আটকে যায়, তবে আপনাকে ম্যানুয়ালি
testNamespaceপরিবর্তন করতে হবে এবং সেই অনুযায়ী আপনার সোর্স কোড সংশোধন করতে হবে। - টেস্ট নেমস্পেস পরিবর্তন করার পর এমনটা হতে পারে যে, আপনার কোড কম্পাইল হলেও রানটাইমে আপনার ইন্সট্রুমেন্টেড টেস্টগুলো ব্যর্থ হয়ে যাবে। এমনটা হতে পারে যদি আপনার ইন্সট্রুমেন্টেড টেস্টের সোর্স কোড এমন কোনো রিসোর্সকে রেফারেন্স করে, যা আপনার
androidTestএবং app উভয় সোর্সেই সংজ্ঞায়িত আছে।
আরও তথ্যের জন্য, ইস্যু #191813691-এর মন্তব্য #19 দেখুন।
ব্রেকিং পরিবর্তন: বিল্ড অপশনের ডিফল্ট মান
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 কনফিগারেশন পর্যায়ে কনফিগারেশন রেজোলিউশন শনাক্ত করলে একটি সতর্কবার্তা দেয়, কারণ এটি গ্রেডল কনফিগারেশনের সময়কে নেতিবাচকভাবে প্রভাবিত করে। |
android.r8.failOnMissingClasses | true | উন্নততর DEX অপটিমাইজেশন নিশ্চিত করার জন্য, কোনো ক্লাস অনুপস্থিত থাকলে AGP 8.0 R8 ব্যবহৃত বিল্ডগুলোকে ব্যর্থ করে দেয়। এর সমাধান করতে, আপনাকে অনুপস্থিত লাইব্রেরিগুলো যোগ করতে হবে অথবা -dontwarn keep রুলগুলো চালু রাখতে হবে। আরও বিস্তারিত জানতে, R8 shrinker-এ Missing class warnings দেখুন। |
android.testConfig.useRelativePath | true | ইউনিট টেস্টে অ্যান্ড্রয়েড রিসোর্স, অ্যাসেট এবং ম্যানিফেস্ট ব্যবহারের সমর্থন সক্রিয় করা হলে, AGP 8.0 একটি test_config.properties ফাইল তৈরি করে যাতে শুধুমাত্র রিলেটিভ পাথ থাকে। এটি নিশ্চিত করে যে অ্যান্ড্রয়েড ইউনিট টেস্টগুলো সর্বদা গ্রেডল বিল্ড ক্যাশে ব্যবহার করতে পারে। |
android.useNewJarCreator | true | বিল্ড পারফরম্যান্স উন্নত করার জন্য AGP JAR ফাইল তৈরির সময় Zipflinger লাইব্রেরি ব্যবহার করে। |
android.bundletool.includeRepositoriesInDependencyReport | true | যখন AAB এবং APK-তে SDK নির্ভরতার তথ্য যোগ করার বিকল্পটি চালু করা হয়, তখন AGP 8.0 এই তথ্যের সাথে প্রোজেক্ট রিপোজিটরিগুলোর একটি তালিকাও যোগ করে। আরও জানতে, প্লে কনসোলের জন্য নির্ভরতার তথ্য দেখুন। |
android.enableArtProfiles | true | বেসলাইন প্রোফাইল এখন থেকে সর্বদা তৈরি করা হয়। বিস্তারিত জানতে বেসলাইন প্রোফাইল দেখুন। |
android.enableNewResourceShrinker | true | ডিফল্টরূপে নতুন রিসোর্স শ্রিংকার ইমপ্লিমেন্টেশনটি ব্যবহার করুন। নতুন রিসোর্স শ্রিংকারটিতে ডাইনামিক ফিচারের জন্য সাপোর্ট অন্তর্ভুক্ত রয়েছে। |
android.enableSourceSetPathsMap | true | আপেক্ষিক রিসোর্স পাথ ম্যাপিং গণনা করার জন্য ব্যবহৃত হয়, ফলে গ্রেডল বিল্ডগুলো আরও ঘন ঘন হালনাগাদ থাকে। |
android.cacheCompileLibResources | true | কম্পাইল করা লাইব্রেরি রিসোর্সগুলো এখন ডিফল্টরূপে ক্যাশ করা যায়, কারণ গ্রেডল প্রজেক্টের অবস্থানের সাপেক্ষে রিসোর্স ফাইলগুলো ট্র্যাক করে। এর জন্য android.enableSourceSetPathsMap সক্রিয় করা আবশ্যক। |
android.disableAutomaticComponentCreation | true | AGP 8.0 ডিফল্টরূপে কোনো SoftwareComponent তৈরি করে না। এর পরিবর্তে, AGP শুধুমাত্র সেইসব ভ্যারিয়েন্টের জন্য SoftwareComponent তৈরি করে, যেগুলো পাবলিশিং DSL ব্যবহার করে প্রকাশ করার জন্য কনফিগার করা থাকে। |
এক্সিকিউশন প্রোফাইলের জন্য নতুন স্থিতিশীল ফ্ল্যাগ
AGP-তে android.settings.executionProfile নামে একটি নতুন ফ্ল্যাগ অন্তর্ভুক্ত করা হয়েছে। SettingsExtension থেকে ডিফল্ট এক্সিকিউশন প্রোফাইল ওভাররাইড করতে এই ফ্ল্যাগটি ব্যবহার করুন। আরও জানতে, সেটিংস প্লাগইন ডকুমেন্টেশন দেখুন।
পরীক্ষামূলক ফ্ল্যাগগুলির প্রিভিউ দেখতে, প্রিভিউ রিলিজ নোটগুলি দেখুন।
কোটলিনে লেজি প্রপার্টি অ্যাসাইনমেন্ট সমর্থিত নয়
আপনি যদি আপনার বিল্ড স্ক্রিপ্টের জন্য গ্রেডলের কোটলিন ডিএসএল (Gradle's Kotlin DSL) ব্যবহার করেন, তবে মনে রাখবেন যে অ্যান্ড্রয়েড স্টুডিও এবং এজিপি ৮.০ (AGP 8.0) ‘ = অপারেটর ব্যবহার করে পরীক্ষামূলক প্রপার্টি অ্যাসাইনমেন্ট সমর্থন করে না। এই বৈশিষ্ট্যটি সম্পর্কে আরও তথ্যের জন্য, রিলিজ নোট এবং ডকুমেন্টেশন দেখুন।
অ্যানালাইজার টাস্ক বিভাগ তৈরি করুন
অ্যান্ড্রয়েড স্টুডিও ফ্লেমিঙ্গো থেকে শুরু করে, বিল্ড অ্যানালাইজারে সেইসব টাস্কের জন্য একটি নতুন ডিফল্ট ভিউ রয়েছে যা বিল্ডের সময়কালকে প্রভাবিত করে। যদি আপনার প্রজেক্টে AGP 8.0 বা তার উচ্চতর সংস্করণ ব্যবহৃত হয়, তাহলে টাস্কগুলোকে আলাদাভাবে দেখানোর পরিবর্তে বিল্ড অ্যানালাইজার সেগুলোকে ক্যাটাগরি অনুযায়ী গ্রুপ করে। উদাহরণস্বরূপ, অ্যান্ড্রয়েড রিসোর্স, কোটলিন বা ডেক্সিং-এর জন্য নির্দিষ্ট টাস্কগুলোকে একসাথে গ্রুপ করা হয় এবং তারপর বিল্ডের সময়কাল অনুসারে সাজানো হয়। এর ফলে কোন ক্যাটাগরিটি বিল্ডের সময়ের উপর সবচেয়ে বেশি প্রভাব ফেলে, তা সহজেই জানা যায়। প্রতিটি ক্যাটাগরি এক্সপ্যান্ড করলে সংশ্লিষ্ট টাস্কগুলোর একটি তালিকা দেখা যায়। গ্রুপ না করে টাস্কগুলো আলাদাভাবে দেখতে, 'Group by ' ড্রপ-ডাউনটি ব্যবহার করুন।

নতুন সেটিংস প্লাগইন
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 প্রয়োজন।
আপনার অ্যাপ বিল্ড করার জন্য যখন অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০ ব্যবহার করা হয়, তখন গ্রেডল চালানোর জন্য এখন জেডিকে ১৭ প্রয়োজন। অ্যান্ড্রয়েড স্টুডিও ফ্লেমিঙ্গো জেডিকে ১৭ বান্ডল করে এবং ডিফল্টরূপে এটি ব্যবহার করার জন্য গ্রেডলকে কনফিগার করে দেয়, যার অর্থ হলো বেশিরভাগ অ্যান্ড্রয়েড স্টুডিও ব্যবহারকারীকে তাদের প্রোজেক্টে কোনো কনফিগারেশন পরিবর্তন করতে হয় না।
অ্যান্ড্রয়েড স্টুডিওর ভেতরে যদি AGP দ্বারা ব্যবহৃত JDK ভার্সন ম্যানুয়ালি সেট করার প্রয়োজন হয়, তাহলে আপনাকে JDK 17 বা তার উচ্চতর সংস্করণ ব্যবহার করতে হবে।
অ্যান্ড্রয়েড স্টুডিও থেকে স্বাধীনভাবে এজিপি (AGP) ব্যবহার করার সময়, JAVA_HOME এনভায়রনমেন্ট ভেরিয়েবল অথবা -Dorg.gradle.java.home কমান্ড-লাইন অপশনটিকে আপনার জেডিকে (JDK) ১৭-এর ইনস্টলেশন ডিরেক্টরিতে সেট করে জেডিকে সংস্করণ আপগ্রেড করুন।
সমাধান করা সমস্যাগুলি
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.২
| সমাধান করা সমস্যাগুলি | |||||
|---|---|---|---|---|---|
| সঙ্কোচনকারী (R8) |
| ||||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.১
| সমাধান করা সমস্যাগুলি | ||||
|---|---|---|---|---|
| সঙ্কোচনকারী (R8) |
| |||
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.০
| সমাধান করা সমস্যাগুলি | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| অ্যান্ড্রয়েড গ্রেডল প্লাগইন |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ডেক্সার (ডি৮) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| লিন্ট |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| লিন্ট ইন্টিগ্রেশন |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| সঙ্কোচনকারী (R8) |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||