Android Gradle Plugin 8.1.0 (জুলাই ২০২৩)

Android Gradle প্লাগ-ইন 8.1.0 হল একটি মেজর রিলিজ যাতে বিভিন্ন নতুন ফিচার ও উন্নতি অন্তর্ভুক্ত রয়েছে।

মানানসই

ন্যূনতম ভার্সন ডিফল্ট ভার্সন নোট
Gradle ৮.০ ৮.০ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK Build Tools 33.0.1 33.0.1 SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন।
NDK N/A ২৫.১.৮৯৩৭৩৯৩ NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন।
JDK 17 17 আরও জানতে, JDK ভার্সন সেট করা দেখুন।

বিল্ড কনফিগারেশনের জন্য Kotlin DSL হল ডিফল্ট

নতুন প্রোজেক্টে এখন বিল্ড কনফিগারেশনের জন্য ডিফল্ট হিসেবে Kotlin DSL (build.gradle.kts) ব্যবহার করা হয়। এটি সিনট্যাক্স হাইলাইট করা, কোড সম্পূর্ণ করা এবং ঘোষণা নেভিগেট করার মতো সুবিধা সহ Groovy DSL (build.gradle)-এর থেকে আরও ভালো এডিটিং অভিজ্ঞতা প্রদান করে। মনে রাখবেন, আপনি যদি বিল্ড কনফিগারেশনের জন্য AGP 8.1 এবং Kotlin DSL ব্যবহার করেন, তাহলে সেরা অভিজ্ঞতার জন্য আপনাকে Gradle 8.1 ব্যবহার করতে হবে। আরও জানতে, Kotlin DSL মাইগ্রেশন গাইড দেখুন।

প্রতিটি অ্যাপের জন্য অটোমেটিক ভাষা সংক্রান্ত সহায়তা

Android Studio Giraffe Canary 7 এবং AGP 8.1.0-alpha07 থেকে শুরু করে, আপনি অটোমেটিক প্রতি-অ্যাপ ভাষা পছন্দ কাজ করে এমনভাবে আপনার অ্যাপ কনফিগার করতে পারবেন। আপনার প্রজেক্ট রিসোর্সের উপর ভিত্তি করে, Android Gradle প্লাগ-ইন LocaleConfig ফাইল জেনারেট করে এবং ফাইনাল ম্যানিফেস্ট ফাইলে এটির রেফারেন্স যোগ করে, তাই আপনাকে আর এটি ম্যানুয়ালি করতে হবে না। LocaleConfig ফাইলে কোন কোন লোকেল অন্তর্ভুক্ত করতে হবে তা নির্ধারণ করতে AGP আপনার অ্যাপ মডিউলের res ফোল্ডারে থাকা রিসোর্স এবং যেকোনও লাইব্রেরি মডিউল নির্ভরতা ব্যবহার করে।

মনে রাখবেন, অটোমেটিক অ্যাপ-পিছু ভাষা ফিচার Android 13 (API লেভেল 33) বা এর পরের যেকোনও ভার্সনে চলে এমন অ্যাপে কাজ করে। এই ফিচার ব্যবহার করতে হলে, আপনাকে অবশ্যই compileSdkVersion-এর মান ৩৩ বা তার বেশি সেট করতে হবে। Android-এর আগের ভার্সনের জন্য প্রতি-অ্যাপের ভাষা সংক্রান্ত পছন্দ কনফিগার করতে, আপনাকে এখনও API ও ইন-অ্যাপ ভাষা বাছাইকারী ব্যবহার করতে হবে।

প্রতিটি অ্যাপের জন্য অটোমেটিক ভাষা সংক্রান্ত সহায়তা চালু করতে, একটি ডিফল্ট লোকেল নির্দিষ্ট করুন:

  1. অ্যাপ মডিউলের res ফোল্ডারে, resources.properties নামের একটি নতুন ফাইল তৈরি করুন।
  2. resources.properties ফাইলে, unqualifiedResLocale লেবেল দিয়ে ডিফল্ট লোকেল সেট করুন। লোকেল নাম তৈরি করতে, ভাষা কোডের সাথে ঐচ্ছিক স্ক্রিপ্ট ও অঞ্চলের কোড যোগ করুন। প্রতিটি কোডের মধ্যে ড্যাশ চিহ্ন দিয়ে আলাদা করুন:

    • ভাষা: দুই বা তিন অক্ষরের ISO 639-1 কোড ব্যবহার করুন।
    • স্ক্রিপ্ট (ঐচ্ছিক): ISO 15924কোড ব্যবহার করুন।
    • অঞ্চল (ঐচ্ছিক): দুই অক্ষরের ISO 3166-1-alpha-2 কোড অথবা তিন সংখ্যার UN_M.49 কোড ব্যবহার করুন।

    যেমন, আপনার ডিফল্ট লোকেল আমেরিকান ইংরেজি হলে:

        unqualifiedResLocale=en-US
        

AGP, res ফোল্ডারে values-* ডিরেক্টরি ব্যবহার করে, অটোমেটিক তৈরি হওয়া LocaleConfig ফাইলে এই ডিফল্ট লোকেল ও আপনার উল্লেখ করা বিকল্প লোকেল যোগ করে।

প্রতিটি অ্যাপের জন্য অটোমেটিক ভাষা সংক্রান্ত সহায়তা ডিফল্ট হিসেবে বন্ধ থাকে। ফিচারটি চালু করতে, মডিউল-লেভেল build.gradle.kts ফাইলে (আপনি Groovy ব্যবহার করলে build.gradle ফাইল) androidResources {} ব্লকের মধ্যে generateLocaleConfig সেটিং ব্যবহার করুন:

Kotlin

android {
  androidResources {
    generateLocaleConfig = true
  }
}

গ্ৰুভি

android {
  androidResources {
    generateLocaleConfig true
  }
}

Android Lint-এ JVM 17 টার্গেট করা বাইটকোড থাকে

AGP 8.1.0-alpha04 থেকে শুরু করে, Android Lint-এ JVM 17-কে টার্গেট করা বাইটকোড থাকে। আপনি কাস্টম লিন্ট চেক লিখলে, আপনাকে JDK 17 বা এর পরের যেকোনও ভার্সন দিয়ে কম্পাইল করতে হবে এবং Kotlin কম্পাইলার বিকল্পে jvmTarget = '17' উল্লেখ করতে হবে।

লিন্ট টুল সম্পর্কে আরও জানতে, লিন্ট চেকের মাধ্যমে আপনার কোড উন্নত করুন দেখুন।

C/C++ শেয়ার করা লাইব্রেরি কম্প্রেশন সেটিং DSL-এ সরানো হয়েছে

AGP 8.1.0-alpha10 থেকে শুরু করে, আপনি যদি ম্যানিফেস্টের পরিবর্তে DSL ব্যবহার করে C/C++ শেয়ার করা লাইব্রেরি কম্প্রেশন কনফিগার না করেন, তাহলে আপনাকে একটি সতর্কতা দেখানো হবে। DSL ব্যবহার করার জন্য আপনার কনফিগারেশন কীভাবে আপডেট করবেন তা নিম্নলিখিত নির্দেশিকা থেকে জানতে পারবেন। এইসব আপডেট করার ব্যাপারে সহায়তা পেতে, AGP আপগ্রেড অ্যাসিস্ট্যান্ট ব্যবহার করুন (টুল > AGP আপগ্রেড অ্যাসিস্ট্যান্ট)।

কমপ্রেস না করা C/C++ শেয়ারড লাইব্রেরি ব্যবহার করতে, ম্যানিফেস্ট থেকে android::extractNativeLibs অ্যাট্রিবিউট সরিয়ে দিন এবং মডিউল-লেভেল build.gradle.kts ফাইলে (আপনি Groovy ব্যবহার করলে build.gradle ফাইল) নিম্নলিখিত কোড যোগ করুন:

Kotlin

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging = false
    }
  }
}

গ্ৰুভি

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

এক্সপেরিমেন্টাল বিল্ড ফ্ল্যাগ

এগুলি হল AGP 8.1-এ উপলভ্য আপনার বিল্ড কনফিগার করার জন্য পরীক্ষামূলক ফ্ল্যাগ।

পতাকা এতে যোগ করা হয়েছে ডিফল্ট মান নোট
android.experimental.useDefaultDebugSigningConfigForProfileableBuildtypes AGP 8.0 false কোনও সাইনিং কনফিগারেশন নির্দিষ্ট না করে এটি চালু করলে, AGP প্রোফাইলের উপযুক্ত বা ডিবাগ করা যায় এমন বিল্ড চালানোর সময় ডিফল্ট ডিবাগ সাইনিং কনফিগারেশন ব্যবহার করে। বিল্ড লেখকদের নির্দিষ্ট প্রোফাইলিং সাইনিং কনফিগারেশন ঘোষণা করতে উৎসাহিত করতে এই ফ্ল্যাগ ডিফল্ট হিসেবে বন্ধ করা থাকে।
android.experimental.library.desugarAndroidTest AGP 8.0 false এই ফ্ল্যাগ লাইব্রেরি নির্মাতাদের AAR-এর উপর প্রভাব না ফেলে টেস্ট APK-এর জন্য কোর লাইব্রেরি ডিসুগারিং চালু করতে দেয়, যেমন লিন্টিংয়ের মাধ্যমে। আমরা Variant API-তে এই আচরণকে সমর্থন করার পরিকল্পনা করেছি।
android.experimental.testOptions.managedDevices.customDevice AGP 8.0 false চালু করা থাকলে, Gradle ম্যানেজ করা ডিভাইস, ব্যবহারকারীর দ্বারা সংজ্ঞায়িত কাস্টম ডিভাইস টাইপের অনুমতি দেয় যা একটি প্লাগ-ইন দ্বারা প্রদান করা যেতে পারে। আপনি Firebase Test Lab প্লাগ-ইন ব্যবহার করতে চাইলে এই ফ্ল্যাগ চালু করতে হবে।
android.lint.printStackTrace AGP 8.0 false চালু করা থাকলে, Android lint ক্র্যাশ করলে একটি স্ট্যাকট্রেস প্রিন্ট করে। এই ফ্ল্যাগ LINT_PRINT_STACKTRACE এনভায়রনমেন্ট ভেরিয়েবলের মতো একই ক্ষমতা রাখে।
android.experimental.testOptions.managedDevices.maxConcurrentDevices AGP 8.0 কোনওটিই নয় যেকোনও সময়ে অ্যাক্টিভ থাকতে পারে এমন কনকারেন্ট Gradle ম্যানেজ করা ডিভাইসের (AVD) সর্বাধিক সংখ্যা নির্দিষ্ট করে। মানটি ০ বা নেগেটিভ হলে, ডিভাইসের সর্বাধিক সংখ্যা থাকে না।
android.experimental.testOptions.installApkTimeout AGP 8.0 কোনওটিই নয় APK ইনস্টল করার জন্য সেকেন্ডে টাইম-আউটের সময়সীমা। ভ্যালু 0 বা নেগেটিভ হলে, UTP এটিকে ডিফল্ট ভ্যালুতে সেট করে দেবে।

সমাধান করা সমস্যা

Android Gradle প্লাগ-ইন 8.1.4

সমাধান করা সমস্যা
Android Gradle Plugin
আর্টিফ্যাক্ট ট্রান্সফর্মের মাধ্যমে আগে থেকেই ডেক্স করা থাকলে, সাবপ্রজেক্টের ক্লাসে ডেক্সিং টাস্ক রান করবেন না

Android Gradle প্লাগ-ইন 8.1.3

সমাধান করা সমস্যা
Android Gradle Plugin
[AGP 8.1.0] ./gradlew test fails with "Unable to find manifest output" if both splits.abi.isEnable and testOptions.unitTests.isIncludeAndroidResources are true
AGP 8.1-এ আপডেট করার পরে বিল্ড করা যায়নি

Android Gradle প্লাগ-ইন 8.1.2

সমাধান করা সমস্যা
Android Gradle Plugin
android লাইব্রেরি মডিউলে androidResources উপলভ্য নেই
[AGP 8.1.0] ./gradlew test fails with "Unable to find manifest output" if both splits.abi.isEnable and testOptions.unitTests.isIncludeAndroidResources are true
Shrinker (R8)
Kotlin 1.9-এ, নালচেক সরিয়ে দেওয়া হলে R8-এর মাধ্যমে Kotlin ল্যাম্বডা ধ্বংস হয়ে যায়
play-services-measurement-21.3.0-runtime.jar-এর জন্য R8 "কম্পাইলেশনের সময় আনডিফাইনড ভ্যালু পাওয়া গেছে" মেসেজ সহ ব্যর্থ হয়

Android Gradle প্লাগ-ইন 8.1.1

সমাধান করা সমস্যা
Dexer (D8)
Java 16 Records: equals(null) NullPointerException থ্রো করে
Shrinker (R8)
java.lang.VerifyError: Verifier rejected class
Apache POI লাইব্রেরি ব্যবহার করার সময় :minifyReleaseWithR8-এ বিল্ড আটকে যায়
r8 অপ্টিমাইজ চালু থাকলে ইনভোকেশন বাতিল করা
java.lang.reflect.Executable-এর জন্য NoClassDefFoundError

Android Gradle প্লাগ-ইন 8.1.0

সমাধান করা সমস্যা
Android Gradle Plugin
কনফিগারেশন ক্যাশে সংক্রান্ত `com.android.build.gradle.tasks.ShaderCompile` সমস্যা
AGP API ব্যবহার করে Java রিসোর্সে যোগ করলে কনফিগারেশন ক্যাশে ভেঙে যায়
[Android Studio : Flamingo | 2022.2.1 Canary 8] liblog.so APK-এর মধ্যে প্যাকেজ করা আছে
কনফিগারেশনের সময় KGP ম্যানিফেস্ট পড়ে, ম্যানিফেস্টে পরিবর্তন হলে কনফিগারেশন ক্যাশে বাতিল করে দেয়
মার্জ করা ম্যানিফেস্টে সমস্যা হলে বিল্ড সতর্কতামূলক মেসেজ অস্পষ্ট হয়
AGP 7.4-এ আপগ্রেড করলে StackOverflowError হয়
ডায়নামিক ফিচারে ClassNotFoundException যা সরাসরি Kotlin লাইব্রেরি সাবপ্রজেক্টের উপর নির্ভর করে
টেস্ট ভ্যারিয়েন্টের জন্য ম্যানিফেস্ট প্লেসহোল্ডার সহ processDebugUnitTestManifest কাজ করছে না
টেস্ট ভ্যারিয়েন্টের জন্য ম্যানিফেস্ট প্লেসহোল্ডার সহ processDebugUnitTestManifest কাজ করছে না
নেমস্পেস প্রপার্টি সম্ভবত HasAndroidResources-এর
"শেষবার প্রোজেক্ট সিঙ্ক করার পর থেকে Gradle ফাইল পরিবর্তন করা হয়েছে" মেসেজ বন্ধ করা যাচ্ছে না
"আমরা নতুন Android Gradle প্লাগ-ইন ব্যবহার করার সাজেশন দিই" যখন কোনও নতুন প্লাগ-ইন থাকে না
টেস্ট ভ্যারিয়েন্টের জন্য ম্যানিফেস্ট প্লেসহোল্ডার সহ processDebugUnitTestManifest কাজ করছে না
CheckAarMetadataTask-এ কম্পাইল SDK চেক বন্ধ করার জন্য বুলিয়ান ফ্ল্যাগ
বিল্ড সংক্রান্ত সমস্যার অর্থ হল API লেভেল 34, যা নেই
JVM টুলচেন সেট করলে JavaCompile targetCompatibility ভ্যালুর উপর কোনও প্রভাব পড়ে না
ওয়াইল্ডকার্ড ডোমেন সহ নেভিগেশন ডিপ লিঙ্ক এন্ট্রিতে মার্জ করা ম্যানিফেস্টে `android:host` অ্যাট্রিবিউট নেই
Android Gradle Plugin 8.1 থেকে processDebugMainManifest টাস্ক কাজ করছে না
আমরা কি AnalyticsRecordingTask সরাতে পারি?
output-metadata.json-এর কন্টেন্ট সামঞ্জস্যপূর্ণ নয়
আমরা কি AnalyticsRecordingTask সরাতে পারি?
output-metadata.json-এর কন্টেন্ট সামঞ্জস্যপূর্ণ নয়
JVM টুলচেন সেট করলে JavaCompile targetCompatibility ভ্যালুর উপর কোনও প্রভাব পড়ে না
ওয়াইল্ডকার্ড ডোমেন সহ নেভিগেশন ডিপ লিঙ্ক এন্ট্রিতে মার্জ করা ম্যানিফেস্টে `android:host` অ্যাট্রিবিউট নেই
Android Gradle Plugin 8.1 থেকে processDebugMainManifest টাস্ক কাজ করছে না
Android Studio, STUDIO_GRADLE_JDK এনভায়রনমেন্ট ভেরিয়েবলকে সম্মান করে না
কাস্টম সোর্সের ধরন থেকে একাধিক ফ্লেভারের সোর্সসেট তৈরি করা উচিত
DependenciesInfoBuilder-এর API আপডেট + ডকুমেন্ট প্রয়োজন
নেস্ট মেম্বার না থাকার কারণে Java 11 টার্গেট সহ DexingNoClasspathTransform (minSdk >= 24) কাজ করে না
DslExtension.Builder.extendProjectWith() Groovy-তে যেভাবে বর্ণনা করা হয়েছে সেইভাবে কাজ করছে না
kotlin.Pair ব্যবহার করে না এমন VariantSelector.withFlavor API যোগ করুন
AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) has a cache miss because `proguard.txt` has changed
অ্যাপ মার্জ করা ম্যানিফেস্টে ডিপেন্ডেন্সি থেকে extractNativeLibs এবং useEmbeddedDex অ্যাট্রিবিউট থাকে
AGP: AIDL টুল ও ফ্রেমওয়ার্ক AIDL ফাইলের পাথকে পাবলিক API হিসেবে এক্সপোজ করা
অনুরোধ: IDE-কে "PermittedSubclasses requires ASM9" সমস্যার সমাধান অফার করতে দিন
সমস্যা: "KSP চালু করুন এবং এর পরিবর্তে এই ডিপেন্ডেন্সির জন্য KSP প্রসেসর ব্যবহার করুন" মেসেজটি শুধু একটি ওয়েবসাইটে নিয়ে যায়
.gradle/.android/analytics.settings-এর কারণে Gradle 8.1 কনফিগারেশন ক্যাশিং ভেঙে দেয়
agp 8.1.0-এ generateLocaleConfig নন-ডিটারমিনিস্টিক অর্ডারিং ব্যবহার করে, এর ফলে রিপোডিউসিবল বিল্ড ভেঙে যায়
Dexer (D8)
সাম্প্রতিক আপডেটের পরে কোর লাইব্রেরি ডিসুগারিং ক্র্যাশ করছে।
API 21 সহ agp 8.1.0 রিগ্রেশন - F/dex2oat ( 4176): art/compiler/driver/compiler_driver.cc:1181] চেক করা যায়নি: !method->IsAbstract()
Lint
Lint শুধুমাত্র সরাসরি প্রয়োগ করা ইন্টারফেসের জন্য নিরাপদ কাস্ট চেক করে, ইনহেরিট করা ইন্টারফেসের জন্য নয়
কল রিসিভারের জন্য Lint সঠিক কাস্ট চেক করে না
TypedArray#close (API 31) not desugared but AS does not display warning when used in try-with-resources
সমস্যা: "The 'BC' provider is deprecated and as of Android P..." সংক্রান্ত ভুল পজিটিভ সতর্কতা
Kotlin 1.8.0-এ আপগ্রেড করার পরে remember সংক্রান্ত Lint ফলস পজিটিভ
enum প্যারামিটার সহ কোনও পদ্ধতির মধ্যে SDK_INT চেক করার জন্য ভুল পজিটিভ Lint সতর্কতা
TypographyQuotes লিন্ট চেক এস্কেপ করা কোটেশনে কাজ করে না
TrustAllX509TrustManager লিন্ট চেক ভুলভাবে X509TrustManager এক্সটেন্ড করা ইন্টারফেসকে ফ্ল্যাগ করে
পরিবর্তন সংক্রান্ত সমস্যার সমাধানের জন্য যোগ করা কোডটি রিফর্ম্যাট করা
Lint: intention preview throws exception for ReplaceStringQuickFix
Shrinker (R8)
VerifyError: Kotlin 1.8.20-এর সাথে R8 ব্যবহার করার সময় যাচাইকারী ক্লাস বাতিল করে দিয়েছে
AGP 8-এ R8 Google Fit পরিষেবা ভেঙে দেয়
ইনপুট নামের সাথে ওভারল্যাপ করা অবশিষ্ট নাম সহ সোর্স ফাইলের তথ্য সঠিকভাবে উপস্থাপন করা হয় না
ArrayIndexOutOfBoundsException সহ Compose বিল্ডের সময় R8 কাজ করে না
Simple StringBuilder সম্পর্কিত কোডে রিলিজ বা debuggable=false মোডে যোগ করার জন্য টেল কল মিস করে
VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds() পদ্ধতিতে একটি প্রান্তিক কেস
dex-startup-optimization results in java.lang.VerifyError: Rejecting class
Android 12+ ভার্সনে যাচাইকরণ সংক্রান্ত সমস্যার কারণে ক্র্যাশ করা