অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.০.০ (জুলাই ২০২১)
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.০.০ একটি প্রধান রিলিজ যাতে বিভিন্ন ধরণের নতুন বৈশিষ্ট্য এবং উন্নতি অন্তর্ভুক্ত রয়েছে।
৭.০.১ (আগস্ট ২০২১)
এই ছোটখাটো আপডেটে বিভিন্ন বাগ সংশোধন করা হয়েছে। উল্লেখযোগ্য বাগ সংশোধনের তালিকা দেখতে, রিলিজ আপডেট ব্লগে সম্পর্কিত পোস্টটি পড়ুন।
সামঞ্জস্য
| সর্বনিম্ন সংস্করণ | ডিফল্ট সংস্করণ | মন্তব্য | |
|---|---|---|---|
| গ্রেডল | ৭.০.২ | ৭.০.২ | আরও জানতে, Gradle আপডেট করা দেখুন। |
| SDK বিল্ড টুলস | ৩০.০.২ | ৩০.০.২ | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন । |
| এনডিকে | নিষিদ্ধ | ২১.৪.৭০৭৫৫২৯ | NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন । |
| জেডিকে | ১১ | ১১ | আরও জানতে, JDK সংস্করণ সেটিং দেখুন। |
AGP 7.0 চালানোর জন্য JDK 11 প্রয়োজন
আপনার অ্যাপ তৈরি করার জন্য Android Gradle প্লাগইন 7.0 ব্যবহার করার সময়, Gradle চালানোর জন্য JDK 11 এখন প্রয়োজন। Android Studio Arctic Fox JDK 11 কে একত্রিত করে এবং Gradle কে ডিফল্টরূপে ব্যবহারের জন্য কনফিগার করে, যার অর্থ হল বেশিরভাগ Android Studio ব্যবহারকারীদের তাদের প্রকল্পগুলিতে কোনও কনফিগারেশন পরিবর্তন করার প্রয়োজন হয় না।
যদি আপনাকে অ্যান্ড্রয়েড স্টুডিওর ভিতরে AGP দ্বারা ব্যবহৃত JDK সংস্করণটি ম্যানুয়ালি সেট করতে হয়, তাহলে আপনাকে JDK 11 বা তার উচ্চতর সংস্করণ ব্যবহার করতে হবে।
অ্যান্ড্রয়েড স্টুডিওর থেকে আলাদা AGP ব্যবহার করার সময়, JAVA_HOME এনভায়রনমেন্ট ভেরিয়েবল অথবা -Dorg.gradle.java.home কমান্ড-লাইন বিকল্পটি JDK 11 এর ইনস্টলেশন ডিরেক্টরিতে সেট করে JDK সংস্করণ আপগ্রেড করুন।
মনে রাখবেন যে অবচিত SDK Tools প্যাকেজের SDK Manager এবং AVD Manager JDK 11 এর সাথে কাজ করে না। AGP 7.0 এবং উচ্চতর সংস্করণের সাথে SDK Manager এবং AVD Manager ব্যবহার চালিয়ে যেতে, আপনাকে বর্তমান Android SDK Command-Line Tools প্যাকেজের নতুন সংস্করণগুলিতে স্যুইচ করতে হবে।
ভেরিয়েন্ট API স্থিতিশীল
নতুন ভ্যারিয়েন্ট API এখন স্থিতিশীল। com.android.build.api.variant প্যাকেজে নতুন ইন্টারফেস এবং gradle-recipes GitHub প্রকল্পে উদাহরণ দেখুন। নতুন ভ্যারিয়েন্ট API-এর অংশ হিসেবে, আমরা Artifacts ইন্টারফেসের মাধ্যমে আর্টিফ্যাক্ট নামে পরিচিত বেশ কয়েকটি ইন্টারমিডিয়েট ফাইল উপলব্ধ করেছি। এই আর্টিফ্যাক্টগুলি, মার্জ করা ম্যানিফেস্টের মতো, তৃতীয় পক্ষের প্লাগইন এবং কোড ব্যবহার করে নিরাপদে প্রাপ্ত এবং কাস্টমাইজ করা যেতে পারে।
আমরা নতুন কার্যকারিতা যোগ করে এবং কাস্টমাইজেশনের জন্য উপলব্ধ মধ্যবর্তী শিল্পকর্মের সংখ্যা বৃদ্ধি করে ভেরিয়েন্ট API সম্প্রসারণ অব্যাহত রাখব।
লিন্টের আচরণগত পরিবর্তন
এই বিভাগটি অ্যান্ড্রয়েড গ্রেডল প্লাগইন 7.0.0-এ একাধিক লিন্ট আচরণের পরিবর্তন বর্ণনা করে।
লাইব্রেরি নির্ভরতার জন্য উন্নত লিন্ট
checkDependencies = true দিয়ে lint চালানো এখন আগের তুলনায় দ্রুত। লাইব্রেরি নির্ভরতা সহ একটি অ্যাপ ধারণকারী অ্যান্ড্রয়েড প্রকল্পের জন্য, নীচে দেখানো হিসাবে checkDependencies true তে সেট করার এবং ./gradlew :app:lint মাধ্যমে lint চালানোর পরামর্শ দেওয়া হচ্ছে, যা সমান্তরালভাবে সমস্ত নির্ভরতা মডিউল বিশ্লেষণ করবে এবং অ্যাপ এবং এর সমস্ত নির্ভরতা থেকে সমস্যা সহ একটি একক প্রতিবেদন তৈরি করবে।
খাঁজকাটা
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}কোটলিন
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}লিন্টের কাজগুলি এখন আপডেট করা যাবে
যদি কোনও মডিউলের উৎস এবং রিসোর্স পরিবর্তন না করা হয়, তাহলে মডিউলের জন্য লিন্ট বিশ্লেষণ টাস্কটি আবার চালানোর প্রয়োজন হয় না। যখন এটি ঘটে, তখন গ্র্যাডল আউটপুটে টাস্কটির সম্পাদন "UP-TO-DATE" হিসাবে প্রদর্শিত হয়। এই পরিবর্তনের সাথে, checkDependencies = true সহ একটি অ্যাপ্লিকেশন মডিউলে লিন্ট চালানোর সময়, শুধুমাত্র পরিবর্তিত মডিউলগুলির বিশ্লেষণ চালানোর প্রয়োজন হবে। ফলস্বরূপ, লিন্ট আরও দ্রুত চালাতে পারে।
লিন্ট রিপোর্ট টাস্কটি চালানোরও প্রয়োজন নেই যদি এর ইনপুটগুলি পরিবর্তিত না হয়। একটি সম্পর্কিত জ্ঞাত সমস্যা হল যে লিন্ট টাস্কটি UP-TO-DATE ( ইস্যু #191897708 ) থাকাকালীন stdout-এ কোনও লিন্ট টেক্সট আউটপুট প্রিন্ট করা হয় না।
ডাইনামিক-ফিচার মডিউলগুলিতে লিন্ট চালানো
AGP আর dynamic-feature মডিউল থেকে lint চালানো সমর্থন করে না। সংশ্লিষ্ট অ্যাপ্লিকেশন মডিউল থেকে lint চালানো তার dynamic-feature মডিউলগুলিতে lint চালাবে এবং অ্যাপের lint রিপোর্টে সমস্ত সমস্যা অন্তর্ভুক্ত করবে। একটি সম্পর্কিত জ্ঞাত সমস্যা হল যে যখন একটি অ্যাপ মডিউল থেকে checkDependencies = true দিয়ে lint চালানো হয়, তখন dynamic-feature লাইব্রেরি নির্ভরতাগুলি পরীক্ষা করা হয় না যদি না সেগুলি অ্যাপ নির্ভরতাও হয় ( ইস্যু #191977888 )।
শুধুমাত্র ডিফল্ট ভেরিয়েন্টে লিন্ট চালানো হচ্ছে
./gradlew :app:lint চালানো এখন শুধুমাত্র ডিফল্ট ভেরিয়েন্টের জন্য lint চালায়। AGP এর পূর্ববর্তী সংস্করণগুলিতে, এটি সমস্ত ভেরিয়েন্টের জন্য lint চালাত।
R8 সঙ্করনে ক্লাস সতর্কতা অনুপস্থিত
R8 আরও সুনির্দিষ্টভাবে এবং ধারাবাহিকভাবে অনুপস্থিত ক্লাস এবং -dontwarn বিকল্পটি পরিচালনা করে। অতএব, আপনার R8 দ্বারা নির্গত অনুপস্থিত ক্লাস সতর্কতাগুলি মূল্যায়ন করা শুরু করা উচিত।
যখন R8 এমন কোনও ক্লাস রেফারেন্সের মুখোমুখি হয় যা আপনার অ্যাপে বা এর কোনও নির্ভরতায় সংজ্ঞায়িত করা হয়নি, তখন এটি আপনার বিল্ড আউটপুটে একটি সতর্কতা প্রকাশ করবে। উদাহরণস্বরূপ:
R8: Missing class: java.lang.instrument.ClassFileTransformer এই সতর্কীকরণের অর্থ হল আপনার অ্যাপের কোড বিশ্লেষণ করার সময় java.lang.instrument.ClassFileTransformer ক্লাসের সংজ্ঞা খুঁজে পাওয়া যায়নি। যদিও এর অর্থ সাধারণত একটি ত্রুটি রয়েছে, তবে এটি সম্ভব যে আপনি এই সতর্কতাটি উপেক্ষা করতে চাইতে পারেন। সতর্কতা উপেক্ষা করার দুটি সাধারণ কারণ হল:
যে লাইব্রেরিগুলি JVM এবং অনুপস্থিত ক্লাসকে লক্ষ্য করে তৈরি করা হয়েছে সেগুলি JVM লাইব্রেরি ধরণের (উপরের উদাহরণের মতো)।
আপনার নির্ভরতাগুলির মধ্যে একটি একটি কম্পাইল-টাইম-ওনলি API ব্যবহার করে।
আপনার proguard-rules.pro ফাইলে -dontwarn নিয়ম যোগ করে আপনি ক্লাসের অনুপস্থিত সতর্কতা উপেক্ষা করতে পারেন। উদাহরণস্বরূপ:
-dontwarn java.lang.instrument.ClassFileTransformer সুবিধার জন্য, AGP এমন একটি ফাইল তৈরি করবে যাতে সমস্ত সম্ভাব্য অনুপস্থিত নিয়ম থাকবে, সেগুলিকে একটি ফাইল পাথে লিখবে যেমন: app/build/outputs/mapping/release/missing_rules.txt । সতর্কতা উপেক্ষা করতে আপনার proguard-rules.pro ফাইলে নিয়মগুলি যোগ করুন।
AGP 7.0 তে, মিসিং ক্লাস মেসেজগুলি সতর্কীকরণ হিসেবে দেখা যাবে এবং আপনি gradle.properties তে android.r8.failOnMissingClasses = true সেট করে এগুলিকে ত্রুটিতে পরিণত করতে পারেন। AGP 8.0 তে, এই সতর্কতাগুলি আপনার বিল্ড ভেঙে ফেলার ত্রুটিতে পরিণত হবে। আপনার proguard-rules.pro ফাইলে -ignorewarnings বিকল্পটি যোগ করে AGP 7.0 আচরণ বজায় রাখা সম্ভব, তবে এটি সুপারিশ করা হয় না।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন বিল্ড ক্যাশে সরানো হয়েছে
AGP 4.1-এ AGP বিল্ড ক্যাশে সরানো হয়েছে। পূর্বে AGP 2.3-এ Gradle বিল্ড ক্যাশের পরিপূরক হিসেবে প্রবর্তিত হয়েছিল, AGP 4.1-এ Gradle বিল্ড ক্যাশ দ্বারা AGP বিল্ড ক্যাশ সম্পূর্ণরূপে প্রতিস্থাপন করা হয়েছিল। এই পরিবর্তনটি বিল্ড টাইমকে প্রভাবিত করে না।
AGP 7.0-এ, android.enableBuildCache প্রোপার্টি, android.buildCacheDir প্রোপার্টি এবং cleanBuildCache টাস্কটি সরিয়ে ফেলা হয়েছে।
আপনার প্রকল্পে জাভা ১১ সোর্স কোড ব্যবহার করুন
আপনি এখন আপনার অ্যাপের প্রজেক্টে সর্বাধিক জাভা ১১ সোর্স কোড কম্পাইল করতে পারবেন, যার ফলে আপনি প্রাইভেট ইন্টারফেস পদ্ধতি, বেনামী ক্লাসের জন্য ডায়মন্ড অপারেটর এবং ল্যাম্বডা প্যারামিটারের জন্য স্থানীয় ভেরিয়েবল সিনট্যাক্সের মতো নতুন ভাষার বৈশিষ্ট্য ব্যবহার করতে পারবেন।
এই বৈশিষ্ট্যটি সক্ষম করতে, compileOptions পছন্দসই জাভা সংস্করণে সেট করুন এবং compileSdkVersion 30 বা তার উপরে সেট করুন:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}নির্ভরতা কনফিগারেশন সরানো হয়েছে
AGP 7.0-এ, নিম্নলিখিত কনফিগারেশনগুলি (অথবা নির্ভরতা স্কোপগুলি) সরানো হয়েছে:
-
compile
ব্যবহারের ক্ষেত্রে নির্ভর করে, এটিapiঅথবাimplementationদ্বারা প্রতিস্থাপিত হয়েছে।
*Compile ভেরিয়েন্টের ক্ষেত্রেও প্রযোজ্য, উদাহরণস্বরূপ:debugCompile। -
provided
এটিcompileOnlyদ্বারা প্রতিস্থাপিত হয়েছে।
*প্রদত্ত ভেরিয়েন্টের ক্ষেত্রেও প্রযোজ্য, উদাহরণস্বরূপ:releaseProvided। -
apk
এটিruntimeOnlyদ্বারা প্রতিস্থাপিত হয়েছে। -
publish
এটিruntimeOnlyদ্বারা প্রতিস্থাপিত হয়েছে।
বেশিরভাগ ক্ষেত্রে, AGP আপগ্রেড সহকারী স্বয়ংক্রিয়ভাবে আপনার প্রকল্পটিকে নতুন কনফিগারেশনে স্থানান্তরিত করবে।
অ্যান্ড্রয়েড গ্রেডল প্লাগইনের বিপরীতে কম্পাইল করার সময় ক্লাসপাথ পরিবর্তন
যদি আপনি অ্যান্ড্রয়েড গ্রেডল প্লাগইনের বিপরীতে কম্পাইল করেন, তাহলে আপনার কম্পাইল ক্লাসপাথ পরিবর্তন হতে পারে। যেহেতু AGP এখন অভ্যন্তরীণভাবে api/implementation কনফিগারেশন ব্যবহার করে, তাই কিছু আর্টিফ্যাক্ট আপনার কম্পাইল ক্লাসপাথ থেকে সরানো হতে পারে। যদি আপনি কম্পাইল-টাইমে AGP নির্ভরতার উপর নির্ভর করেন, তাহলে এটিকে একটি স্পষ্ট নির্ভরতা হিসাবে যোগ করতে ভুলবেন না।
জাভা রিসোর্স ফোল্ডারে নেটিভ লাইব্রেরি যোগ করা সমর্থিত নয়।
পূর্বে, আপনি জাভা রিসোর্স ফোল্ডারে একটি নেটিভ লাইব্রেরি যোগ করতে পারতেন এবং android.sourceSets.main.resources.srcDirs ব্যবহার করে ফোল্ডারটি নিবন্ধন করতে পারতেন যাতে নেটিভ লাইব্রেরিটি বের করে চূড়ান্ত APK-তে যোগ করা যেত। AGP 7.0 দিয়ে শুরু করে, এটি সমর্থিত নয় এবং জাভা রিসোর্স ফোল্ডারে নেটিভ লাইব্রেরিগুলি উপেক্ষা করা হয়। পরিবর্তে, নেটিভ লাইব্রেরির জন্য তৈরি DSL পদ্ধতি, android.sourceSets.main.jniLibs.srcDirs ব্যবহার করুন। আরও তথ্যের জন্য, সোর্স সেটগুলি কীভাবে কনফিগার করবেন তা দেখুন।
জ্ঞাত সমস্যা
এই বিভাগটি Android Gradle প্লাগইন 7.0.0-এ বিদ্যমান জ্ঞাত সমস্যাগুলি বর্ণনা করে।
১.৪.x কোটলিন মাল্টিপ্ল্যাটফর্ম প্লাগইনের সাথে অসঙ্গতি
অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.০.০ কোটলিন মাল্টিপ্ল্যাটফর্ম প্লাগইন ১.৫.০ এবং তার পরবর্তী সংস্করণের সাথে সামঞ্জস্যপূর্ণ। কোটলিন মাল্টিপ্ল্যাটফর্ম সাপোর্ট ব্যবহারকারী প্রকল্পগুলিকে অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.০.০ ব্যবহার করার জন্য কোটলিন ১.৫.০ এ আপডেট করতে হবে। সমাধান হিসেবে, আপনি অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৪.২.x এ ডাউনগ্রেড করতে পারেন, যদিও এটি সুপারিশ করা হয় না।
আরও তথ্যের জন্য, KT-43944 দেখুন।
লিন্ট আউটপুট অনুপস্থিত
লিন্ট টাস্কটি আপ-টু-ডেট থাকাকালীন stdout-এ কোনও লিন্ট টেক্সট আউটপুট প্রিন্ট করা হয় না ( ইস্যু #191897708 )। আরও প্রেক্ষাপটের জন্য, লিন্টের জন্য আচরণগত পরিবর্তনগুলি দেখুন। এই সমস্যাটি অ্যান্ড্রয়েড গ্রেডল প্লাগইন 7.1-এ ঠিক করা হবে।
সমস্ত গতিশীল-বৈশিষ্ট্য লাইব্রেরি নির্ভরতা লিন্ট চেক করা হয় না
যখন একটি অ্যাপ মডিউল থেকে checkDependencies = true দিয়ে lint চালানো হয়, তখন dynamic-feature লাইব্রেরি নির্ভরতাগুলি পরীক্ষা করা হয় না যদি না সেগুলি অ্যাপ নির্ভরতাও হয় ( ইস্যু #191977888 )। সমাধান হিসেবে, lint টাস্কটি সেই লাইব্রেরিগুলিতে চালানো যেতে পারে। আরও প্রেক্ষাপটের জন্য, lint এর আচরণগত পরিবর্তনগুলি দেখুন।