Android Gradle প্লাগ-ইন 4.1.0 (আগস্ট ২০২০)

মানানসই

সর্বনিম্ন ভার্সন ডিফল্ট ভার্সন নোট
Gradle ৬.৫ N/A আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুল 29.0.2 29.0.2 SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন।
NDK N/A 21.1.6352462 NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন।

<p>This version of the Android plugin requires the following:</p>
<ul>
  <li>
    <p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
    To learn more, read the section about <a href="#updating-gradle">updating
    Gradle</a>.</p>
  </li>
  <li>
    <p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
    29.0.2</a> or higher.</p>
  </li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>

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

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

Kotlin Script DSL সংক্রান্ত সহায়তা

Kotlin বিল্ডস্ক্রিপ্ট ব্যবহারকারীদের জন্য এডিটিং অভিজ্ঞতা উন্নত করতে সাহায্য করার জন্য, Android Gradle প্লাগইন 4.1-এর DSL এবং API এখন Kotlin ইন্টারফেসের একটি সেটে তাদের ইমপ্লিমেন্টেশন ক্লাস থেকে আলাদাভাবে সংজ্ঞায়িত করা হয়েছে। এর অর্থ হল:

  • Kotlin-এর ধরনের উপর এখন নালিবিলিটি ও মিউটেবিলিটি স্পষ্টভাবে ঘোষণা করা হয়।
  • সেইসব ইন্টারফেস থেকে জেনারেট করা ডকুমেন্টেশন Kotlin API রেফারেন্স-এ প্রকাশ করা হয়।
  • Android Gradle প্লাগ-ইনের API সারফেস স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে, যাতে ভবিষ্যতে Android বিল্ডের এক্সটেনশন আরও মজবুত করা যায়।

গুরুত্বপূর্ণ: আপনি যদি আগে থেকেই KTS বিল্ড স্ক্রিপ্ট গ্রহণ করে থাকেন বা buildSrc-এ Kotlin ব্যবহার করেন, তাহলে এর ফলে নির্দিষ্ট কিছু সমস্যার জন্য সোর্স কম্প্যাটিবিলিটি ব্রেক হতে পারে যা আগের রিলিজে রান-টাইম সমস্যা হিসেবে দেখা যেত।

DSL-এ মিউটেট করার জন্য ডিজাইন করা কালেকশনের ধরন এখন অভিন্নভাবে এইভাবে সংজ্ঞায়িত করা হয়েছে:

val collection: MutableCollectionType

এর অর্থ হল, আগে কাজ করত এমন কিছু সংগ্রহের জন্য Kotlin স্ক্রিপ্টে নিম্নলিখিতগুলি লেখা আর সম্ভব নয়:

collection = collectionTypeOf(...)

তবে, কালেকশন মিউটেট করার সুবিধা সব জায়গায় একইভাবে কাজ করে, তাই collection += … এবং collection.add(...) এখন সব জায়গায় কাজ করবে।

Android Gradle প্লাগ-ইন Kotlin API এবং DSL ব্যবহার করে এমন কোনও প্রোজেক্ট আপগ্রেড করার সময় আপনি কোনও সমস্যা দেখতে পেলে, সমস্যার বিষয়ে অভিযোগ জানান।

AAR থেকে C/C++ ডিপেন্ডেন্সি এক্সপোর্ট করুন

Android Gradle প্লাগ-ইন 4.0-এ AAR ডিপেন্ডেন্সিতে Prefab প্যাকেজ ইমপোর্ট করার ক্ষমতা যোগ করা হয়েছে। AGP 4.1-এ, এখন Android লাইব্রেরি প্রোজেক্টের জন্য AAR-এ আপনার এক্সটার্নাল C/C++ বিল্ড থেকে লাইব্রেরি এক্সপোর্ট করা সম্ভব।

আপনার C/C++ লাইব্রেরি এক্সপোর্ট করতে, আপনার লাইব্রেরি প্রোজেক্টের build.gradle ফাইলের android ব্লকে নিম্নলিখিতগুলি যোগ করুন:

buildFeatures {
    prefabPublishing true
}

prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }

<var>myotherlibrary</var> {
    headers "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

buildFeatures {
    prefabPublishing = true
}

prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }

create("<var>myotherlibrary</var>") {
    headers = "src/main/cpp/<var>myotherlibrary</var>/include"
}

}

এই উদাহরণে, আপনার ndk-build বা CMake এক্সটার্নাল C/C++ বিল্ড থেকে mylibrary এবং myotherlibrary লাইব্রেরি আপনার বিল্ডের মাধ্যমে তৈরি করা AAR-এ প্যাকেজ করা হবে এবং প্রতিটি নির্দিষ্ট ডিরেক্টরি থেকে তাদের ডিপেন্ডেন্টে হেডার এক্সপোর্ট করবে।

মনে রাখবেন: Android Gradle প্লাগ-ইন 4.0 এবং তার পরবর্তী ভার্সনের ব্যবহারকারীদের জন্য, আগে থেকে তৈরি C/C++ লাইব্রেরি ইমপোর্ট করার কনফিগারেশন সেটিংস পরিবর্তন করা হয়েছে। আরও তথ্যের জন্য, 4.0 রিলিজ নোট দেখুন।

Kotlin মেটাডেটার জন্য R8 সহায়তা

Kotlin ভাষা শনাক্ত করতে Kotlin, Java ক্লাস ফাইলে কাস্টম মেটাডেটা ব্যবহার করে। R8-এ এখন Kotlin মেটাডেটা বজায় রাখা ও আবার লেখার সুবিধা আছে যাতে kotlin-reflect ব্যবহার করে Kotlin লাইব্রেরি ও অ্যাপ্লিকেশন ছোট করার সুবিধা সম্পূর্ণভাবে পাওয়া যায়।

Kotlin মেটাডেটা রাখতে, নিম্নলিখিত নিয়মগুলি যোগ করুন:

-keep class kotlin.Metadata { *; }

-keepattributes RuntimeVisibleAnnotations

এটি R8-কে সরাসরি রাখা সমস্ত ক্লাসের জন্য Kotlin মেটাডেটা রাখার নির্দেশ দেবে।

আরও তথ্যের জন্য, Medium-এ R8-এর সাথে Kotlin রিফ্লেকশন ব্যবহার করে Kotlin লাইব্রেরি ও অ্যাপ্লিকেশন সঙ্কুচিত করা{:.external} দেখুন।

ডিবাগ বিল্ডে অ্যাসার্শন

Android Gradle প্লাগ-ইন 4.1.0 এবং তার পরবর্তী যেকোনও ভার্সন ব্যবহার করে আপনার অ্যাপের ডিবাগ ভার্সন তৈরি করার সময়, বিল্ট-ইন কম্পাইলার (D8) আপনার অ্যাপের কোড আবার লিখবে যাতে কম্পাইল করার সময় অ্যাসার্শন চালু করা যায়, যাতে আপনার অ্যাসার্শন চেক সবসময় অ্যাক্টিভ থাকে।

আচরণগত পরিবর্তন

Android Gradle প্লাগ-ইন বিল্ড ক্যাশে সরিয়ে দেওয়া হয়েছে

AGP 4.1-এ AGP বিল্ড ক্যাশে সরিয়ে দেওয়া হয়েছে। Gradle বিল্ড ক্যাশের পরিপূরক হিসেবে AGP 2.3-এ আগে চালু করা AGP বিল্ড ক্যাশ, AGP 4.1-এ Gradle বিল্ড ক্যাশ দ্বারা সম্পূর্ণভাবে স্থান অধিকার করা হয়েছে। এই পরিবর্তনের ফলে বিল্ড টাইমে কোনও প্রভাব পড়ে না।

cleanBuildCache টাস্ক এবং android.enableBuildCache ও android.buildCacheDir প্রপার্টি বন্ধ করা হয়েছে এবং AGP 7.0-এ সরিয়ে দেওয়া হবে। android.enableBuildCache প্রপার্টির কোনও প্রভাব নেই, তবে android.buildCacheDir প্রপার্টি এবং cleanBuildCache টাস্ক AGP 7.0 পর্যন্ত কাজ করবে, যাতে আগে থেকে থাকা AGP বিল্ড ক্যাশে কন্টেন্ট মুছে ফেলা যায়।

কোড সঙ্কুচিত করার সুবিধা ব্যবহার করে অ্যাপের সাইজ উল্লেখযোগ্যভাবে কমানো হয়েছে

এই রিলিজ থেকে শুরু করে, R ক্লাস থেকে ফিল্ডগুলি ডিফল্ট হিসেবে আর রাখা হয় না, যার ফলে কোড সঙ্কুচিত করার সুবিধা চালু করা অ্যাপগুলির জন্য APK সাইজ উল্লেখযোগ্যভাবে কমে যেতে পারে। এর ফলে আচরণে কোনও পরিবর্তন হওয়া উচিত নয়, যদি না আপনি রিফ্লেকশনের মাধ্যমে R ক্লাস অ্যাক্সেস করেন, যেক্ষেত্রে সেইসব R ক্লাসের জন্য কিপ রুল যোগ করা প্রয়োজন।

android.namespacedRClass প্রপার্টির নাম পরিবর্তন করে android.nonTransitiveRClass করা হয়েছে

এক্সপেরিমেন্টাল ফ্ল্যাগ android.namespacedRClass-এর নাম পরিবর্তন করে android.nonTransitiveRClass করা হয়েছে।

gradle.properties ফাইলে সেট করা এই ফ্ল্যাগ প্রতিটি লাইব্রেরির R ক্লাসের নেমস্পেসিং চালু করে, যাতে এর R ক্লাসে শুধুমাত্র লাইব্রেরিতে ঘোষিত রিসোর্স অন্তর্ভুক্ত থাকে এবং লাইব্রেরির ডিপেন্ডেন্সি থেকে কোনও রিসোর্স অন্তর্ভুক্ত না থাকে, যার ফলে সেই লাইব্রেরির জন্য R ক্লাসের সাইজ কমে যায়।

Kotlin DSL: coreLibraryDesugaringEnabled-এর নাম পরিবর্তন করা হয়েছে

Kotlin DSL কম্পাইল বিকল্প coreLibraryDesugaringEnabled পরিবর্তন করে isCoreLibraryDesugaringEnabled করা হয়েছে। এই ফ্ল্যাগ সম্পর্কে আরও তথ্য পেতে, Java 8+ API ডিসুগারিং সাপোর্ট (Android Gradle প্লাগ-ইন 4.0.0+) দেখুন।

লাইব্রেরি প্রোজেক্টে BuildConfig ক্লাস থেকে ভার্সন প্রপার্টি সরানো হয়েছে

শুধুমাত্র লাইব্রেরি প্রোজেক্টের জন্য, BuildConfig.VERSION_NAME এবং BuildConfig.VERSION_CODE প্রপার্টি জেনারেট করা BuildConfig ক্লাস থেকে সরিয়ে দেওয়া হয়েছে কারণ এই স্ট্যাটিক ভ্যালু অ্যাপ্লিকেশনের ভার্সন কোড ও নামের চূড়ান্ত ভ্যালু দেখায় না এবং তাই বিভ্রান্তিকর। এছাড়াও, ম্যানিফেস্ট মার্জ করার সময় এইসব ভ্যালু বাতিল করা হয়েছে।

Android Gradle প্লাগ-ইনের ভবিষ্যতের ভার্সনে, versionName এবং versionCode প্রপার্টিও লাইব্রেরির জন্য DSL থেকে সরিয়ে দেওয়া হবে। লাইব্রেরি সাব-প্রোজেক্ট থেকে অ্যাপ ভার্সন কোড/নাম অটোমেটিক অ্যাক্সেস করার কোনও উপায় নেই।

অ্যাপ্লিকেশন মডিউলের ক্ষেত্রে কোনও পরিবর্তন নেই, আপনি এখনও DSL-এ versionCode এবং versionName-এ ভ্যালু অ্যাসাইন করতে পারবেন; এই ভ্যালুগুলি অ্যাপের ম্যানিফেস্ট এবং BuildConfig ফিল্ডে প্রোপাগেট হবে।

NDK পাথ সেট করুন

আপনার মডিউলের build.gradle ফাইলে android.ndkPath প্রপার্টি ব্যবহার করে আপনার লোকাল NDK ইনস্টলেশনের পাথ সেট করতে পারবেন।


android {
  ndkPath "your-custom-ndk-path"
}

android {
  ndkPath = "your-custom-ndk-path"
}

আপনি যদি এই প্রপার্টি android.ndkVersion প্রপার্টির সাথে ব্যবহার করেন, তাহলে এই পাথে অবশ্যই android.ndkVersion-এর সাথে ম্যাচ করে এমন NDK ভার্সন থাকতে হবে।

লাইব্রেরি ইউনিট টেস্টের আচরণে পরিবর্তন

লাইব্রেরি ইউনিট টেস্ট কীভাবে কম্পাইল ও রান করা হয় তার আচরণ আমরা পরিবর্তন করেছি। লাইব্রেরির ইউনিট টেস্ট এখন লাইব্রেরির কম্পাইল/রানটাইম ক্লাসের সাথে কম্পাইল ও রান করা হয়, যার ফলে ইউনিট টেস্ট লাইব্রেরিটি এমনভাবে ব্যবহার করে যেভাবে এক্সটার্নাল সাবপ্রোজেক্ট করে। এই কনফিগারেশনের ফলে সাধারণত আরও ভাল টেস্টিং হয়।

কিছু ক্ষেত্রে, ডেটা বাইন্ডিং ব্যবহার করে এমন লাইব্রেরি ইউনিট টেস্টে DataBindingComponent বা BR ক্লাস অনুপস্থিত থাকতে পারে। এইসব টেস্ট androidTest প্রোজেক্টে ইনস্ট্রুমেন্টেড টেস্টে পোর্ট করতে হবে, কারণ ইউনিট টেস্টে এইসব ক্লাসের বিরুদ্ধে কম্পাইল ও রান করলে ভুল আউটপুট তৈরি হতে পারে।

io.fabric Gradle প্লাগ-ইন বন্ধ করা হয়েছে

io.fabric Gradle প্লাগ-ইন বন্ধ করে দেওয়া হয়েছে এবং এটি Android Gradle প্লাগ-ইনের 4.1 ভার্সনের সাথে মানানসই নয়। বন্ধ হয়ে যাওয়া Fabric SDK এবং Firebase Crashlytics SDK-তে মাইগ্রেট করার ব্যাপারে আরও তথ্য পেতে, Firebase Crashlytics SDK-তে আপগ্রেড করুন দেখুন।