Android Gradle Plugin 3.3.0 (জানুয়ারি ২০১৯)
Android প্লাগ-ইনের এই ভার্সনের জন্য নিম্নলিখিত বিষয়গুলি প্রয়োজন:
| ন্যূনতম ভার্সন | ডিফল্ট ভার্সন | নোট | |
|---|---|---|---|
| Gradle | ৪.১০.১ | ৪.১০.১ | আরও জানতে, Gradle আপডেট করা দেখুন। Gradle 5.0 ও তার পরের যেকোনও ভার্সন ব্যবহার করার সময়, ডিফল্ট Gradle ডেমন মেমরি হিপ সাইজ ১ জিবি থেকে কমে ৫১২ এমবি হয়ে যায়। এর ফলে বিল্ড পারফর্ম্যান্স রিগ্রেশন হতে পারে। এই ডিফল্ট সেটিং ওভাররাইড করতে, আপনার প্রোজেক্টের gradle.properties ফাইলে Gradle ডেমন হিপ সাইজ নির্দিষ্ট করুন। |
| SDK Build Tools | ২৮.০.৩ | ২৮.০.৩ | SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন। |
এই মাইনর আপডেট নতুন ডিফল্ট সেটিংস ও ফিচারের সাথে মানানসই হওয়ার ব্যাপারে সহায়তা করে। Android 11-এ প্যাকেজ দৃশ্যমানতা।
আরও বিবরণের জন্য 4.0.1 রিলিজ নোট দেখুন।
৩.৩.২ (মার্চ ২০১৯)
এই মাইনর আপডেট Android Studio 3.3.2-এ কাজ করে এবং এতে বিভিন্ন সমস্যার সমাধান ও পারফর্ম্যান্সের উন্নতি অন্তর্ভুক্ত। উল্লেখযোগ্য বাগ ফিক্সের তালিকা দেখতে, রিলিজ আপডেট ব্লগ-এ সম্পর্কিত পোস্টটি পড়ুন।
৩.৩.১ (ফেব্রুয়ারি ২০১৯)
এই মাইনর আপডেট Android Studio 3.3.1-এ কাজ করে এবং এতে বিভিন্ন সমস্যার সমাধান ও পারফর্ম্যান্সের উন্নতি অন্তর্ভুক্ত।
নতুন বৈশিষ্ট্য
-
উন্নত ক্লাসপাথ সিঙ্ক্রোনাইজেশন: আপনার রানটাইম ও কম্পাইল টাইম ক্লাসপাথে ডিপেন্ডেন্সি সংক্রান্ত সমস্যার সমাধান করার সময়, Android Gradle প্লাগ-ইন একাধিক ক্লাসপাথ জুড়ে থাকা ডিপেন্ডেন্সির জন্য নির্দিষ্ট ডাউনস্ট্রিম ভার্সন সংক্রান্ত সমস্যা সমাধান করার চেষ্টা করে।
যেমন, রানটাইম ক্লাসপাথে যদি লাইব্রেরি A ভার্সন ২.০ থাকে এবং কম্পাইল ক্লাসপাথে লাইব্রেরি A ভার্সন ১.০ থাকে, তাহলে প্লাগ-ইন অটোমেটিক কম্পাইল ক্লাসপাথে লাইব্রেরি A ভার্সন ২.০-এর উপর নির্ভরতা আপডেট করে, যাতে কোনও সমস্যা না হয়।
তবে, রানটাইম ক্লাসপাথে যদি লাইব্রেরি A ভার্সন 1.0 থাকে এবং কম্পাইলে যদি লাইব্রেরি A ভার্সন 2.0 থাকে, তাহলে প্লাগ-ইনটি কম্পাইল ক্লাসপাথে থাকা ডিপেন্ডেন্সি লাইব্রেরি A ভার্সন 1.0-এ ডাউনগ্রেড করে না এবং আপনি একটি সমস্যা দেখতে পাবেন। আরও জানতে, ক্লাসপথ সংক্রান্ত সমস্যা সমাধান করুন।
-
অ্যানোটেশন প্রসেসর ব্যবহার করার সময় উন্নত ইনক্রিমেন্টাল জাভা কম্পাইলেশন: এই আপডেট অ্যানোটেশন প্রসেসর ব্যবহার করার সময় ইনক্রিমেন্টাল জাভা কম্পাইলেশনের জন্য সহায়তা উন্নত করার মাধ্যমে বিল্ড টাইম কমায়।
মনে রাখবেন: এই ফিচারটি Gradle 4.10.1 এবং এর পরের যেকোনও ভার্সনের সাথে মানানসই, তবে Gradle ইস্যু 8194-এর কারণে Gradle 5.1-এর সাথে মানানসই নয়।
-
Kapt ব্যবহার করা প্রোজেক্টের জন্য (বেশিরভাগই শুধুমাত্র Kotlin প্রোজেক্ট এবং Kotlin-Java হাইব্রিড প্রোজেক্ট): ইনক্রিমেন্টাল Java কম্পাইলেশন চালু করা আছে, এমনকি আপনি ডেটা বাইন্ডিং বা রেট্রো-ল্যাম্বডা প্লাগ-ইন ব্যবহার করলেও। Kapt টাস্কের মাধ্যমে অ্যানোটেশন প্রসেসিং এখনও ইনক্রিমেন্টাল নয়।
-
Kapt ব্যবহার করে না এমন প্রোজেক্টের জন্য (শুধুমাত্র Java প্রোজেক্ট): আপনি যেসব অ্যানোটেশন প্রসেসর ব্যবহার করেন সেগুলি যদি ইনক্রিমেন্টাল অ্যানোটেশন প্রসেসিং সমর্থন করে, তাহলে ডিফল্ট হিসেবে ইনক্রিমেন্টাল Java কম্পাইলেশন চালু করা থাকে। ইনক্রিমেন্টাল অ্যানোটেশন প্রসেসর অ্যাডপশন মনিটর করতে, Gradle issue 5277 দেখুন।
তবে, এক বা একাধিক অ্যানোটেশন প্রসেসর ইনক্রিমেন্টাল বিল্ডে কাজ না করলে, ইনক্রিমেন্টাল জাভা কম্পাইলেশন চালু করা হয় না। পরিবর্তে, আপনি
gradle.propertiesফাইলে নিম্নলিখিত ফ্ল্যাগ যোগ করতে পারেন:android.enableSeparateAnnotationProcessing=trueএই ফ্ল্যাগ যোগ করলে, Android Gradle প্লাগ-ইন একটি আলাদা টাস্কে অ্যানোটেশন প্রসেসর এক্সিকিউট করে এবং Java কম্পাইলেশন টাস্ককে ইনক্রিমেন্টাল রান করতে দেয়।
-
-
পুরনো API ব্যবহার করার সময় আরও ভালো ডিবাগ সংক্রান্ত তথ্য: প্লাগ-ইন যদি শনাক্ত করে যে আপনি এমন API ব্যবহার করছেন যা আর কাজ করে না, তাহলে এটি এখন আরও বিস্তারিত তথ্য প্রদান করতে পারে যাতে আপনি নির্ধারণ করতে পারেন যে সেই API কোথায় ব্যবহার করা হচ্ছে। অতিরিক্ত তথ্য দেখতে, আপনার প্রোজেক্টের
gradle.propertiesফাইলে আপনাকে এগুলি যোগ করতে হবে:android.debug.obsoleteApi=trueএছাড়াও, কমান্ড লাইন থেকে
-Pandroid.debug.obsoleteApi=trueপাস করে আপনি ফ্ল্যাগ চালু করতে পারবেন। -
আপনি কমান্ড লাইন থেকে ফিচার মডিউলে ইন্সট্রুমেন্টেশন টেস্ট চালাতে পারবেন।
আচরণগত পরিবর্তন
-
লেজি টাস্ক কনফিগারেশন: প্লাগ-ইন এখন Gradle-এর নতুন টাস্ক ক্রিয়েশন API ব্যবহার করে যাতে বর্তমান বিল্ড (বা এক্সিকিউশন টাস্ক গ্রাফে নেই এমন টাস্ক) সম্পূর্ণ করার জন্য প্রয়োজনীয় নয় এমন টাস্ক ইনিশিয়ালাইজ ও কনফিগার করা এড়ানো যায়। যেমন, আপনার যদি "রিলিজ" ও "ডিবাগ" বিল্ড ভ্যারিয়েন্টের মতো একাধিক বিল্ড ভ্যারিয়েন্ট থাকে এবং আপনি যদি নিজের অ্যাপের "ডিবাগ" ভার্সন তৈরি করেন, তাহলে প্লাগ-ইনটি আপনার অ্যাপের "রিলিজ" ভার্সনের জন্য টাস্ক শুরু ও কনফিগার করা এড়িয়ে যায়।
Variants API-তে কিছু পুরনো পদ্ধতি কল করলে, যেমন
variant.getJavaCompile(), এখনও টাস্ক কনফিগারেশন করতে হতে পারে। আপনার বিল্ড যাতে লেজি টাস্ক কনফিগারেশনের জন্য অপ্টিমাইজ করা হয় তা নিশ্চিত করতে, নতুন মেথড ইনভোক করুন যা পরিবর্তে একটি TaskProvider অবজেক্ট রিটার্ন করে, যেমনvariant.getJavaCompileProvider()।আপনি কাস্টম বিল্ড টাস্ক এক্সিকিউট করলে, কীভাবে Gradle-এর নতুন টাস্ক-ক্রিয়েশন API-এর সাথে মানিয়ে নিতে হয় তা জানুন।
-
নির্দিষ্ট বিল্ড টাইপের জন্য,
useProguard falseসেট করার সময়, প্লাগ-ইন এখন আপনার অ্যাপের কোড ও রিসোর্স ছোট ও অস্পষ্ট করার জন্য ProGuard-এর পরিবর্তে R8 ব্যবহার করে। R8 সম্পর্কে আরও জানতে, Android Developer's Blog থেকে এই ব্লগ পোস্ট পড়ুন। -
লাইব্রেরি প্রোজেক্টের জন্য আরও দ্রুত R ক্লাস জেনারেশন: আগে, Android Gradle প্লাগ-ইন আপনার প্রোজেক্টের প্রতিটি ডিপেন্ডেন্সির জন্য একটি
R.javaফাইল জেনারেট করত এবং তারপরে আপনার অ্যাপের অন্যান্য ক্লাসের সাথে সেইসব R ক্লাস কম্পাইল করত। প্লাগ-ইন এখন সরাসরি আপনার অ্যাপের কম্পাইল করা R ক্লাস ধারণকারী JAR তৈরি করে, প্রথমে মধ্যবর্তীR.javaক্লাস তৈরি করে না। এই অপ্টিমাইজেশন, অনেক লাইব্রেরি সাবপ্রোজেক্ট ও ডিপেন্ডেন্সি যুক্ত প্রোজেক্টের জন্য বিল্ড পারফর্ম্যান্স উল্লেখযোগ্যভাবে উন্নত করতে পারে এবং Android Studio-তে ইন্ডেক্সিং স্পিড উন্নত করতে পারে। -
Android অ্যাপ বান্ডেল তৈরি করার সময়, সেই অ্যাপ বান্ডেল থেকে তৈরি করা APK-তে Android 6.0 (API লেভেল 23) বা তার পরবর্তী যেকোনও ভার্সন টার্গেট করা হয়। এখন, ডিফল্ট হিসেবে আপনার নেটিভ লাইব্রেরির আনকমপ্রেসড ভার্সন অন্তর্ভুক্ত থাকে। এই অপ্টিমাইজেশন লাইব্রেরির কপি তৈরি করার জন্য ডিভাইসের প্রয়োজনীয়তা এড়িয়ে যায় এবং এর ফলে আপনার অ্যাপের অন-ডিস্ক সাইজ কমে যায়। আপনি যদি এই অপ্টিমাইজেশন বন্ধ করতে চান, তাহলে আপনার
gradle.propertiesফাইলে নিম্নলিখিত কোড যোগ করুন:android.bundle.enableUncompressedNativeLibs = false -
প্লাগ-ইন কিছু থার্ড-পার্টি প্লাগ-ইনের ন্যূনতম ভার্সন প্রয়োগ করে।
-
সিঙ্গেল-ভেরিয়েন্ট প্রোজেক্ট সিঙ্ক: আপনার বিল্ড কনফিগারেশনের সাথে আপনার প্রোজেক্ট সিঙ্ক করা Android Studio-কে আপনার প্রোজেক্টের স্ট্রাকচার সম্পর্কে বোঝানোর গুরুত্বপূর্ণ ধাপ। তবে, বড় প্রোজেক্টের ক্ষেত্রে এই প্রসেস সময়সাপেক্ষ হতে পারে। আপনার প্রোজেক্টে একাধিক বিল্ড ভেরিয়েন্ট ব্যবহার করা হলে, আপনি এখন প্রোজেক্ট সিঙ্ক অপ্টিমাইজ করতে পারবেন। এর জন্য, বর্তমানে বেছে নেওয়া ভেরিয়েন্টটিই শুধু সিঙ্ক করুন।
এই অপ্টিমাইজেশন চালু করতে, আপনাকে Android Gradle Plugin 3.3.0 বা এর পরের যেকোনও ভার্সনের সাথে Android Studio 3.3 বা এর পরের যেকোনও ভার্সন ব্যবহার করতে হবে। আপনি এইসব প্রয়োজনীয়তা পূরণ করলে, আপনার প্রজেক্ট সিঙ্ক করার সময় IDE আপনাকে এই অপ্টিমাইজেশন চালু করতে প্রম্পট করে। নতুন প্রোজেক্টে অপ্টিমাইজেশনও ডিফল্ট হিসেবে চালু করা থাকে।
এই অপ্টিমাইজেশন ম্যানুয়ালি চালু করতে, ফাইল > সেটিংস > এক্সপেরিমেন্টাল > Gradle (Mac-এ Android Studio > পছন্দ > এক্সপেরিমেন্টাল > Gradle) বিকল্পে ক্লিক করুন এবং শুধুমাত্র অ্যাক্টিভ ভ্যারিয়েন্ট সিঙ্ক করুন চেকবক্সে টিকচিহ্ন দিন।
মনে রাখবেন: এই অপ্টিমাইজেশন সেইসব প্রোজেক্টে সম্পূর্ণভাবে কাজ করে যেগুলিতে Java ও C++ ভাষা অন্তর্ভুক্ত থাকে এবং Kotlin-এর ক্ষেত্রেও এটি কিছু কাজ করে। Kotlin কন্টেন্ট সহ প্রোজেক্টের জন্য অপ্টিমাইজেশন চালু করলে, Gradle সিঙ্ক ইন্টার্নালি সম্পূর্ণ ভ্যারিয়েন্ট ব্যবহার করার জন্য ফলব্যাক করে।
-
হারিয়ে যাওয়া SDK প্যাকেজ অটোমেটিক ডাউনলোড করা: এই কার্যকারিতা NDK-কে সাপোর্ট করার জন্য আরও উন্নত করা হয়েছে। আরও জানতে, Gradle-এর মাধ্যমে অনুপস্থিত প্যাকেজ অটোমেটিক ডাউনলোড করুন।
সমস্যার সমাধান
-
Android Gradle প্লাগ-ইন 3.3.0 নিম্নলিখিত সমস্যাগুলি সমাধান করে:
- Jetifier চালু থাকা সত্ত্বেও, বিল্ড প্রসেস AndroidX ভার্সনের পরিবর্তে
android.support.v8.renderscript.RenderScriptকল করছে androidx-rs.jar-এর কারণে হওয়া সংঘর্ষ, যার মধ্যে স্ট্যাটিক্যালি বান্ডেল করাannotation.AnyRes- RenderScript ব্যবহার করার সময়, আপনাকে আর
build.gradleফাইলে Build Tools ভার্সন ম্যানুয়ালি সেট করতে হবে না
- Jetifier চালু থাকা সত্ত্বেও, বিল্ড প্রসেস AndroidX ভার্সনের পরিবর্তে