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

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

সামঞ্জস্য

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ মন্তব্য
গ্রেডল ৮.০ ৮.০ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস ৩৩.০.১ ৩৩.০.১ SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন
এনডিকে নিষিদ্ধ ২৫.১.৮৯৩৭৩৯৩ NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন
জেডিকে ১৭ ১৭ আরও জানতে, JDK সংস্করণ সেটিং দেখুন।

বিল্ড কনফিগারেশনের জন্য কোটলিন ডিএসএল ডিফল্ট

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

প্রতি-অ্যাপের জন্য স্বয়ংক্রিয় ভাষা সহায়তা

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

মনে রাখবেন যে স্বয়ংক্রিয় প্রতি-অ্যাপ ভাষা বৈশিষ্ট্যটি Android 13 (API স্তর 33) বা তার বেশি চলমান অ্যাপগুলিকে সমর্থন করে। বৈশিষ্ট্যটি ব্যবহার করতে, আপনাকে compileSdkVersion কে 33 বা তার বেশিতে সেট করতে হবে। 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 ফাইলে যোগ করে।

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

কোটলিন

android {
  androidResources {
    generateLocaleConfig = true
  }
}

খাঁজকাটা

android {
  androidResources {
    generateLocaleConfig true
  }
}

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

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

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

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

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

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

কোটলিন

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

খাঁজকাটা

android {
  packagingOptions {
    jniLibs {
      useLegacyPackaging false
    }
  }
}

পরীক্ষামূলক বিল্ড পতাকা

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

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

সমস্যা সমাধান করা হয়েছে

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

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

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

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
[AGP 8.1.0] ./gradlew পরীক্ষা "Unable to find manifest output" দিয়ে ব্যর্থ হয় যদি splits.abi.isEnable এবং testOptions.unitTests.isIncludeAndroidResources উভয়ই সত্য হয়
AGP 8.1 এ আপডেট করার পরে বিল্ড ব্যর্থতা

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

সমস্যা সমাধান করা হয়েছে
অ্যান্ড্রয়েড গ্রেডল প্লাগইন
androidResources অ্যান্ড্রয়েড লাইব্রেরি মডিউলে উপলব্ধ নয়
[AGP 8.1.0] ./gradlew পরীক্ষা "Unable to find manifest output" দিয়ে ব্যর্থ হয় যদি splits.abi.isEnable এবং testOptions.unitTests.isIncludeAndroidResources উভয়ই সত্য হয়
শ্রিঙ্কার (R8)
যদি নালচেকগুলি বাদ দেওয়া হয়, তাহলে Kotlin 1.9-এর ফলে R8 দ্বারা Kotlin lambdas ধ্বংস হয়ে যায়।
play-services-measurement-21.3.0-runtime.jar-এর জন্য "সংকলনের সময় অনির্ধারিত মান দেখা গেছে" এর সাথে R8 ব্যর্থ হয়েছে।

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

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

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

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