অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.0 (জুলাই 2023)

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.0 একটি বড় রিলিজ যাতে বিভিন্ন ধরনের নতুন বৈশিষ্ট্য এবং উন্নতি রয়েছে।

সামঞ্জস্য

ন্যূনতম সংস্করণ ডিফল্ট সংস্করণ নোট
গ্রেডল ৮.০ ৮.০ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস 33.0.1 33.0.1 SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন
এনডিকে N/A 25.1.8937393 NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন
জেডিকে 17 17 আরও জানতে, JDK সংস্করণ সেট করা দেখুন।

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

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

স্বয়ংক্রিয় প্রতি-অ্যাপ ভাষা সমর্থন

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

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

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

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

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

    উদাহরণস্বরূপ যদি আপনার ডিফল্ট লোকেল আমেরিকান ইংরেজি হয়:

        unqualifiedResLocale=en-US
        

AGP এই ডিফল্ট লোকেল এবং আপনার নির্দিষ্ট করা যেকোনো বিকল্প লোকেল যোগ করে, res ফোল্ডারে values-* ডিরেক্টরি ব্যবহার করে, স্বয়ংক্রিয়ভাবে তৈরি LocaleConfig ফাইলে।

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

কোটলিন

android {
  androidResources {
    generateLocaleConfig = true
  }
}

গ্রোভি

android {
  androidResources {
    generateLocaleConfig true
  }
}

অ্যান্ড্রয়েড লিন্টে JVM 17 টার্গেটিং বাইটকোড রয়েছে

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

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

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

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

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

কোটলিন

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

গ্রোভি

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

পরীক্ষামূলক নির্মাণ পতাকা

এজিপি 8.1-এ উপলব্ধ আপনার বিল্ড কনফিগার করার জন্য এটি পরীক্ষামূলক পতাকা।

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

স্থির সমস্যা

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.0

স্থায়ী সমস্যা
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
কনফিগারেশন ক্যাশের সাথে `com.android.build.gradle.tasks.ShaderCompile` সমস্যা
এজিপি এপিআই ব্যবহার করে জাভা রিসোর্সে যোগ করা কনফিগারেশন ক্যাশে ব্রেক করে
[অ্যান্ড্রয়েড স্টুডিও : ফ্ল্যামিঙ্গো | 2022.2.1 Canary 8] liblog.so APK-এর ভিতরে প্যাকেজ করা আছে
KGP কনফিগারেশনের সময় ম্যানিফেস্ট পড়ে, ম্যানিফেস্ট পরিবর্তনে কনফিগারেশন ক্যাশে বাতিল করে
মার্জড ম্যানিফেস্টে সমস্যা হলে অস্পষ্ট সতর্কতা বার্তা তৈরি করুন
AGP 7.4-এ আপগ্রেড করার ফলে একটি StackOverflowError হয়
গতিশীল বৈশিষ্ট্যে ClassNotFoundException যা সরাসরি Kotlin লাইব্রেরি সাবপ্রজেক্টের উপর নির্ভর করে
processDebugUnitTestManifest পরীক্ষার ভেরিয়েন্টের জন্য ম্যানিফেস্ট স্থানধারকদের সাথে ব্যর্থ হচ্ছে
processDebugUnitTestManifest পরীক্ষার ভেরিয়েন্টের জন্য ম্যানিফেস্ট স্থানধারকদের সাথে ব্যর্থ হচ্ছে
নামস্থান সম্পত্তি সম্ভবত HasAndroidResources-এর অন্তর্গত
"শেষ প্রকল্প সিঙ্কের পর থেকে গ্রেডল ফাইলগুলি পরিবর্তিত হয়েছে" বার্তাটি অক্ষম করা যাবে না৷
"আমরা একটি নতুন Android Gradle প্লাগইন ব্যবহার করার পরামর্শ দিই" যখন একটি নতুন না থাকে
processDebugUnitTestManifest পরীক্ষার ভেরিয়েন্টের জন্য ম্যানিফেস্ট স্থানধারকদের সাথে ব্যর্থ হচ্ছে
CheckAarMetadataTask-এ কম্পাইল SDK চেক অক্ষম করার জন্য বুলিয়ান পতাকা
বিল্ড ত্রুটি API স্তর 34 বোঝায়, যা বিদ্যমান নেই
JVM টুলচেন সেট করা JavaCompile টার্গেট কম্প্যাটিবিলিটি মানকে প্রভাবিত করে না
ওয়াইল্ডকার্ড ডোমেন সহ নেভিগেশন ডিপলিঙ্ক এন্ট্রিগুলিতে মার্জ করা ম্যানিফেস্টে একটি `android:host` বৈশিষ্ট্য নেই
Android Gradle Plugin 8.1 থেকে processDebugMainManifest টাস্ক ব্যর্থ হয়েছে
আমরা কি অ্যানালিটিক্স রেকর্ডিং টাস্ক মুছে ফেলতে পারি?
output-metadata.json-এর বিষয়বস্তু সামঞ্জস্যপূর্ণ নয়
আমরা কি অ্যানালিটিক্স রেকর্ডিং টাস্ক মুছে ফেলতে পারি?
output-metadata.json-এর বিষয়বস্তু সামঞ্জস্যপূর্ণ নয়
JVM টুলচেন সেট করা JavaCompile টার্গেট কম্প্যাটিবিলিটি মানকে প্রভাবিত করে না
ওয়াইল্ডকার্ড ডোমেন সহ নেভিগেশন ডিপলিঙ্ক এন্ট্রিগুলিতে মার্জ করা ম্যানিফেস্টে একটি `android:host` বৈশিষ্ট্য নেই
Android Gradle Plugin 8.1 থেকে processDebugMainManifest টাস্ক ব্যর্থ হয়েছে
Android স্টুডিও STUDIO_GRADLE_JDK এনভায়রনমেন্ট ভেরিয়েবলকে সম্মান করে না
কাস্টম সোর্স টাইপের মাল্টি-ফ্লেভার সোর্সসেট তৈরি করা উচিত
DependenciesInfoBuilder এর API আপডেট + ডক প্রয়োজন
জাভা 11 টার্গেট সহ DexingNoClasspathTransform (minSdk >= 24) নেস্ট সদস্যদের অনুপস্থিত থাকার কারণে ব্যর্থ হয়েছে
DslExtension.Builder.extendProjectWith() Groovy-তে বর্ণিত হিসাবে কাজ করছে না
VariantSelector.withFlavor API যোগ করুন যা kotlin.Pair ব্যবহার করে না
AndroidLintAnalysisTask ( :lintAnalyzeExternalRelease) ক্যাশে মিস করেছে কারণ `proguard.txt` পরিবর্তিত হয়েছে
অ্যাপ মার্জড ম্যানিফেস্টে extractNativeLibs রয়েছে এবং নির্ভরতা থেকে EmbeddedDex অ্যাট্রিবিউট ব্যবহার করে
AGP: পাবলিক API হিসাবে AIDL টুল এবং ফ্রেমওয়ার্ক AIDL ফাইলের পথ প্রকাশ করুন
অনুরোধ: IDE কে "PermittedSubclasses এর ASM9 প্রয়োজন" এর জন্য একটি সমাধান অফার করতে দিন
বাগ: "KSP সক্ষম করুন এবং পরিবর্তে এই নির্ভরতার জন্য KSP প্রসেসর ব্যবহার করুন" শুধুমাত্র একটি ওয়েবসাইটে যায়
Gradle 8.1 .gradle/.android/analytics.settings এর কারণে কনফিগারেশন ক্যাশিং ব্রেক করে
AGP 8.1.0-এ generateLocaleConfig অ-নির্ধারণমূলক ক্রম ব্যবহার করে, পুনরুত্পাদনযোগ্য বিল্ডগুলি ভেঙে দেয়
ডেক্সার (D8)
সাম্প্রতিক আপডেটের পর কোর লাইব্রেরি ডিসুগারিং ক্র্যাশিং অ্যাপ।
API 21 - F/dex2oat (4176) এর সাথে agp 8.1.0 রিগ্রেশন: art/compiler/driver/compiler_driver.cc:1181] চেক ব্যর্থ হয়েছে: !method->IsAbstract()
লিন্ট
লিন্ট শুধুমাত্র সরাসরি বাস্তবায়িত ইন্টারফেসের জন্য নিরাপদ কাস্ট পরীক্ষা করে, উত্তরাধিকারসূত্রে প্রাপ্ত নয়
লিন্ট কল রিসিভারের জন্য বৈধ কাস্ট চেক করে না
TypedArray#close (API 31) desugared না কিন্তু AS-এর সাহায্যে রিসোর্স ব্যবহার করার সময় সতর্কতা প্রদর্শন করে না
বাগ: "BC' প্রদানকারীর মিথ্যা ইতিবাচক সতর্কতা অবমূল্যায়ন করা হয়েছে এবং Android P..."
Kotlin 1.8.0 এ আপগ্রেড করার পরে মনে রাখার বিষয়ে লিন্ট মিথ্যা ইতিবাচক
একটি enum প্যারামিটার সহ একটি পদ্ধতির মধ্যে সম্পাদিত SDK_INT চেকের জন্য মিথ্যা ইতিবাচক লিন্ট সতর্কতা
টাইপোগ্রাফি কোটস লিন্ট চেক পালিয়ে যাওয়া উদ্ধৃতিতে কাজ করে না
TrustAllX509TrustManager লিন্ট চেক ভুলভাবে ইন্টারফেস ফ্ল্যাগ করে যা X509TrustManager প্রসারিত করে
একটি প্রতিস্থাপন ফিক্সের সন্নিবেশিত কোডটি পুনরায় ফর্ম্যাট করা
লিন্ট: উদ্দেশ্য প্রিভিউ ReplaceStringQuickFix-এর জন্য ব্যতিক্রম নিক্ষেপ করে
সঙ্কুচিত (R8)
VerifyError: Kotlin 1.8.20 এর সাথে R8 ব্যবহার করার সময় যাচাইকারী ক্লাস প্রত্যাখ্যান করেছে
AGP 8-এ R8 Google Fit পরিষেবা ভেঙে দেয়
ইনপুট নামগুলিকে ওভারল্যাপ করে এমন অবশিষ্ট নামগুলির সাথে উত্স ফাইলের তথ্য সহ সঠিকভাবে উপস্থাপন করা হয় না
ArrayIndexOutOfBoundsException সহ কম্পোজ বিল্ডের সময় R8 ব্যর্থ হয়
সাধারণ স্ট্রিংবিল্ডার সম্পর্কিত কোড রিলিজ বা ডিবাগেবল=ফলস মোডে যুক্ত করতে টেল কল মিস করে
VirtualDispatchMethodArgumentPropagator.shouldActivateMethodStateGuardedByBounds() পদ্ধতিতে একটি কোণার কেস
dex-স্টার্টআপ-অপ্টিমাইজেশন ফলাফল java.lang.VerifyError: ক্লাস প্রত্যাখ্যান করা হচ্ছে
Android 12+ এ যাচাইকরণ ত্রুটির সাথে ক্র্যাশ

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.1

স্থায়ী সমস্যা
ডেক্সার (D8)
Java 16 রেকর্ডস: equals(null) থ্রো NullPointerException
সঙ্কুচিত (R8)
java.lang.VerifyError: যাচাইকারী প্রত্যাখ্যান করেছে ক্লাস
Apache POI লাইব্রেরি ব্যবহার করার সময় :minifyReleaseWithR8 এ বিল্ড আটকে যায়
r8 অপ্টিমাইজ সক্ষম করার সময় আহ্বান প্রত্যাখ্যান করা
java.lang.reflect.Executable এর জন্য NoClassDefFoundError

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.2

স্থায়ী সমস্যা
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
androidResources অ্যান্ড্রয়েড লাইব্রেরি মডিউলে উপলব্ধ নয়
[AGP 8.1.0] ./gradlew পরীক্ষা ব্যর্থ হয় "মেনিফেস্ট আউটপুট খুঁজে পেতে অক্ষম" যদি উভয় splits.abi.isEnable এবং testOptions.unitTests.isIncludeAndroidResources সত্য হয়
সঙ্কুচিত (R8)
কোটলিন 1.9 এর কারণে নালচেক ছিনতাই করা হলে কোটলিন ল্যাম্বডাস R8 দ্বারা ধ্বংস হয়ে যায়
প্লে-সার্ভিস-মেজারমেন্ট-21.3.0-runtime.jar-এর জন্য R8 "সংকলনের সময় অনির্ধারিত মান সম্মুখীন" এর সাথে ব্যর্থ হয়

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.3

স্থায়ী সমস্যা
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
[AGP 8.1.0] ./gradlew পরীক্ষা ব্যর্থ হয় "মেনিফেস্ট আউটপুট খুঁজে পেতে অক্ষম" যদি উভয় splits.abi.isEnable এবং testOptions.unitTests.isIncludeAndroidResources সত্য হয়
AGP 8.1 আপডেট করার পরে বিল্ড ব্যর্থতা

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.1.4

স্থায়ী সমস্যা
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
সাবপ্রজেক্টের ক্লাসে ডেক্সিং টাস্ক চালাবেন না যখন তারা ইতিমধ্যে আর্টিফ্যাক্ট ট্রান্সফর্মের মাধ্যমে ডেক্সড হয়েছে