Android Gradle প্লাগ-ইন 4.2.0 (মার্চ ২০২১)
মানানসই
| সর্বনিম্ন ভার্সন | ডিফল্ট ভার্সন | নোট | |
|---|---|---|---|
| Gradle | 6.7.1 | N/A | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK বিল্ড টুল | 30.0.2 | 30.0.2 | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন। |
| NDK | N/A | 21.4.7075529 | NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন। |
নতুন বৈশিষ্ট্য
Android Gradle প্লাগ-ইনের এই ভার্সনে নিম্নলিখিত নতুন ফিচার অন্তর্ভুক্ত আছে।
ডিফল্ট হিসেবে Java ল্যাঙ্গুয়েজ ভার্সন ৮
ভার্সন ৪.২ থেকে শুরু করে, AGP ডিফল্ট হিসেবে Java ৮ ল্যাঙ্গুয়েজ লেভেল ব্যবহার করবে। Java 8-এ ল্যাম্বডা এক্সপ্রেশন, মেথড রেফারেন্স এবং স্ট্যাটিক ইন্টারফেস মেথড সহ বেশ কিছু নতুন ল্যাঙ্গুয়েজ ফিচারের অ্যাক্সেস পাওয়া যায়। কাজ করে এমন ফিচারের সম্পূর্ণ তালিকা দেখতে Java 8 ডকুমেন্টেশন দেখুন।
পুরনো আচরণ বজায় রাখতে, আপনার মডিউল-লেভেল
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 রিসোর্স কম্পাইলার
Android Gradle প্লাগ-ইন 4.2 টুলে একটি নতুন JVM রিসোর্স কম্পাইলার AAPT2 রিসোর্স কম্পাইলার-এর অংশগুলি প্রতিস্থাপন করে, সম্ভাব্যভাবে বিল্ড পারফরম্যান্স উন্নত করে, বিশেষ করে Windows মেশিনে। নতুন JVM রিসোর্স কম্পাইলার ডিফল্ট হিসেবে চালু করা থাকে।
v3 এবং v4 সাইনিং এখন কাজ করে
Android Gradle প্লাগ-ইন 4.2 এখন 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 সাইনিংয়ের ধাপটি ম্যানেজ করে।
প্রতিটি ভেরিয়েন্টের জন্য অ্যাপ সাইনিং কনফিগার করুন
Android Gradle প্লাগ-ইনে এখন প্রতিটি ভ্যারিয়েন্টের জন্য অ্যাপ সাইনিং চালু বা বন্ধ করা সম্ভব।
এই উদাহরণে দেখানো হয়েছে যে Kotlin বা Groovy-তে
onVariants()
পদ্ধতি ব্যবহার করে কীভাবে প্রতিটি ভেরিয়েন্টের জন্য অ্যাপ সাইনিং সেট করতে হয়:
androidComponents {
onVariants(selector().withName("fooDebug")) {
signingConfig {
enableV1Signing false
enableV2Signing true
}
}
}
নতুন Gradle প্রপার্টি:
android.native.buildOutput
বিল্ড আউটপুটে বিশৃঙ্খলা কমাতে, AGP 4.2 CMake এবং ndk-build ব্যবহার করে
C/C++ বিল্ড থেকে মেসেজ ফিল্টার করে,
ডিফল্ট হিসেবে শুধুমাত্র C/C++ কম্পাইলার আউটপুট দেখায়। আগে, তৈরি করা প্রতিটি ফাইলের জন্য
আউটপুটের একটি লাইন জেনারেট করা হত, যার ফলে প্রচুর পরিমাণে
তথ্যমূলক মেসেজ তৈরি হত।
আপনি যদি 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 প্রপার্টি ওভাররাইড করা
আর সম্ভব নয়। অন্যভাবে বলতে গেলে, আপনি যদি রুট প্রোজেক্টের পরিবর্তে সাবপ্রোজেক্টের
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 সাবপ্রোজেক্টে (যেমন,
<var>projectDir</var>/app/gradle.properties)
gradle.properties থেকে ভ্যালু লোড করবে না।
এই পরিবর্তন
নতুন Gradle আচরণ দেখায় এবং
কনফিগারেশন ক্যাশিং সাপোর্ট করে
gradle.properties ফাইলে ভ্যালু সেট করার ব্যাপারে আরও জানতে, Gradle ডকুমেন্ট দেখুন।
Gradle-এর কম্প্যাটিবিলিটি ও কনফিগারেশনে পরিবর্তন
Android Studio-তে রান করার সময়, Gradle বিল্ড টুল Studio-র বান্ডেল করা JDK ব্যবহার করে। আগের রিলিজে, JDK 8 Studio-র সাথে বান্ডেল করা ছিল। তবে, 4.2 ভার্সনে, JDK 11 এখন বান্ডেল করা আছে। Gradle রান করার জন্য নতুন বান্ডেল করা JDK ব্যবহার করার সময়, গার্বেজ কালেক্টরে পরিবর্তন হওয়ার কারণে কিছু ইনকমপ্যাটিবিলিটি হতে পারে অথবা JVM পারফর্ম্যান্সের উপর প্রভাব পড়তে পারে। এইসব সমস্যা নিচে বর্ণনা করা হয়েছে।
মনে রাখবেন: আমরা JDK 11-এর সাথে Gradle রান করার সাজেশন দিলেও, প্রোজেক্ট স্ট্রাকচার ডায়ালগে Gradle রান করার জন্য ব্যবহৃত JDK পরিবর্তন করা সম্ভব। এই সেটিং পরিবর্তন করলে শুধুমাত্র Gradle চালানোর জন্য ব্যবহৃত JDK পরিবর্তন হবে এবং Studio চালানোর জন্য ব্যবহৃত JDK পরিবর্তন হবে না।
Android Gradle প্লাগ-ইন (AGP)-এর সাথে Studio-এর মানানসই হওয়া
Android Studio 4.2 এমন প্রোজেক্ট খুলতে পারে যা AGP 3.1 এবং তার পরবর্তী ভার্সন ব্যবহার করে, তবে AGP-তে Gradle 4.8.1 এবং তার পরবর্তী ভার্সন রান করতে হবে। Gradle কম্প্যাটিবিলিটি সম্পর্কে আরও জানতে, Gradle আপডেট করুন দেখুন।
JDK 11-এর জন্য Gradle বিল্ড অপ্টিমাইজ করা
JDK 11-এ এই আপডেট JVM গার্বেজ কালেক্টরের ডিফল্ট কনফিগারেশনকে প্রভাবিত করে, কারণ JDK 8 সমান্তরাল গার্বেজ কালেক্টর ব্যবহার করে, যেখানে JDK 11 G1 গার্বেজ কালেক্টর ব্যবহার করে।
বিল্ড পারফর্ম্যান্স উন্নত করার জন্য, আমরা
প্যারালাল গার্বেজ কালেক্টরের সাথে আপনার Gradle বিল্ড টেস্ট করার
সাজেশন দিই। gradle.properties-এ নিম্নলিখিতগুলি সেট করুন:
org.gradle.jvmargs=-XX:+UseParallelGCএই ফিল্ডে আগে থেকেই অন্য বিকল্প সেট করা থাকলে, নতুন বিকল্প যোগ করুন:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGCবিভিন্ন কনফিগারেশনের সাথে বিল্ড স্পিড পরিমাপ করতে, আপনার বিল্ড প্রোফাইল করুন দেখুন।
minSdk = ২৮ বা তার বেশি হলে APK-তে DEX ফাইল আনকমপ্রেস করা হয়
minSdk = ২৮ বা তার বেশি হলে, AGP এখন ডিফল্ট হিসেবে APK-তে আনকমপ্রেসড DEX ফাইল প্যাকেজ করে। এর ফলে APK-এর সাইজ বেড়ে যায়, তবে ডিভাইসে ইনস্টলেশনের সাইজ
কমে যায় এবং ডাউনলোডের সাইজ প্রায় একই থাকে।
AGP-কে কম্প্রেস করা DEX ফাইল প্যাকেজ করতে বাধ্য করতে, আপনি আপনার build.gradle ফাইলে নিম্নলিখিতগুলি
যোগ করতে পারেন:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
কম্প্রেস করা C/C++ লাইব্রেরি প্যাকেজ করতে DSL ব্যবহার করুন
আমরা C/C++ লাইব্রেরি আনকমপ্রেসড ফর্মে প্যাকেজ করার সাজেশন দিই, কারণ এর ফলে
অ্যাপ ইনস্টল করার সাইজ ছোট হয়, অ্যাপ ডাউনলোড করার সাইজ ছোট হয় এবং আপনার ব্যবহারকারীদের জন্য অ্যাপ
লোড হতে কম সময় লাগে। তবে, আপনার অ্যাপ তৈরি করার সময় Android Gradle প্লাগ-ইন যাতে
কম্প্রেস করা C/C++ লাইব্রেরি প্যাকেজ করে, তার জন্য
আপনার অ্যাপের build.gradle ফাইলে useLegacyPackaging
true হিসেবে সেট করুন:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
useLegacyPackaging ফ্ল্যাগটি ম্যানিফেস্ট অ্যাট্রিবিউট extractNativeLibs-এর জায়গায় ব্যবহার করা হয়। আরও ব্যাকগ্রাউন্ডের জন্য, রিলিজ নোট দেখুন
নেটিভ লাইব্রেরি ডিফল্ট হিসেবে আনকমপ্রেসড প্যাকেজ করা হয়।