অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.০.০ (এপ্রিল ২০২০)
অ্যান্ড্রয়েড প্লাগইনের এই সংস্করণটির জন্য নিম্নলিখিতগুলি প্রয়োজন:
গ্র্যাডেল ৬.১.১ । আরও জানতে, গ্র্যাডেল আপডেট করার বিভাগটি পড়ুন।
SDK বিল্ড টুল 29.0.2 বা উচ্চতর।
৪.০.১ (জুলাই ২০২০)
এই ছোট আপডেটটি অ্যান্ড্রয়েড ১১-এ প্যাকেজ দৃশ্যমানতার জন্য নতুন ডিফল্ট সেটিংস এবং বৈশিষ্ট্যগুলির সাথে সামঞ্জস্যতা সমর্থন করে।
অ্যান্ড্রয়েডের পূর্ববর্তী সংস্করণগুলিতে, একটি ডিভাইসে ইনস্টল করা সমস্ত অ্যাপের তালিকা দেখা সম্ভব ছিল। অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) দিয়ে শুরু করে, ডিফল্টরূপে অ্যাপগুলির কেবল ইনস্টল করা প্যাকেজগুলির একটি ফিল্টার করা তালিকা অ্যাক্সেস থাকে। সিস্টেমে অ্যাপগুলির একটি বিস্তৃত তালিকা দেখতে, আপনাকে এখন আপনার অ্যাপ বা লাইব্রেরির অ্যান্ড্রয়েড ম্যানিফেস্টে একটি <queries> উপাদান যুক্ত করতে হবে।
Android Gradle প্লাগইন 4.1+ ইতিমধ্যেই নতুন <queries> ঘোষণার সাথে সামঞ্জস্যপূর্ণ; তবে, পুরানো সংস্করণগুলি সামঞ্জস্যপূর্ণ নয়। যদি আপনি <queries> উপাদানটি যোগ করেন অথবা যদি আপনি এমন একটি লাইব্রেরি বা SDK এর উপর নির্ভর করতে শুরু করেন যা Android 11 কে টার্গেট করে, তাহলে আপনার অ্যাপ তৈরি করার সময় আপনি ম্যানিফেস্ট মার্জিং ত্রুটির সম্মুখীন হতে পারেন।
এই সমস্যা সমাধানের জন্য, আমরা AGP 3.3 এবং উচ্চতর সংস্করণের জন্য প্যাচগুলির একটি সেট প্রকাশ করছি। আপনি যদি AGP এর একটি পুরোনো সংস্করণ ব্যবহার করেন, তাহলে নিম্নলিখিত সংস্করণগুলির মধ্যে একটিতে আপগ্রেড করুন :
| সর্বনিম্ন সংস্করণ | ডিফল্ট সংস্করণ | মন্তব্য | |
|---|---|---|---|
| গ্রেডল | ৬.১.১ | ৬.১.১ | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK বিল্ড টুলস | ২৯.০.২ | ২৯.০.২ | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন । |
এই নতুন বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, Android 11-এ প্যাকেজ দৃশ্যমানতা দেখুন।
নতুন বৈশিষ্ট্য
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের এই সংস্করণে নিম্নলিখিত নতুন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত রয়েছে।
অ্যান্ড্রয়েড স্টুডিও বিল্ড অ্যানালাইজারের জন্য সমর্থন
বিল্ড অ্যানালাইজার উইন্ডোটি আপনার বিল্ড প্রক্রিয়ার সমস্যাগুলি বুঝতে এবং নির্ণয় করতে সাহায্য করে, যেমন অক্ষম অপ্টিমাইজেশন এবং ভুলভাবে কনফিগার করা কাজগুলি। এই বৈশিষ্ট্যটি তখন উপলব্ধ যখন আপনি অ্যান্ড্রয়েড স্টুডিও 4.0 এবং উচ্চতর সংস্করণ ব্যবহার করেন যার সাথে অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.0.0 এবং উচ্চতর সংস্করণ থাকে। আপনি নিম্নলিখিতভাবে অ্যান্ড্রয়েড স্টুডিও থেকে বিল্ড অ্যানালাইজার উইন্ডোটি খুলতে পারেন:
- যদি আপনি ইতিমধ্যেই এটি না করে থাকেন, তাহলে মেনু বার থেকে Build > Make Project নির্বাচন করে আপনার অ্যাপটি তৈরি করুন।
- মেনু বার থেকে View > Tool Windows > Build নির্বাচন করুন।
- বিল্ড উইন্ডোতে, নিম্নলিখিত যেকোনো একটি উপায়ে বিল্ড অ্যানালাইজার উইন্ডোটি খুলুন:
- অ্যান্ড্রয়েড স্টুডিও আপনার প্রকল্প তৈরি শেষ করার পরে, বিল্ড অ্যানালাইজার ট্যাবে ক্লিক করুন।
- অ্যান্ড্রয়েড স্টুডিও আপনার প্রকল্প তৈরি শেষ করার পরে, বিল্ড আউটপুট উইন্ডোর ডান দিকের লিঙ্কটিতে ক্লিক করুন।

বিল্ড অ্যানালাইজার উইন্ডোটি বাম দিকের একটি ট্রিতে সম্ভাব্য বিল্ড সমস্যাগুলি সংগঠিত করে। আপনি ডানদিকের প্যানেলে প্রতিটি সমস্যা পরিদর্শন করতে এবং তার বিশদ অনুসন্ধান করতে পারেন। যখন অ্যান্ড্রয়েড স্টুডিও আপনার বিল্ড বিশ্লেষণ করে, তখন এটি বিল্ডের সময়কাল নির্ধারণকারী কাজের সেট গণনা করে এবং এই প্রতিটি কাজের প্রভাব বুঝতে সাহায্য করার জন্য একটি ভিজ্যুয়ালাইজেশন প্রদান করে। আপনি ওয়ার্নিং নোড প্রসারিত করেও সতর্কতা সম্পর্কে বিশদ জানতে পারেন।
আরও জানতে, "বিল্ড স্পিড রিগ্রেশন সনাক্ত করুন" পড়ুন।
D8 এবং R8-তে জাভা 8 লাইব্রেরি ডিসাগারিং
অ্যান্ড্রয়েড গ্রেডল প্লাগইনটিতে এখন আপনার অ্যাপের জন্য ন্যূনতম API স্তরের প্রয়োজন ছাড়াই বেশ কয়েকটি জাভা 8 ভাষার API ব্যবহারের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে।
desugaring নামক একটি প্রক্রিয়ার মাধ্যমে, Android Studio 3.0 এবং উচ্চতর সংস্করণে DEX কম্পাইলার, D8, ইতিমধ্যেই জাভা 8 ভাষার বৈশিষ্ট্যগুলির জন্য যথেষ্ট সমর্থন প্রদান করেছে (যেমন ল্যাম্বডা এক্সপ্রেশন, ডিফল্ট ইন্টারফেস পদ্ধতি, রিসোর্স সহ চেষ্টা করুন, এবং আরও অনেক কিছু)। Android Studio 4.0-এ, desugaring ইঞ্জিনটি জাভা ভাষার API গুলিকে ডিসুগার করতে সক্ষম করার জন্য প্রসারিত করা হয়েছে। এর অর্থ হল আপনি এখন স্ট্যান্ডার্ড ভাষার APIগুলি অন্তর্ভুক্ত করতে পারেন যা শুধুমাত্র সাম্প্রতিক অ্যান্ড্রয়েড রিলিজে (যেমন java.util.streams ) উপলব্ধ ছিল এমন অ্যাপগুলিতে যা অ্যান্ড্রয়েডের পুরানো সংস্করণগুলিকে সমর্থন করে।
এই রিলিজে নিম্নলিখিত API গুলির সেট সমর্থিত:
- ক্রমিক স্ট্রিম (
java.util.stream) -
java.timeএর একটি উপসেট -
java.util.function -
java.util.{Map,Collection,Comparator} - ঐচ্ছিক (
java.util.Optional,java.util.OptionalIntএবংjava.util.OptionalDouble) এবং উপরের API গুলির সাথে কার্যকর কিছু অন্যান্য নতুন ক্লাস -
java.util.concurrent.atomicএ কিছু সংযোজন (AtomicInteger,AtomicLongএবংAtomicReferenceএ নতুন পদ্ধতি) -
ConcurrentHashMap(অ্যান্ড্রয়েড ৫.০ এর জন্য বাগ ফিক্স সহ)
এই ভাষা API গুলিকে সমর্থন করার জন্য, D8 একটি পৃথক লাইব্রেরি DEX ফাইল কম্পাইল করে যাতে অনুপস্থিত API গুলির একটি বাস্তবায়ন থাকে এবং এটি আপনার অ্যাপে অন্তর্ভুক্ত করে। ডিসুগারিং প্রক্রিয়াটি রানটাইমে এই লাইব্রেরিটি ব্যবহার করার জন্য আপনার অ্যাপের কোডটি পুনর্লিখন করে।
এই ভাষা API গুলির জন্য সমর্থন সক্ষম করতে, আপনার অ্যাপ মডিউলের build.gradle ফাইলে নিম্নলিখিতগুলি অন্তর্ভুক্ত করুন:
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.4'
}
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled = true
}
compileOptions {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
// Sets Java compatibility to Java 8
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.4")
}
মনে রাখবেন যে আপনাকে উপরের কোড স্নিপেটটি লাইব্রেরি মডিউলের build.gradle ফাইলে অন্তর্ভুক্ত করতে হতে পারে যদি
লাইব্রেরি মডিউলের ইন্সট্রুমেন্টেড পরীক্ষাগুলি এই ভাষা API গুলি ব্যবহার করে (সরাসরি অথবা লাইব্রেরি মডিউল অথবা এর নির্ভরতার মাধ্যমে)। এটি করা হয় যাতে আপনার ইন্সট্রুমেন্টেড পরীক্ষার APK-এর জন্য অনুপস্থিত API গুলি সরবরাহ করা হয়।
আপনি লাইব্রেরি মডিউলে আলাদাভাবে লিন্ট চালাতে চান। এটি লিন্টকে ভাষা API-এর বৈধ ব্যবহারগুলি সনাক্ত করতে এবং মিথ্যা সতর্কতা রিপোর্ট করা এড়াতে সহায়তা করার জন্য।
বিল্ড বৈশিষ্ট্যগুলি সক্ষম বা অক্ষম করার জন্য নতুন বিকল্পগুলি
অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ৪.০.০ একটি নতুন উপায় চালু করেছে যার মাধ্যমে আপনি কোন বিল্ড বৈশিষ্ট্যগুলি সক্ষম এবং অক্ষম করতে চান তা নিয়ন্ত্রণ করতে পারবেন, যেমন ভিউ বাইন্ডিং এবং ডেটা বাইন্ডিং। নতুন বৈশিষ্ট্যগুলি যুক্ত করা হলে, সেগুলি ডিফল্টরূপে অক্ষম থাকবে। এরপর আপনি buildFeatures ব্লক ব্যবহার করে শুধুমাত্র আপনার পছন্দসই বৈশিষ্ট্যগুলি সক্ষম করতে পারেন এবং এটি আপনার প্রকল্পের জন্য বিল্ড কর্মক্ষমতা অপ্টিমাইজ করতে সহায়তা করে। আপনি মডিউল-স্তরের build.gradle ফাইলে প্রতিটি মডিউলের জন্য বিকল্পগুলি নিম্নরূপ সেট করতে পারেন:
android {
// The default value for each feature is shown below. You can change the value to
// override the default behavior.
buildFeatures {
// Determines whether to generate a BuildConfig class.
buildConfig = true
// Determines whether to support View Binding.
// Note that the viewBinding.enabled property is now deprecated.
viewBinding = false
// Determines whether to support Data Binding.
// Note that the dataBinding.enabled property is now deprecated.
dataBinding = false
// Determines whether to generate binder classes for your AIDL files.
aidl = true
// Determines whether to support RenderScript.
renderScript = true
// Determines whether to support injecting custom variables into the module’s R class.
resValues = true
// Determines whether to support shader AOT compilation.
shaders = true
}
}android {
// The default value for each feature is shown below. You can change the value to
// override the default behavior.
buildFeatures {
// Determines whether to generate a BuildConfig class.
buildConfig = true
// Determines whether to support View Binding.
// Note that the viewBinding.enabled property is now deprecated.
viewBinding = false
// Determines whether to support Data Binding.
// Note that the dataBinding.enabled property is now deprecated.
dataBinding = false
// Determines whether to generate binder classes for your AIDL files.
aidl = true
// Determines whether to support RenderScript.
renderScript = true
// Determines whether to support injecting custom variables into the module’s R class.
resValues = true
// Determines whether to support shader AOT compilation.
shaders = true
}
}আপনি আপনার প্রোজেক্টের gradle.properties ফাইলে নিম্নলিখিতগুলির মধ্যে একটি বা একাধিক অন্তর্ভুক্ত করে একটি প্রোজেক্টের সমস্ত মডিউল জুড়ে এই বৈশিষ্ট্যগুলির জন্য ডিফল্ট সেটিং নির্দিষ্ট করতে পারেন, যেমনটি নীচে দেখানো হয়েছে। মনে রাখবেন, আপনি এখনও এই প্রোজেক্ট-ওয়াইড ডিফল্ট সেটিংস ওভাররাইড করতে মডিউল-লেভেল build.gradle ফাইলে buildFeatures ব্লক ব্যবহার করতে পারেন।
android.defaults.buildfeatures.buildconfig=true
android.defaults.buildfeatures.aidl=true
android.defaults.buildfeatures.renderscript=true
android.defaults.buildfeatures.resvalues=true
android.defaults.buildfeatures.shaders=trueবৈশিষ্ট্য-অন-বৈশিষ্ট্য নির্ভরতা
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের পূর্ববর্তী সংস্করণগুলিতে, সমস্ত বৈশিষ্ট্য মডিউল কেবল অ্যাপের বেস মডিউলের উপর নির্ভর করতে পারত। অ্যান্ড্রয়েড গ্রেডল প্লাগইন 4.0.0 ব্যবহার করার সময়, আপনি এখন এমন একটি বৈশিষ্ট্য মডিউল অন্তর্ভুক্ত করতে পারেন যা অন্য একটি বৈশিষ্ট্য মডিউলের উপর নির্ভর করে। অর্থাৎ, একটি :video বৈশিষ্ট্য :camera বৈশিষ্ট্যের উপর নির্ভর করতে পারে, যা বেস মডিউলের উপর নির্ভর করে, যেমনটি নীচের চিত্রে দেখানো হয়েছে।

Feature module :video feature :camera উপর নির্ভর করে, যা বেস :app মডিউলের উপর নির্ভর করে।
এর মানে হল যখন আপনার অ্যাপটি একটি ফিচার মডিউল ডাউনলোড করার অনুরোধ করে, তখন অ্যাপটি তার উপর নির্ভর করে এমন অন্যান্য ফিচার মডিউলও ডাউনলোড করে। আপনার অ্যাপের জন্য ফিচার মডিউল তৈরি করার পরে, আপনি মডিউলের build.gradle ফাইলে একটি ফিচার-অন-ফিচার নির্ভরতা ঘোষণা করতে পারেন। উদাহরণস্বরূপ, :video মডিউলটি নিম্নরূপ :camera এর উপর নির্ভরতা ঘোষণা করে:
// In the build.gradle file of the ':video' module.
dependencies {
// All feature modules must declare a dependency
// on the base module.
implementation project(':app')
// Declares that this module also depends on the 'camera'
// feature module.
implementation project(':camera')
...
}// In the build.gradle file of the ':video' module.
dependencies {
// All feature modules must declare a dependency
// on the base module.
implementation(project(":app"))
// Declares that this module also depends on the 'camera'
// feature module.
implementation(project(":camera"))
...
}অতিরিক্তভাবে, আপনার মেনু বার থেকে সাহায্য > কাস্টম ভিএম বিকল্পগুলি সম্পাদনা করুন ক্লিক করে এবং নিম্নলিখিতগুলি অন্তর্ভুক্ত করে অ্যান্ড্রয়েড স্টুডিওতে ফিচার-অন-ফিচার নির্ভরতা বৈশিষ্ট্যটি সক্ষম করা উচিত (উদাহরণস্বরূপ, রান কনফিগারেশন সম্পাদনা করার সময় বৈশিষ্ট্যটি সমর্থন করার জন্য):
-Drundebug.feature.on.feature=trueনির্ভরতা মেটাডেটা
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.০.০ এবং উচ্চতর সংস্করণ ব্যবহার করে আপনার অ্যাপ তৈরি করার সময়, প্লাগইনটিতে এমন মেটাডেটা থাকে যা আপনার অ্যাপে সংকলিত নির্ভরতা বর্ণনা করে। আপনার অ্যাপ আপলোড করার সময়, প্লে কনসোল আপনাকে নিম্নলিখিত সুবিধাগুলি প্রদানের জন্য এই মেটাডেটাটি পরীক্ষা করে:
- আপনার অ্যাপ ব্যবহার করে এমন SDK এবং নির্ভরতা সম্পর্কিত জ্ঞাত সমস্যাগুলির জন্য সতর্কতা পান
- এই সমস্যাগুলি সমাধানের জন্য কার্যকর প্রতিক্রিয়া পান
ডেটা সংকুচিত করা হয়, একটি Google Play সাইনিং কী দ্বারা এনক্রিপ্ট করা হয় এবং আপনার রিলিজ অ্যাপের সাইনিং ব্লকে সংরক্ষণ করা হয়। তবে, আপনি নিম্নলিখিত ডিরেক্টরিতে স্থানীয় ইন্টারমিডিয়েট বিল্ড ফাইলগুলিতে মেটাডেটা নিজেই পরীক্ষা করতে পারেন: <project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt ।
যদি আপনি এই তথ্যটি শেয়ার না করতে চান, তাহলে আপনার মডিউলের build.gradle ফাইলে নিম্নলিখিতগুলি অন্তর্ভুক্ত করে আপনি অপ্ট-আউট করতে পারেন:
android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}android {
dependenciesInfo {
// Disables dependency metadata when building APKs.
includeInApk = false
// Disables dependency metadata when building Android App Bundles.
includeInBundle = false
}
}AAR নির্ভরতা থেকে নেটিভ লাইব্রেরি আমদানি করুন
আপনি এখন আপনার অ্যাপের AAR নির্ভরতা থেকে C/C++ লাইব্রেরি আমদানি করতে পারবেন। আপনি যখন নীচে বর্ণিত কনফিগারেশন ধাপগুলি অনুসরণ করেন, তখন Gradle স্বয়ংক্রিয়ভাবে এই নেটিভ লাইব্রেরিগুলিকে আপনার বহিরাগত নেটিভ বিল্ড সিস্টেম, যেমন CMake-এর সাথে ব্যবহারের জন্য উপলব্ধ করে। মনে রাখবেন যে Gradle শুধুমাত্র আপনার বিল্ডের জন্য এই লাইব্রেরিগুলি উপলব্ধ করে; এগুলি ব্যবহার করার জন্য আপনাকে এখনও আপনার বিল্ড স্ক্রিপ্টগুলি কনফিগার করতে হবে।
প্রিফ্যাব প্যাকেজ ফর্ম্যাট ব্যবহার করে লাইব্রেরিগুলি রপ্তানি করা হয়।
প্রতিটি নির্ভরতা সর্বাধিক একটি প্রিফ্যাব প্যাকেজ প্রকাশ করতে পারে, যার মধ্যে এক বা একাধিক মডিউল থাকে। একটি প্রিফ্যাব মডিউল হল একটি একক লাইব্রেরি, যা একটি শেয়ার্ড, স্ট্যাটিক, অথবা হেডার-ওনলি লাইব্রেরি হতে পারে।
সাধারণত, প্যাকেজের নাম Maven আর্টিফ্যাক্ট নামের সাথে এবং মডিউলের নাম লাইব্রেরির নামের সাথে মিলে যায়, কিন্তু এটি সবসময় সত্য নয়। যেহেতু আপনাকে লাইব্রেরির প্যাকেজ এবং মডিউলের নাম জানতে হবে, তাই সেই নামগুলি কী তা নির্ধারণ করার জন্য আপনাকে নির্ভরতার ডকুমেন্টেশনের সাথে পরামর্শ করতে হতে পারে।
আপনার বহিরাগত নেটিভ বিল্ড সিস্টেম কনফিগার করুন
আপনার অনুসরণ করা পদক্ষেপগুলি দেখতে, আপনি যে বহিরাগত নেটিভ বিল্ড সিস্টেমটি ব্যবহার করার পরিকল্পনা করছেন তার জন্য নীচের পদক্ষেপগুলি অনুসরণ করুন।
আপনার প্রতিটি অ্যাপের AAR নির্ভরতা, যার মধ্যে নেটিভ কোড রয়েছে, একটি Android.mk ফাইল প্রকাশ করে যা আপনার ndk-build প্রকল্পে আমদানি করতে হবে। আপনি import&endash;module কমান্ড ব্যবহার করে এই ফাইলটি আমদানি করেন, যা আপনার ndk-build প্রকল্পে import&endash;add&endash;path বৈশিষ্ট্য ব্যবহার করে আপনার নির্দিষ্ট পাথগুলি অনুসন্ধান করে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন libapp.so সংজ্ঞায়িত করে এবং এটি curl ব্যবহার করে, তাহলে আপনার Android.mk ফাইলে নিম্নলিখিতগুলি অন্তর্ভুক্ত করা উচিত:
সিমেকের জন্য:
add_library(app SHARED app.cpp)# Add these two lines. find_package(curl REQUIRED CONFIG) target_link_libraries(app curl::curl)
ndk-buildজন্য:include $(CLEAR_VARS) LOCAL_MODULE := libapp LOCAL_SRC_FILES := app.cpp # Link libcurl from the curl AAR. LOCAL_SHARED_LIBRARIES := curl include $(BUILD_SHARED_LIBRARY)# If you don't expect that your project will be built using versions of the NDK # older than r21, you can omit this block. ifneq ($(call ndk-major-at-least,21),true) $(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH)) endif
# Import all modules that are included in the curl AAR. $(call import-module,prefab/curl)
AAR-তে অন্তর্ভুক্ত নেটিভ ডিপেনডেন্সিগুলি CMAKE_FIND_ROOT_PATH {: .external} ভেরিয়েবলের মাধ্যমে আপনার CMake প্রোজেক্টে প্রকাশিত হয়। CMake ইনভোক করা হলে এই মানটি Gradle দ্বারা স্বয়ংক্রিয়ভাবে সেট করা হবে, তাই যদি আপনার বিল্ড সিস্টেম এই ভেরিয়েবলটি পরিবর্তন করে, তাহলে এটিতে অ্যাসাইন করার পরিবর্তে append করতে ভুলবেন না।
প্রতিটি নির্ভরতা আপনার CMake বিল্ডে একটি config-file প্যাকেজ {: .external} প্রকাশ করে, যা আপনি find_package {: .external} কমান্ড দিয়ে আমদানি করেন। এই কমান্ডটি এমন config-file প্যাকেজ অনুসন্ধান করে যা প্রদত্ত প্যাকেজের নাম এবং সংস্করণের সাথে মেলে এবং আপনার বিল্ডে ব্যবহারের জন্য এটি সংজ্ঞায়িত লক্ষ্যগুলি প্রকাশ করে। উদাহরণস্বরূপ, যদি আপনার অ্যাপ্লিকেশন libapp.so সংজ্ঞায়িত করে এবং এটি curl ব্যবহার করে, তাহলে আপনার CMakeLists.txt ফাইলে নিম্নলিখিতগুলি অন্তর্ভুক্ত করা উচিত:
add_library(app SHARED app.cpp)
# Add these two lines.
find_package(curl REQUIRED CONFIG)
target_link_libraries(app curl::curl)
আপনি এখন app.cpp এ #include "curl/curl.h" নির্দিষ্ট করতে পারেন। যখন আপনি আপনার প্রকল্প তৈরি করেন, তখন আপনার বহিরাগত নেটিভ বিল্ড সিস্টেম স্বয়ংক্রিয়ভাবে libapp.so কে libcurl.so এর সাথে লিঙ্ক করে এবং APK বা অ্যাপ বান্ডেলে libcurl.so প্যাকেজগুলিকে লিঙ্ক করে। অতিরিক্ত তথ্যের জন্য, curl prefab নমুনা {:.external} দেখুন।
আচরণগত পরিবর্তন
প্লাগইনের এই সংস্করণটি ব্যবহার করার সময়, আপনি আচরণে নিম্নলিখিত পরিবর্তনগুলির সম্মুখীন হতে পারেন।
v1/v2 সাইনিং কনফিগারেশন আপডেট
signingConfig ব্লকে অ্যাপ সাইনিং কনফিগারেশনের আচরণ নিম্নলিখিতটিতে পরিবর্তিত হয়েছে:
v1 স্বাক্ষর
- যদি
v1SigningEnabledস্পষ্টভাবে সক্রিয় থাকে, তাহলে AGP v1 অ্যাপ সাইনিং সম্পাদন করে। - যদি ব্যবহারকারী
v1SigningEnabledস্পষ্টভাবে অক্ষম করে, তাহলে v1 অ্যাপ সাইনিং করা হবে না। - যদি ব্যবহারকারী স্পষ্টভাবে v1 সাইনিং সক্ষম না করে থাকেন, তাহলে
minSdkএবংtargetSdkএর উপর ভিত্তি করে এটি স্বয়ংক্রিয়ভাবে অক্ষম করা যেতে পারে।
v2 স্বাক্ষর
- যদি
v2SigningEnabledস্পষ্টভাবে সক্রিয় থাকে, তাহলে AGP v2 অ্যাপ সাইনিং সম্পাদন করে। - যদি ব্যবহারকারী
v2SigningEnabledস্পষ্টভাবে অক্ষম করে, তাহলে v2 অ্যাপ সাইনিং করা হবে না। - যদি ব্যবহারকারী স্পষ্টভাবে v2 সাইনিং সক্ষম না করে থাকেন, তাহলে
targetSdkউপর ভিত্তি করে এটি স্বয়ংক্রিয়ভাবে অক্ষম করা যেতে পারে।
এই পরিবর্তনগুলি AGP-কে ব্যবহারকারী স্পষ্টভাবে এই ফ্ল্যাগগুলি সক্ষম করেছেন কিনা তার উপর ভিত্তি করে সাইনিং মেকানিজম নিষ্ক্রিয় করে বিল্ডগুলি অপ্টিমাইজ করার অনুমতি দেয়। এই রিলিজের আগে, স্পষ্টভাবে সক্ষম থাকা সত্ত্বেও v1Signing নিষ্ক্রিয় করা সম্ভব ছিল, যা বিভ্রান্তিকর হতে পারে।
feature এবং instantapp অ্যান্ড্রয়েড গ্রেডল প্লাগইনগুলি সরানো হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন 3.6.0, অ্যান্ড্রয়েড অ্যাপ বান্ডেল ব্যবহার করে আপনার তাত্ক্ষণিক অ্যাপ তৈরি এবং প্যাকেজ করার জন্য ডায়নামিক ফিচার প্লাগইন ( com.android.feature com.android.dynamic-feature ) ব্যবহারের পক্ষে, ফিচার প্লাগইন (com.android.feature) এবং ইনস্ট্যান্ট অ্যাপ প্লাগইন ( com.android.instantapp ) কে অবহেলা করেছে।
অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ৪.০.০ এবং তার পরবর্তী সংস্করণে, এই অবহেলিত প্লাগইনগুলি সম্পূর্ণরূপে সরানো হয়। সুতরাং, সর্বশেষ অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ব্যবহার করার জন্য, আপনাকে আপনার ইনস্ট্যান্ট অ্যাপটিকে অ্যান্ড্রয়েড অ্যাপ বান্ডেল সমর্থন করার জন্য স্থানান্তর করতে হবে। আপনার ইনস্ট্যান্ট অ্যাপগুলি স্থানান্তর করে, আপনি অ্যাপ বান্ডেলগুলির সুবিধাগুলি কাজে লাগাতে পারেন এবং আপনার অ্যাপের মডুলার ডিজাইনকে সহজ করতে পারেন ।
দ্রষ্টব্য: অ্যান্ড্রয়েড স্টুডিও ৪.০ এবং উচ্চতর সংস্করণে সরানো প্লাগইন ব্যবহার করে এমন প্রকল্পগুলি খুলতে, প্রকল্পটিকে অবশ্যই অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ৩.৬.০ বা তার কম ব্যবহার করতে হবে।
পৃথক টীকা প্রক্রিয়াকরণ বৈশিষ্ট্য সরানো হয়েছে
একটি ডেডিকেটেড টাস্কে অ্যানোটেশন প্রক্রিয়াকরণকে আলাদা করার ক্ষমতা সরিয়ে ফেলা হয়েছে। জাভা-কেবল প্রকল্পগুলিতে নন-ইনক্রিমেন্টাল অ্যানোটেশন প্রসেসর ব্যবহার করা হলে ক্রমবর্ধমান জাভা সংকলন বজায় রাখার জন্য এই বিকল্পটি ব্যবহার করা হয়েছিল; gradle.properties ফাইলে android.enableSeparateAnnotationProcessing কে true তে সেট করে এটি সক্ষম করা হয়েছিল, যা আর কাজ করে না।
পরিবর্তে, বিল্ড কর্মক্ষমতা উন্নত করার জন্য আপনার ক্রমবর্ধমান অ্যানোটেশন প্রসেসর ব্যবহারে স্থানান্তরিত হওয়া উচিত।
includeCompileClasspath অবচিত হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন আর কম্পাইল ক্লাসপথে আপনার ঘোষিত অ্যানোটেশন প্রসেসর পরীক্ষা করে না বা অন্তর্ভুক্ত করে না, এবং annotationProcessorOptions.includeCompileClasspath DSL প্রোপার্টি আর কোনও প্রভাব ফেলে না। কম্পাইল ক্লাসপথে অ্যানোটেশন প্রসেসর অন্তর্ভুক্ত করলে, আপনি নিম্নলিখিত ত্রুটিটি পেতে পারেন:
Error: Annotation processors must be explicitly declared now.এই সমস্যা সমাধানের জন্য, আপনাকে annotationProcessor নির্ভরতা কনফিগারেশন ব্যবহার করে আপনার build.gradle ফাইলগুলিতে annotation প্রসেসর অন্তর্ভুক্ত করতে হবে। আরও জানতে, annotation প্রসেসর যোগ করুন পড়ুন।
CMake দ্বারা ব্যবহৃত পূর্বনির্মিত নির্ভরতার স্বয়ংক্রিয় প্যাকেজিং
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের পূর্ববর্তী সংস্করণগুলির জন্য আপনার CMake বহিরাগত নেটিভ বিল্ড দ্বারা ব্যবহৃত যেকোনো পূর্বনির্মিত লাইব্রেরি jniLibs ব্যবহার করে স্পষ্টভাবে প্যাকেজ করতে হবে। আপনার মডিউলের src/main/jniLibs ডিরেক্টরিতে, অথবা সম্ভবত আপনার build.gradle ফাইলে কনফিগার করা অন্য কোনও ডিরেক্টরিতে লাইব্রেরি থাকতে পারে:
sourceSets {
main {
// The libs directory contains prebuilt libraries that are used by the
// app's library defined in CMakeLists.txt via an IMPORTED target.
jniLibs.srcDirs = ['libs']
}
}sourceSets {
main {
// The libs directory contains prebuilt libraries that are used by the
// app's library defined in CMakeLists.txt via an IMPORTED target.
jniLibs.setSrcDirs(listOf("libs"))
}
}অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.০ এর সাথে, উপরের কনফিগারেশনটি আর প্রয়োজন নেই এবং এর ফলে বিল্ড ব্যর্থ হবে:
* What went wrong:
Execution failed for task ':app:mergeDebugNativeLibs'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
> More than one file was found with OS independent path 'lib/x86/libprebuilt.so'এক্সটার্নাল নেটিভ বিল্ড এখন স্বয়ংক্রিয়ভাবে সেই লাইব্রেরিগুলিকে প্যাকেজ করে, তাই স্পষ্টভাবে jniLibs দিয়ে লাইব্রেরি প্যাকেজ করার ফলে একটি ডুপ্লিকেট তৈরি হয়। বিল্ড ত্রুটি এড়াতে, প্রি-বিল্ট লাইব্রেরিটি jniLibs বাইরের কোনও স্থানে সরান অথবা আপনার build.gradle ফাইল থেকে jniLibs কনফিগারেশনটি সরিয়ে ফেলুন।
জ্ঞাত সমস্যা
এই বিভাগটি Android Gradle প্লাগইন 4.0.0-এ বিদ্যমান জ্ঞাত সমস্যাগুলি বর্ণনা করে।
গ্রেডল কর্মী ব্যবস্থায় রেসের অবস্থা
অ্যান্ড্রয়েড গ্র্যাডেল প্লাগইন ৪.০-এ পরিবর্তনের ফলে গ্র্যাডেলে রেস কন্ডিশন তৈরি হতে পারে যখন &endash;&endash;no&endash;daemon এবং গ্র্যাডেল ৬.৩ বা তার নিচের ভার্সনগুলি ব্যবহার করা হয়, যার ফলে বিল্ডগুলি শেষ হওয়ার পরেও হ্যাং হয়ে যায়।
এই সমস্যাটি Gradle 6.4 এ ঠিক করা হবে।