Android Gradle Plugin 4.2.0 (মার্চ ২০২১)

মানানসই

ন্যূনতম ভার্সন ডিফল্ট ভার্সন নোট
Gradle ৬.৭.১ N/A আরও জানতে, Gradle আপডেট করা দেখুন।
SDK Build Tools ৩০.০.২ ৩০.০.২ SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন।
NDK N/A 21.4.7075529 NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন।

নতুন বৈশিষ্ট্য

Android Gradle প্লাগ-ইনের এই ভার্সনে নিম্নলিখিত নতুন ফিচার অন্তর্ভুক্ত রয়েছে।

ডিফল্ট হিসেবে Java ল্যাঙ্গুয়েজ ভার্সন ৮

4.2 ভার্সন থেকে, AGP ডিফল্ট হিসেবে Java 8 ল্যাঙ্গুয়েজ লেভেল ব্যবহার করবে। 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 plugin 4.2 টুলে থাকা নতুন JVM রিসোর্স কম্পাইলার, AAPT2 রিসোর্স কম্পাইলারের অংশগুলিকে প্রতিস্থাপন করে, এর ফলে সম্ভাব্যভাবে বিল্ড পারফর্ম্যান্স উন্নত হয়, বিশেষ করে Windows মেশিনে। নতুন JVM রিসোর্স কম্পাইলার ডিফল্ট হিসেবে চালু থাকে।

v3 এবং v4 সাইনিং এখন কাজ করে

Android Gradle Plugin 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 gradle.properties থেকে ভ্যালু লোড করবে না। সাবপ্রোজেক্টে (যেমন, <var>projectDir</var>/app/gradle.properties)। এই পরিবর্তনটি নতুন Gradle আচরণকে প্রতিফলিত করে এবং কনফিগারেশন ক্যাশিংকে সমর্থন করে

gradle.properties ফাইলে ভ্যালু সেট করা সম্পর্কে আরও জানতে, Gradle ডকুমেন্ট দেখুন।

Gradle-এর সাথে মানানসই হওয়া ও কনফিগারেশনে পরিবর্তন

Android Studio-তে রান করার সময়, Gradle বিল্ড টুল, Studio-র বান্ডেল করা JDK ব্যবহার করে। আগের রিলিজগুলিতে, JDK 8, Studio-র সাথে বান্ডেল করা ছিল। ৪.২-এ, তবে, এখন JDK 11 বান্ডেল করা আছে। Gradle চালানোর জন্য নতুন বান্ডেল করা JDK ব্যবহার করলে, এটি কিছু ইনকম্প্যাটিবিলিটি বা JVM পারফর্ম্যান্সের উপর প্রভাব ফেলতে পারে কারণ গার্বেজ কালেক্টরে পরিবর্তন করা হয়েছে। এইসব সমস্যার বিবরণ নিচে দেওয়া হল।

মনে রাখবেন: আমরা JDK 11-এর সাথে Gradle চালানোর সাজেশন দিলেও, এটি Gradle চালানোর জন্য ব্যবহৃত JDK পরিবর্তন করা সম্ভব। এটি প্রোজেক্ট স্ট্রাকচার ডায়ালগ থেকে করা যায়। এই সেটিং পরিবর্তন করলে শুধুমাত্র Gradle চালানোর জন্য ব্যবহৃত JDK পরিবর্তন হবে এবং Studio চালানোর জন্য ব্যবহৃত JDK পরিবর্তন হবে না।

Android-এর সাথে Studio-এর মানানসইতা Gradle প্লাগ-ইন (AGP)

AGP 3.1 এবং এর পরের যেকোনও ভার্সন ব্যবহার করা প্রোজেক্ট Android Studio 4.2 খুলতে পারে। তবে 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 ফাইল আনকমপ্রেস করা হয়

AGP এখন ডিফল্ট হিসেবে APK-তে আনকম্প্রেসড DEX ফাইল প্যাকেজ করে যখন minSdk = 28 বা তার বেশি হয়। এর ফলে 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-এর পরিবর্তে ব্যবহার করা হয়। আরও তথ্যের জন্য, রিলিজ নোট দেখুন নেটিভ লাইব্রেরি ডিফল্ট হিসেবে আনকমপ্রেসড প্যাকেজ করা হয়।