অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.২.০ (মার্চ ২০২১)

সামঞ্জস্য

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ মন্তব্য
গ্রেডল ৬.৭.১ নিষিদ্ধ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস ৩০.০.২ ৩০.০.২ SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন
এনডিকে নিষিদ্ধ ২১.৪.৭০৭৫৫২৯ NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন

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

অ্যান্ড্রয়েড গ্রেডল প্লাগইনের এই সংস্করণে নিম্নলিখিত নতুন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে।

ডিফল্টরূপে জাভা ভাষার সংস্করণ ৮

৪.২ সংস্করণ থেকে শুরু করে, AGP ডিফল্টরূপে জাভা ৮ ভাষা স্তর ব্যবহার করবে। জাভা ৮ ল্যাম্বডা এক্সপ্রেশন, পদ্ধতি রেফারেন্স এবং স্ট্যাটিক ইন্টারফেস পদ্ধতি সহ বেশ কয়েকটি নতুন ভাষার বৈশিষ্ট্যগুলিতে অ্যাক্সেস প্রদান করে। সমর্থিত বৈশিষ্ট্যগুলির সম্পূর্ণ তালিকার জন্য জাভা ৮ ডকুমেন্টেশন দেখুন।

পুরনো আচরণ বজায় রাখতে, আপনার মডিউল-স্তরের build.gradle.kts অথবা build.gradle ফাইলে স্পষ্টভাবে জাভা 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 Incremental APK ইনস্টলেশন ব্যবহার করে দ্রুত বৃহৎ APK স্থাপন করতে সাহায্য করে। এই নতুন ফ্ল্যাগটি স্থাপন প্রক্রিয়ার APK স্বাক্ষর ধাপের যত্ন নেয়।

প্রতি ভেরিয়েন্টে অ্যাপ সাইনিং কনফিগার করুন

এখন প্রতিটি ভেরিয়েন্টের জন্য অ্যান্ড্রয়েড গ্রেডল প্লাগইনের মাধ্যমে অ্যাপ সাইন ইন সক্ষম বা নিষ্ক্রিয় করা সম্ভব।

এই উদাহরণটি দেখায় যে কোটলিন বা গ্রুভিতে 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 প্রোপার্টিগুলিকে আর ওভাররাইড করা সম্ভব নয়। অন্য কথায়, যদি আপনি রুট প্রোজেক্টের পরিবর্তে সাবপ্রজেক্টের 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>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 docs দেখুন।

গ্র্যাডেলের সামঞ্জস্যতা এবং কনফিগারেশন পরিবর্তন

অ্যান্ড্রয়েড স্টুডিওতে চলার সময়, গ্র্যাডেল বিল্ড টুলটি স্টুডিওর বান্ডেলড JDK ব্যবহার করে। পূর্ববর্তী রিলিজগুলিতে, JDK 8 স্টুডিওর সাথে বান্ডেলড ছিল। তবে, 4.2-এ, JDK 11 এখন বান্ডেলড করা হয়েছে। গ্র্যাডেল চালানোর জন্য নতুন বান্ডেলড JDK ব্যবহার করার সময়, এটি কিছু অসঙ্গতি তৈরি করতে পারে বা আবর্জনা সংগ্রহকারীর পরিবর্তনের কারণে JVM কর্মক্ষমতা প্রভাবিত করতে পারে। এই সমস্যাগুলি নীচে বর্ণনা করা হয়েছে।

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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন (এজিপি) এর সাথে স্টুডিওর সামঞ্জস্যতা

অ্যান্ড্রয়েড স্টুডিও ৪.২ এমন প্রকল্প খুলতে পারে যা AGP ৩.১ এবং উচ্চতর সংস্করণ ব্যবহার করে তবে শর্ত থাকে যে AGP Gradle ৪.৮.১ এবং উচ্চতর সংস্করণ ব্যবহার করছে। Gradle সামঞ্জস্য সম্পর্কে আরও তথ্যের জন্য, Update Gradle দেখুন।

JDK 11 এর জন্য Gradle বিল্ডগুলি অপ্টিমাইজ করা হচ্ছে

JDK 11-এর এই আপডেটটি JVM আবর্জনা সংগ্রাহকের ডিফল্ট কনফিগারেশনকে প্রভাবিত করে, কারণ JDK 8 সমান্তরাল আবর্জনা সংগ্রাহক ব্যবহার করে যখন JDK 11 G1 আবর্জনা সংগ্রাহক ব্যবহার করে।

বিল্ডের কর্মক্ষমতা উন্নত করার জন্য, আমরা আপনার গ্র্যাডেল বিল্ডগুলিকে সমান্তরাল আবর্জনা সংগ্রাহক দিয়ে পরীক্ষা করার পরামর্শ দিচ্ছি। gradle.properties এ নিম্নলিখিতগুলি সেট করুন:

org.gradle.jvmargs=-XX:+UseParallelGC

যদি এই ক্ষেত্রে ইতিমধ্যেই অন্য কোনও বিকল্প সেট করা থাকে, তাহলে একটি নতুন বিকল্প যোগ করুন:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

বিভিন্ন কনফিগারেশনের মাধ্যমে বিল্ডের গতি পরিমাপ করতে, আপনার বিল্ডের প্রোফাইল দেখুন।

minSdk = 28 বা তার বেশি হলে APK গুলিতে DEX ফাইলগুলি আনকম্প্রেস করা হয়

AGP এখন minSdk = 28 বা তার বেশি হলে ডিফল্টরূপে APK-তে DEX ফাইলগুলিকে আনকম্প্রেস করে প্যাকেজ করে। এর ফলে APK-এর আকার বৃদ্ধি পায়, কিন্তু এর ফলে ডিভাইসে ইনস্টলেশনের আকার ছোট হয় এবং ডাউনলোডের আকার প্রায় একই থাকে।

AGP কে DEX ফাইলগুলি সংকুচিত করে প্যাকেজ করতে বাধ্য করার জন্য, আপনি আপনার build.gradle ফাইলে নিম্নলিখিতগুলি যোগ করতে পারেন:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

সংকুচিত নেটিভ লাইব্রেরি প্যাকেজ করতে DSL ব্যবহার করুন

আমরা নেটিভ লাইব্রেরিগুলিকে আনকম্প্রেসড আকারে প্যাকেজ করার পরামর্শ দিচ্ছি, কারণ এর ফলে আপনার ব্যবহারকারীদের জন্য অ্যাপ ইনস্টলের আকার ছোট হবে, অ্যাপ ডাউনলোডের আকার ছোট হবে এবং অ্যাপ লোডিং সময় দ্রুত হবে। তবে, যদি আপনি চান যে অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপনার অ্যাপ তৈরি করার সময় সংকুচিত নেটিভ লাইব্রেরিগুলি প্যাকেজ করুক, তাহলে আপনার অ্যাপের build.gradle ফাইলে useLegacyPackaging true এ সেট করুন:

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

useLegacyPackaging ফ্ল্যাগটি ম্যানিফেস্ট অ্যাট্রিবিউট extractNativeLibs পরিবর্তে কাজ করে। আরও পটভূমির জন্য, রিলিজ নোট দেখুন নেটিভ লাইব্রেরিগুলি ডিফল্টভাবে আনকম্প্রেসড প্যাকেজ করা হয়েছে