অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.১.০ (আগস্ট ২০২০)
সামঞ্জস্য
| সর্বনিম্ন সংস্করণ | ডিফল্ট সংস্করণ | মন্তব্য | |
|---|---|---|---|
| গ্রেডল | ৬.৫ | নিষিদ্ধ | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK বিল্ড টুলস | ২৯.০.২ | ২৯.০.২ | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন । |
| এনডিকে | নিষিদ্ধ | ২১.১.৬৩৫২৪৬২ | 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>
নতুন বৈশিষ্ট্য
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের এই সংস্করণে নিম্নলিখিত নতুন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে।
কোটলিন স্ক্রিপ্ট ডিএসএল সাপোর্ট
কোটলিন বিল্ডস্ক্রিপ্ট ব্যবহারকারীদের সম্পাদনার অভিজ্ঞতা উন্নত করতে, অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.1 এর DSL এবং API গুলি এখন তাদের বাস্তবায়ন ক্লাস থেকে আলাদাভাবে কোটলিন ইন্টারফেসের একটি সেটে সংজ্ঞায়িত করা হয়েছে। এর অর্থ হল:
- কোটলিন প্রকারের ক্ষেত্রে এখন শূন্যতা এবং পরিবর্তনশীলতা স্পষ্টভাবে ঘোষণা করা হয়েছে।
- এই ইন্টারফেসগুলি থেকে তৈরি ডকুমেন্টেশনগুলি কোটলিন এপিআই রেফারেন্সে প্রকাশিত হয়।
- অ্যান্ড্রয়েড গ্রেডল প্লাগইনের API পৃষ্ঠটি স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে, যাতে ভবিষ্যতে এক্সটেন্ডিং অ্যান্ড্রয়েড বিল্ডগুলি কম ভঙ্গুর হয়।
গুরুত্বপূর্ণ: যদি আপনি ইতিমধ্যেই KTS বিল্ড স্ক্রিপ্ট গ্রহণ করে থাকেন অথবা buildSrc এ Kotlin ব্যবহার করে থাকেন, তাহলে এর ফলে কিছু ত্রুটির জন্য সোর্স সামঞ্জস্যতা ভেঙে যেতে পারে যা পূর্ববর্তী রিলিজগুলিতে রান-টাইম ত্রুটি হিসাবে প্রকাশিত হত।
DSL-এ রূপান্তরিত করার জন্য ডিজাইন করা সংগ্রহের ধরণগুলিকে এখন অভিন্নভাবে সংজ্ঞায়িত করা হয়েছে:
val collection: MutableCollectionType
এর অর্থ হল, পূর্বে সমর্থিত কিছু সংগ্রহের জন্য কোটলিন স্ক্রিপ্টে নিম্নলিখিত লেখা আর সম্ভব নয়:
collection = collectionTypeOf(...)
তবে, সংগ্রহের পরিবর্তন একইভাবে সমর্থিত, তাই collection += … এবং collection.add(...) এখন সর্বত্র কাজ করবে।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন কোটলিন এপিআই এবং ডিএসএল ব্যবহার করে এমন কোনও প্রকল্প আপগ্রেড করার সময় যদি আপনি কোনও সমস্যা খুঁজে পান, তাহলে দয়া করে একটি বাগ রিপোর্ট করুন ।
AAR থেকে C/C++ নির্ভরতা রপ্তানি করুন
অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ৪.০ এ AAR নির্ভরতায় প্রিফ্যাব প্যাকেজ আমদানি করার ক্ষমতা যোগ করা হয়েছে। AGP ৪.১ এ, এখন একটি অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পের জন্য একটি AAR-তে আপনার বহিরাগত নেটিভ বিল্ড থেকে লাইব্রেরি রপ্তানি করা সম্ভব।
আপনার নেটিভ লাইব্রেরি এক্সপোর্ট করতে, আপনার লাইব্রেরি প্রজেক্টের 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 এক্সটার্নাল নেটিভ বিল্ডের mylibrary এবং myotherlibrary লাইব্রেরিগুলি আপনার বিল্ড দ্বারা উত্পাদিত AAR-তে প্যাকেজ করা হবে এবং প্রতিটি নির্দিষ্ট ডিরেক্টরি থেকে তাদের নির্ভরশীলদের কাছে হেডার রপ্তানি করবে।
দ্রষ্টব্য: অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ৪.০ এবং তার পরবর্তী সংস্করণের ব্যবহারকারীদের জন্য, পূর্বনির্মিত নেটিভ লাইব্রেরি আমদানির জন্য কনফিগারেশন সেটিংস পরিবর্তিত হয়েছে। আরও তথ্যের জন্য, ৪.০ রিলিজ নোট দেখুন।
কোটলিন মেটাডেটার জন্য R8 সমর্থন
কোটলিন জাভা ক্লাস ফাইলগুলিতে কাস্টম মেটাডেটা ব্যবহার করে কোটলিন ভাষার গঠন শনাক্ত করে। kotlin-reflect ব্যবহার করে কোটলিন লাইব্রেরি এবং অ্যাপ্লিকেশনগুলির সংকোচন সম্পূর্ণরূপে সমর্থন করার জন্য R8 এখন কোটলিন মেটাডেটা রক্ষণাবেক্ষণ এবং পুনর্লিখনের জন্য সমর্থন করে।
কোটলিন মেটাডেটা ধরে রাখতে, নিম্নলিখিত কিপ নিয়মগুলি যোগ করুন:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
এটি R8 কে নির্দেশ দেবে যে সরাসরি রাখা সমস্ত ক্লাসের জন্য Kotlin মেটাডেটা রাখতে।
আরও তথ্যের জন্য, মিডিয়ামে R8 {:.external} ব্যবহার করে কোটলিন প্রতিফলন ব্যবহার করে কোটলিন লাইব্রেরি এবং অ্যাপ্লিকেশন সঙ্কুচিত করা দেখুন।
ডিবাগ বিল্ডে দৃষ্টান্ত
যখন আপনি অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.১.০ এবং উচ্চতর সংস্করণ ব্যবহার করে আপনার অ্যাপের ডিবাগ সংস্করণ তৈরি করবেন, তখন বিল্ট-ইন কম্পাইলার (D8) কম্পাইলের সময় অ্যাসারেন্স সক্ষম করার জন্য আপনার অ্যাপের কোডটি পুনর্লিখন করবে, যাতে আপনার সর্বদা অ্যাসারেন্স চেক সক্রিয় থাকে।
আচরণগত পরিবর্তন
অ্যান্ড্রয়েড গ্রেডল প্লাগইন বিল্ড ক্যাশে সরানো হয়েছে
AGP 4.1-এ AGP বিল্ড ক্যাশে সরানো হয়েছে। পূর্বে AGP 2.3-এ Gradle বিল্ড ক্যাশের পরিপূরক হিসেবে প্রবর্তিত হয়েছিল, AGP 4.1-এ Gradle বিল্ড ক্যাশ দ্বারা AGP বিল্ড ক্যাশ সম্পূর্ণরূপে প্রতিস্থাপন করা হয়েছিল। এই পরিবর্তনটি বিল্ড টাইমকে প্রভাবিত করে না।
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 isCoreLibraryDesugaringEnabled এ পরিবর্তন করা হয়েছে। এই ফ্ল্যাগ সম্পর্কে আরও তথ্যের জন্য, Java 8+ API desugaring সাপোর্ট (Android Gradle Plugin 4.0.0+) দেখুন।
লাইব্রেরি প্রকল্পগুলিতে BuildConfig ক্লাস থেকে সংস্করণ বৈশিষ্ট্যগুলি সরানো হয়েছে
শুধুমাত্র লাইব্রেরি প্রকল্পের জন্য, BuildConfig.VERSION_NAME এবং BuildConfig.VERSION_CODE বৈশিষ্ট্যগুলি তৈরি করা BuildConfig ক্লাস থেকে সরানো হয়েছে কারণ এই স্ট্যাটিক মানগুলি অ্যাপ্লিকেশনের সংস্করণ কোড এবং নামের চূড়ান্ত মানগুলি প্রতিফলিত করেনি এবং তাই বিভ্রান্তিকর ছিল। অতিরিক্তভাবে, ম্যানিফেস্ট মার্জিংয়ের সময় এই মানগুলি বাতিল করা হয়েছিল।
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের ভবিষ্যতের সংস্করণে, লাইব্রেরির জন্য DSL থেকে versionName এবং versionCode বৈশিষ্ট্যগুলিও সরিয়ে ফেলা হবে। বর্তমানে, লাইব্রেরির সাব-প্রজেক্ট থেকে অ্যাপ সংস্করণ কোড/নাম স্বয়ংক্রিয়ভাবে অ্যাক্সেস করার কোনও উপায় নেই।
অ্যাপ্লিকেশন মডিউলের ক্ষেত্রে, কোনও পরিবর্তন নেই, আপনি এখনও DSL-এ versionCode এবং versionName এ মান নির্ধারণ করতে পারেন; এই মানগুলি অ্যাপের ম্যানিফেস্ট এবং BuildConfig ফিল্ডে প্রচারিত হবে।
NDK পাথ সেট করুন
আপনার মডিউলের build.gradle ফাইলে android.ndkPath প্রপার্টি ব্যবহার করে আপনি আপনার স্থানীয় NDK ইনস্টলেশনের পথ নির্ধারণ করতে পারেন।
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}যদি আপনি এই প্রপার্টিটি android.ndkVersion প্রপার্টির সাথে একসাথে ব্যবহার করেন, তাহলে এই পাথে অবশ্যই একটি NDK ভার্সন থাকতে হবে যা android.ndkVersion সাথে মেলে।
লাইব্রেরি ইউনিট পরীক্ষার আচরণগত পরিবর্তন
লাইব্রেরি ইউনিট পরীক্ষাগুলি কীভাবে সংকলন এবং চালানো হয় তার আচরণ আমরা পরিবর্তন করেছি। একটি লাইব্রেরির ইউনিট পরীক্ষাগুলি এখন সংকলন করা হয় এবং লাইব্রেরির কম্পাইল/রানটাইম ক্লাসগুলির বিরুদ্ধে চালানো হয়, যার ফলে ইউনিট পরীক্ষাটি লাইব্রেরিটি একইভাবে গ্রাস করে যেমন বহিরাগত উপ-প্রকল্পগুলি করে। এই কনফিগারেশনটি সাধারণত আরও ভাল পরীক্ষায় ফলাফল দেয়।
কিছু ক্ষেত্রে, ডেটা বাইন্ডিং ব্যবহার করে এমন লাইব্রেরি ইউনিট পরীক্ষায় DataBindingComponent বা BR ক্লাস অনুপস্থিত থাকতে পারে। এই পরীক্ষাগুলিকে androidTest প্রকল্পের একটি ইন্সট্রুমেন্টেড টেস্টে পোর্ট করতে হবে, কারণ ইউনিট পরীক্ষায় সেই ক্লাসগুলির বিরুদ্ধে কম্পাইল এবং চালানো ভুল আউটপুট তৈরি করতে পারে।
io.fabric Gradle প্লাগইনটি বন্ধ করা হয়েছে
io.fabric Gradle প্লাগইনটি বন্ধ করে দেওয়া হয়েছে এবং এটি Android Gradle প্লাগইনের 4.1 সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয়। বন্ধ করে দেওয়া Fabric SDK এবং Firebase Crashlytics SDK-তে স্থানান্তর সম্পর্কে আরও তথ্যের জন্য, Firebase Crashlytics SDK-তে আপগ্রেড দেখুন।