অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.1.0 (আগস্ট 2020)
সামঞ্জস্য
ন্যূনতম সংস্করণ | ডিফল্ট সংস্করণ | নোট | |
---|---|---|---|
গ্রেডল | 6.5 | N/A | আরও জানতে, Gradle আপডেট করা দেখুন। |
SDK বিল্ড টুলস | 29.0.2 | 29.0.2 | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন । |
এনডিকে | 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>
নতুন বৈশিষ্ট্য
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের এই সংস্করণে নিম্নলিখিত নতুন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে৷
কোটলিন স্ক্রিপ্ট ডিএসএল সমর্থন
Kotlin বিল্ডস্ক্রিপ্ট ব্যবহারকারীদের জন্য সম্পাদনা অভিজ্ঞতা উন্নত করতে সাহায্য করার জন্য, Android Gradle প্লাগইন 4.1 এর DSL এবং API এখন তাদের বাস্তবায়ন ক্লাস থেকে আলাদাভাবে Kotlin ইন্টারফেসের একটি সেটে সংজ্ঞায়িত করা হয়েছে। এর মানে হল:
- শূন্যতা এবং পরিবর্তনযোগ্যতা এখন স্পষ্টভাবে Kotlin প্রকারে ঘোষণা করা হয়েছে।
- এই ইন্টারফেসগুলি থেকে উত্পন্ন ডকুমেন্টেশন Kotlin API রেফারেন্সে প্রকাশিত হয়েছে।
- অ্যান্ড্রয়েড গ্রেডল প্লাগইন-এর API পৃষ্ঠকে স্পষ্টভাবে সংজ্ঞায়িত করা হয়েছে, যাতে ভবিষ্যতে অ্যান্ড্রয়েড কম ভঙ্গুর হয়।
গুরুত্বপূর্ণ: আপনি যদি ইতিমধ্যেই KTS বিল্ড স্ক্রিপ্ট গ্রহণ করে থাকেন বা buildSrc
এ Kotlin ব্যবহার করে থাকেন, তাহলে এর ফলে কিছু নির্দিষ্ট ত্রুটির জন্য উৎস সামঞ্জস্যতা ভেঙে যেতে পারে যা পূর্ববর্তী রিলিজে রান-টাইম ত্রুটি হিসেবে প্রকাশ পাবে।
DSL-এ রূপান্তরিত করার জন্য ডিজাইন করা সংগ্রহের ধরনগুলিকে এখন অভিন্নভাবে সংজ্ঞায়িত করা হয়েছে:
val collection: MutableCollectionType
এর মানে হল যে কিছু সংগ্রহের জন্য কোটলিন স্ক্রিপ্টগুলিতে নিম্নলিখিতগুলি লেখা আর সম্ভব নয় যা আগে এটি সমর্থন করেছিল:
collection = collectionTypeOf(...)
যাইহোক, সংগ্রহটি পরিবর্তন করা সমর্থিত তাই collection += …
এবং collection.add(...)
এখন সর্বত্র কাজ করা উচিত।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন কোটলিন এপিআই এবং ডিএসএল ব্যবহার করে এমন একটি প্রকল্প আপগ্রেড করার সময় আপনি যদি কোনো সমস্যা খুঁজে পান, অনুগ্রহ করে একটি বাগ রিপোর্ট করুন ।
AARs থেকে C/C++ নির্ভরতা রপ্তানি করুন
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.0 AAR নির্ভরতাগুলিতে প্রিফ্যাব প্যাকেজগুলি আমদানি করার ক্ষমতা যুক্ত করেছে৷ AGP 4.1-এ, এখন অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পের জন্য একটি 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-এ প্যাকেজ করা হবে এবং প্রতিটি নির্দিষ্ট ডিরেক্টরি থেকে তাদের নির্ভরশীলদের কাছে হেডার রপ্তানি করবে।
দ্রষ্টব্য: Android Gradle প্লাগইন 4.0 এবং তার উপরে ব্যবহারকারীদের জন্য, পূর্বনির্মাণ করা নেটিভ লাইব্রেরিগুলি আমদানি করার জন্য কনফিগারেশন সেটিংস পরিবর্তিত হয়েছে৷ আরও তথ্যের জন্য, 4.0 রিলিজ নোটগুলি দেখুন।
Kotlin মেটাডেটার জন্য R8 সমর্থন
Kotlin Kotlin ভাষা নির্মাণ শনাক্ত করতে Java ক্লাস ফাইলে কাস্টম মেটাডেটা ব্যবহার করে। kotlin-reflect
ব্যবহার করে Kotlin লাইব্রেরি এবং অ্যাপ্লিকেশনগুলিকে সম্পূর্ণরূপে সঙ্কুচিত করাকে সমর্থন করার জন্য R8-এ এখন Kotlin মেটাডেটা রক্ষণাবেক্ষণ এবং পুনর্লিখনের জন্য সমর্থন রয়েছে।
Kotlin মেটাডেটা রাখতে, নিম্নলিখিত রাখার নিয়মগুলি যোগ করুন:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
এটি সরাসরি রাখা হয় এমন সমস্ত ক্লাসের জন্য Kotlin মেটাডেটা রাখতে R8 কে নির্দেশ দেবে।
আরও তথ্যের জন্য, মাঝারিতে R8 {:.external} সহ Kotlin প্রতিফলন ব্যবহার করে সঙ্কুচিত কোটলিন লাইব্রেরি এবং অ্যাপ্লিকেশনগুলি দেখুন৷
ডিবাগ বিল্ডে দাবী
আপনি যখন অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.1.0 এবং উচ্চতর ব্যবহার করে আপনার অ্যাপের ডিবাগ সংস্করণ তৈরি করেন, তখন অন্তর্নির্মিত কম্পাইলার (D8) আপনার অ্যাপের কোডটি কম্পাইলের সময় দাবিগুলি সক্ষম করতে পুনরায় লিখবে, যাতে আপনার সর্বদা দাবী পরীক্ষা সক্রিয় থাকে।
আচরণ পরিবর্তন
অ্যান্ড্রয়েড গ্রেডল প্লাগইন বিল্ড ক্যাশে সরানো হয়েছে
AGP বিল্ড ক্যাশে AGP 4.1 এ সরানো হয়েছে। গ্র্যাডল বিল্ড ক্যাশে পরিপূরক করার জন্য পূর্বে এজিপি 2.3 এ প্রবর্তন করা হয়েছিল, এজিপি বিল্ড ক্যাশে সম্পূর্ণভাবে এজিপি 4.1-এ গ্রেডল বিল্ড ক্যাশে দ্বারা বাতিল করা হয়েছিল। এই পরিবর্তন বিল্ড সময় প্রভাবিত করে না.
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 desugaring সমর্থন (Android Gradle Plugin 4.0.0+) দেখুন।
লাইব্রেরি প্রকল্পে BuildConfig ক্লাস থেকে সংস্করণ বৈশিষ্ট্য সরানো হয়েছে
শুধুমাত্র লাইব্রেরি প্রকল্পের জন্য, BuildConfig.VERSION_NAME
এবং BuildConfig.VERSION_CODE
বৈশিষ্ট্যগুলি তৈরি করা BuildConfig
ক্লাস থেকে সরানো হয়েছে কারণ এই স্ট্যাটিক মানগুলি অ্যাপ্লিকেশনটির সংস্করণ কোড এবং নামের চূড়ান্ত মানগুলিকে প্রতিফলিত করেনি এবং তাই বিভ্রান্তিকর ছিল৷ অতিরিক্তভাবে, ম্যানিফেস্ট মার্জ করার সময় এই মানগুলি বাতিল করা হয়েছিল।
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের ভবিষ্যতের সংস্করণে, 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
প্রপার্টির সাথে একসাথে ব্যবহার করেন, তাহলে এই পাথে অবশ্যই android.ndkVersion
সাথে মেলে এমন একটি NDK সংস্করণ থাকতে হবে।
লাইব্রেরি ইউনিট পরীক্ষার আচরণ পরিবর্তন
আমরা লাইব্রেরি ইউনিট পরীক্ষা কিভাবে সংকলিত এবং চালানো হয় তার আচরণ পরিবর্তন করেছি। একটি লাইব্রেরির ইউনিট পরীক্ষাগুলি এখন কম্পাইল করা হয় এবং লাইব্রেরির নিজেই কম্পাইল/রানটাইম ক্লাসের বিপরীতে চালানো হয়, যার ফলে ইউনিট পরীক্ষাটি লাইব্রেরিটিকে একইভাবে গ্রাস করে যেভাবে বহিরাগত সাবপ্রজেক্ট করে। এই কনফিগারেশনটি সাধারণত ভাল পরীক্ষার ফলাফল দেয়।
কিছু ক্ষেত্রে ডেটা বাইন্ডিং ব্যবহার করে এমন লাইব্রেরি ইউনিট পরীক্ষাগুলি অনুপস্থিত DataBindingComponent
বা BR
ক্লাসের সম্মুখীন হতে পারে। এই পরীক্ষাগুলিকে androidTest
প্রজেক্টে একটি ইন্সট্রুমেন্টেড টেস্টে পোর্ট করা দরকার, যেহেতু ইউনিট টেস্টে সেই ক্লাসগুলির বিরুদ্ধে কম্পাইল করা এবং চালানো ভুল আউটপুট তৈরি করতে পারে।
io.fabric Gradle প্লাগইন অবচিত
io.fabric Gradle প্লাগইনটি বাতিল করা হয়েছে এবং Android Gradle প্লাগইনের সংস্করণ 4.1 এর সাথে সামঞ্জস্যপূর্ণ নয়৷ অপ্রচলিত ফ্যাব্রিক SDK এবং Firebase Crashlytics SDK-এ স্থানান্তরিত হওয়ার বিষয়ে আরও তথ্যের জন্য, Firebase Crashlytics SDK-এ আপগ্রেড করুন দেখুন।