অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.২.০ (মার্চ ২০২১)
সামঞ্জস্যতা
| সর্বনিম্ন সংস্করণ | ডিফল্ট সংস্করণ | নোট | |
|---|---|---|---|
| গ্রেডল | ৬.৭.১ | প্রযোজ্য নয় | আরও জানতে, Gradle আপডেট করা দেখুন। |
| এসডিকে বিল্ড টুলস | ৩০.০.২ | ৩০.০.২ | এসডিকে বিল্ড টুলস ইনস্টল বা কনফিগার করুন । |
| এনডিকে | প্রযোজ্য নয় | ২১.৪.৭০৭৫৫২৯ | NDK-এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন । |
নতুন বৈশিষ্ট্য
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের এই সংস্করণে নিম্নলিখিত নতুন বৈশিষ্ট্যগুলো অন্তর্ভুক্ত করা হয়েছে।
ডিফল্টরূপে জাভা ভাষার সংস্করণ ৮
সংস্করণ ৪.২ থেকে শুরু করে, AGP ডিফল্টরূপে জাভা ৮ ল্যাঙ্গুয়েজ লেভেল ব্যবহার করবে। জাভা ৮ বেশ কিছু নতুন ল্যাঙ্গুয়েজ ফিচার ব্যবহারের সুযোগ দেয়, যার মধ্যে রয়েছে ল্যাম্বডা এক্সপ্রেশন, মেথড রেফারেন্স এবং স্ট্যাটিক ইন্টারফেস মেথড। সমর্থিত ফিচারগুলোর সম্পূর্ণ তালিকার জন্য জাভা ৮ ডকুমেন্টেশন দেখুন।
পূর্বের আচরণ বজায় রাখতে, আপনার মডিউল-স্তরের build.gradle.kts অথবা build.gradle ফাইলে স্পষ্টভাবে Java 7 উল্লেখ করুন:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}নতুন JVM রিসোর্স কম্পাইলার
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.২ টুলের নতুন JVM রিসোর্স কম্পাইলারটি AAPT2 রিসোর্স কম্পাইলারের কিছু অংশ প্রতিস্থাপন করে, যা বিল্ড পারফরম্যান্স উন্নত করতে পারে, বিশেষ করে উইন্ডোজ মেশিনে। নতুন JVM রিসোর্স কম্পাইলারটি ডিফল্টরূপে সক্রিয় থাকে।
v3 এবং v4 স্বাক্ষর এখন সমর্থিত
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.২ এখন APK v3 এবং APK v4 সাইনিং ফরম্যাট সমর্থন করে। আপনার বিল্ডে এই ফরম্যাটগুলোর এক বা উভয়টি সক্রিয় করতে, আপনার মডিউল-স্তরের build.gradle অথবা build.gradle.kts ফাইলে নিম্নলিখিত প্রোপার্টিগুলো যোগ করুন:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}APK v4 সাইনিং আপনাকে Android 11-এর ADB ইনক্রিমেন্টাল APK ইনস্টলেশন ব্যবহার করে দ্রুত বড় আকারের APK ডেপ্লয় করার সুযোগ দেয়। এই নতুন ফ্ল্যাগটি ডেপ্লয়মেন্ট প্রক্রিয়ায় APK সাইনিং ধাপটির দায়িত্ব নেয়।
প্রতিটি ভ্যারিয়েন্টের জন্য অ্যাপ সাইনিং কনফিগার করুন
এখন অ্যান্ড্রয়েড গ্রেডল প্লাগইনে প্রতিটি ভ্যারিয়েন্টের জন্য অ্যাপ সাইনিং চালু বা বন্ধ করা সম্ভব।
এই উদাহরণটি দেখায় কিভাবে Kotlin বা Groovy-তে onVariants() পদ্ধতি ব্যবহার করে প্রতিটি ভ্যারিয়েন্টের জন্য অ্যাপ সাইনিং সেট করতে হয়:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
}) নতুন গ্রেডল প্রপার্টি: android.native.buildOutput
বিল্ড আউটপুটে অপ্রয়োজনীয় বার্তা কমাতে, AGP 4.2 CMake এবং ndk-build ব্যবহারকারী নেটিভ বিল্ডগুলো থেকে মেসেজ ফিল্টার করে এবং ডিফল্টরূপে শুধুমাত্র C/C++ কম্পাইলারের আউটপুট প্রদর্শন করে। পূর্বে, বিল্ড করা প্রতিটি ফাইলের জন্য এক লাইনের আউটপুট তৈরি হতো, যার ফলে প্রচুর পরিমাণে তথ্যমূলক মেসেজ তৈরি হতো।
আপনি যদি নেটিভ আউটপুটের সম্পূর্ণ অংশ দেখতে চান, তাহলে নতুন Gradle প্রপার্টি android.native.buildOutput কে verbose এ সেট করুন।
আপনি এই প্রপার্টিটি gradle.properties ফাইলে অথবা কমান্ড লাইনের মাধ্যমে সেট করতে পারেন।
gradle.properties
android.native.buildOutput=verbose
কমান্ড লাইন
-Pandroid.native.buildOutput=verbose
এই প্রপার্টির ডিফল্ট মান হলো quiet ।
gradle.properties ফাইলগুলির আচরণ পরিবর্তন
AGP 4.2 থেকে শুরু করে, সাবপ্রজেক্ট থেকে গ্রেডল প্রোপার্টি ওভাররাইড করা আর সম্ভব নয়। অন্য কথায়, আপনি যদি রুট প্রজেক্টের পরিবর্তে কোনো সাবপ্রজেক্টের gradle.properties ফাইলে কোনো প্রোপার্টি ডিক্লেয়ার করেন, তবে সেটি উপেক্ষা করা হবে।
উদাহরণস্বরূপ, পূর্ববর্তী রিলিজগুলিতে, AGP <var>projectDir</var>/gradle.properties , <var>projectDir</var>/app/gradle.properties , <var>projectDir</var>/library/gradle.properties ইত্যাদি থেকে ভ্যালু রিড করত। অ্যাপ মডিউলগুলির ক্ষেত্রে, যদি একই Gradle প্রপার্টি <var>projectDir</var>/gradle.properties এবং <var>projectDir</var>/app/gradle.properties উভয় স্থানেই উপস্থিত থাকত, তাহলে <var>projectDir</var>/app/gradle.properties থেকে প্রাপ্ত ভ্যালুটি অগ্রাধিকার পেত।
AGP 4.2-এ এই আচরণটি পরিবর্তন করা হয়েছে, এবং AGP এখন সাবপ্রজেক্টের gradle.properties থেকে ভ্যালু লোড করবে না (যেমন, <var>projectDir</var>/app/gradle.properties )। এই পরিবর্তনটি Gradle-এর নতুন আচরণকে প্রতিফলিত করে এবং কনফিগারেশন ক্যাশিংকে সমর্থন করে।
gradle.properties ফাইলে মান নির্ধারণ করার বিষয়ে আরও তথ্যের জন্য, Gradle ডক্স দেখুন।
গ্রেডল সামঞ্জস্যতা এবং কনফিগারেশন পরিবর্তন
অ্যান্ড্রয়েড স্টুডিওতে চালানোর সময়, গ্রেডল বিল্ড টুল স্টুডিওর সাথে থাকা JDK ব্যবহার করে। পূর্ববর্তী রিলিজগুলোতে, স্টুডিওর সাথে JDK 8 বান্ডেল করা থাকতো। কিন্তু 4.2 সংস্করণে, এর পরিবর্তে এখন JDK 11 বান্ডেল করা হয়েছে। গ্রেডল চালানোর জন্য নতুন বান্ডেল করা JDK ব্যবহার করলে, গার্বেজ কালেক্টরের পরিবর্তনের কারণে কিছু অসামঞ্জস্যতা দেখা দিতে পারে বা JVM-এর পারফরম্যান্সে প্রভাব পড়তে পারে। এই সমস্যাগুলো নিচে বর্ণনা করা হলো।
দ্রষ্টব্য: যদিও আমরা JDK 11 দিয়ে Gradle চালানোর পরামর্শ দিই, তবুও প্রজেক্ট স্ট্রাকচার ডায়ালগে Gradle চালানোর জন্য ব্যবহৃত JDK পরিবর্তন করা সম্ভব। এই সেটিংটি পরিবর্তন করলে শুধুমাত্র Gradle চালানোর জন্য ব্যবহৃত JDK-ই পরিবর্তিত হবে, এবং Studio নিজে চালানোর জন্য ব্যবহৃত JDK পরিবর্তিত হবে না।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন (AGP) এর সাথে স্টুডিওর সামঞ্জস্যতা
অ্যান্ড্রয়েড স্টুডিও ৪.২ এজিপি ৩.১ এবং তার উচ্চতর সংস্করণে ব্যবহৃত প্রোজেক্ট খুলতে পারে, যদি এজিপি-তে গ্রেডল ৪.৮.১ বা তার উচ্চতর সংস্করণ চালিত হয়। গ্রেডল সামঞ্জস্যতা সম্পর্কে আরও তথ্যের জন্য, গ্রেডল আপডেট দেখুন।
JDK 11-এর জন্য Gradle বিল্ড অপ্টিমাইজ করা
JDK 11-এর এই আপডেটটি JVM গার্বেজ কালেক্টরের ডিফল্ট কনফিগারেশনকে প্রভাবিত করে, কারণ JDK 8 প্যারালাল গার্বেজ কালেক্টর ব্যবহার করে, আর JDK 11 ব্যবহার করে G1 গার্বেজ কালেক্টর ।
বিল্ড পারফরম্যান্স সম্ভাব্যভাবে উন্নত করার জন্য, আমরা প্যারালাল গার্বেজ কালেক্টর ব্যবহার করে আপনার গ্রেডল বিল্ডগুলো পরীক্ষা করার পরামর্শ দিই। gradle.properties ফাইলে নিম্নলিখিত বিষয়গুলো সেট করুন:
org.gradle.jvmargs=-XX:+UseParallelGCএই ফিল্ডে যদি আগে থেকেই অন্য অপশন সেট করা থাকে, তাহলে একটি নতুন অপশন যোগ করুন:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCবিভিন্ন কনফিগারেশনে বিল্ডের গতি পরিমাপ করতে, আপনার বিল্ড প্রোফাইল করুন (Profile your build) দেখুন।
minSdk = 28 বা তার বেশি হলে APK-তে DEX ফাইলগুলি অসংকুচিত থাকে।
minSdk = 28 বা তার বেশি হলে, AGP এখন ডিফল্টরূপে DEX ফাইলগুলোকে অসংকুচিত অবস্থায় APK-তে প্যাকেজ করে। এর ফলে APK-এর আকার বেড়ে যায়, কিন্তু ডিভাইসে ইনস্টলেশনের আকার ছোট হয় এবং ডাউনলোডের আকার প্রায় একই থাকে।
AGP-কে DEX ফাইলগুলো সংকুচিত অবস্থায় প্যাকেজ করতে বাধ্য করার জন্য, আপনি আপনার build.gradle ফাইলে নিম্নলিখিতটি যোগ করতে পারেন:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}সংকুচিত নেটিভ লাইব্রেরি প্যাকেজ করতে DSL ব্যবহার করুন
আমরা নেটিভ লাইব্রেরিগুলোকে অসংকুচিত আকারে প্যাকেজ করার পরামর্শ দিই, কারণ এর ফলে অ্যাপ ইনস্টল ও ডাউনলোডের আকার ছোট হয় এবং ব্যবহারকারীদের জন্য অ্যাপ দ্রুত লোড হয়। তবে, আপনি যদি চান যে আপনার অ্যাপ বিল্ড করার সময় অ্যান্ড্রয়েড গ্রেডল প্লাগইনটি নেটিভ লাইব্রেরিগুলোকে সংকুচিত আকারে প্যাকেজ করুক, তাহলে আপনার অ্যাপের build.gradle ফাইলে useLegacyPackaging কে true সেট করুন:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
} useLegacyPackaging ফ্ল্যাগটি ` extractNativeLibs ম্যানিফেস্ট অ্যাট্রিবিউটকে প্রতিস্থাপন করে। আরও বিস্তারিত জানতে, 'Native libraries packaged uncompressed by default' রিলিজ নোটটি দেখুন।