অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.2.0 (মার্চ 2021)

সামঞ্জস্য

ন্যূনতম সংস্করণ ডিফল্ট সংস্করণ নোট
গ্রেডল 6.7.1 N/A আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস 30.0.2 30.0.2 SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন
এনডিকে N/A 21.4.7075529 NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন

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

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

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

সংস্করণ 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 রিসোর্স কম্পাইলার

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

এই উদাহরণটি দেখায় যে কীভাবে কোটলিন বা গ্রোভিতে 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 থেকে মান পড়বে <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 সামঞ্জস্য এবং কনফিগারেশন পরিবর্তন

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

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

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

অ্যান্ড্রয়েড স্টুডিও 4.2 এমন প্রজেক্ট খুলতে পারে যেগুলি AGP 3.1 এবং উচ্চতর ব্যবহার করে তবে AGP Gradle 4.8.1 এবং উচ্চতর চালাচ্ছে। Gradle সামঞ্জস্য সম্পর্কে আরও তথ্যের জন্য, 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 বা তার বেশি হলে DEX ফাইলগুলি APK-এ আনকম্প্রেস করা হয়

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

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

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

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

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

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

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