অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৩.৩.০ (জানুয়ারি ২০১৯)

অ্যান্ড্রয়েড প্লাগইনের এই সংস্করণটির জন্য নিম্নলিখিত বিষয়গুলো প্রয়োজন:

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ নোট
গ্রেডল ৪.১০.১ ৪.১০.১ আরও জানতে, গ্রেডল আপডেট করা দেখুন। গ্রেডল ৫.০ এবং তার উচ্চতর সংস্করণ ব্যবহার করার সময়, ডিফল্ট গ্রেডল ডেমন মেমরি হিপ সাইজ ১ জিবি থেকে কমে ৫১২ এমবি হয়ে যায়। এর ফলে বিল্ড পারফরম্যান্সে অবনতি ঘটতে পারে। এই ডিফল্ট সেটিংটি পরিবর্তন করতে, আপনার প্রোজেক্টের gradle.properties ফাইলে গ্রেডল ডেমন হিপ সাইজ নির্দিষ্ট করে দিন।
এসডিকে বিল্ড টুলস ২৮.০.৩ ২৮.০.৩ এসডিকে বিল্ড টুলস ইনস্টল বা কনফিগার করুন

৩.৩.৩ (জুলাই ২০২০)

এই ছোট আপডেটটি অ্যান্ড্রয়েড ১১-এর প্যাকেজ দৃশ্যমানতার নতুন ডিফল্ট সেটিংস এবং ফিচারগুলোর সাথে সামঞ্জস্যতা সমর্থন করে।

বিস্তারিত জানতে 4.0.1 রিলিজ নোট দেখুন।

৩.৩.২ (মার্চ ২০১৯)

এই ছোট আপডেটটি অ্যান্ড্রয়েড স্টুডিও ৩.৩.২ সমর্থন করে এবং এতে বিভিন্ন বাগ সংশোধন ও কর্মক্ষমতার উন্নতি অন্তর্ভুক্ত রয়েছে। উল্লেখযোগ্য বাগ সংশোধনের তালিকা দেখতে, রিলিজ আপডেটস ব্লগের সংশ্লিষ্ট পোস্টটি পড়ুন।

৩.৩.১ (ফেব্রুয়ারি ২০১৯)

এই ছোট আপডেটটি অ্যান্ড্রয়েড স্টুডিও ৩.৩.১ সমর্থন করে এবং এতে বিভিন্ন বাগ সংশোধন ও কর্মক্ষমতার উন্নতি অন্তর্ভুক্ত রয়েছে।

নতুন বৈশিষ্ট্য

  • উন্নত ক্লাসপাথ সিঙ্ক্রোনাইজেশন: আপনার রানটাইম এবং কম্পাইল-টাইম ক্লাসপাথে ডিপেন্ডেন্সি সমাধান করার সময়, অ্যান্ড্রয়েড গ্রেডল প্লাগইনটি একাধিক ক্লাসপাথে উপস্থিত ডিপেন্ডেন্সিগুলির জন্য নির্দিষ্ট ডাউনস্ট্রিম ভার্সন দ্বন্দ্ব সমাধান করার চেষ্টা করে।

    উদাহরণস্বরূপ, যদি রানটাইম ক্লাসপাথে লাইব্রেরি A-এর ২.০ সংস্করণ এবং কম্পাইল ক্লাসপাথে লাইব্রেরি A-এর ১.০ সংস্করণ থাকে, তাহলে ত্রুটি এড়ানোর জন্য প্লাগইনটি স্বয়ংক্রিয়ভাবে কম্পাইল ক্লাসপাথের নির্ভরতা লাইব্রেরি A-এর ২.০ সংস্করণে আপডেট করে দেয়।

    তবে, যদি রানটাইম ক্লাসপাথে লাইব্রেরি A-এর সংস্করণ 1.0 অন্তর্ভুক্ত থাকে এবং কম্পাইলে লাইব্রেরি A-এর সংস্করণ 2.0 অন্তর্ভুক্ত থাকে, তাহলে প্লাগইনটি কম্পাইল ক্লাসপাথের নির্ভরতাকে লাইব্রেরি A-এর সংস্করণ 1.0-এ ডাউনগ্রেড করে না এবং আপনি একটি ত্রুটি পাবেন। আরও জানতে, "ক্লাসপাথগুলির মধ্যে দ্বন্দ্ব সমাধান করুন" দেখুন।

  • অ্যানোটেশন প্রসেসর ব্যবহার করার সময় উন্নত ইনক্রিমেন্টাল জাভা কম্পাইলেশন: এই আপডেটটি অ্যানোটেশন প্রসেসর ব্যবহার করার সময় ইনক্রিমেন্টাল জাভা কম্পাইলেশনের জন্য সমর্থন উন্নত করার মাধ্যমে বিল্ড টাইম কমিয়ে দেয়।

    দ্রষ্টব্য: Gradle ইস্যু 8194-এর কারণে Gradle 5.1 ব্যতীত, এই ফিচারটি Gradle 4.10.1 এবং তার পরবর্তী সংস্করণগুলোর সাথে সামঞ্জস্যপূর্ণ।

    • Kapt ব্যবহারকারী প্রোজেক্টগুলির জন্য (বেশিরভাগ শুধুমাত্র Kotlin-ভিত্তিক প্রোজেক্ট এবং Kotlin-Java হাইব্রিড প্রোজেক্ট): ইনক্রিমেন্টাল জাভা কম্পাইলেশন সক্রিয় থাকে, এমনকি যখন আপনি ডেটা বাইন্ডিং বা রেট্রো-ল্যাম্বডা প্লাগইন ব্যবহার করেন তখনও। Kapt টাস্ক দ্বারা অ্যানোটেশন প্রসেসিং এখনও ইনক্রিমেন্টাল নয়।

    • যেসব প্রোজেক্টে Kapt ব্যবহার করা হয় না (শুধুমাত্র জাভা প্রোজেক্ট): আপনার ব্যবহৃত সমস্ত অ্যানোটেশন প্রসেসর যদি ইনক্রিমেন্টাল অ্যানোটেশন প্রসেসিং সমর্থন করে, তাহলে ডিফল্টরূপে ইনক্রিমেন্টাল জাভা কম্পাইলেশন সক্রিয় থাকে। ইনক্রিমেন্টাল অ্যানোটেশন প্রসেসরের ব্যবহার পর্যবেক্ষণ করতে, Gradle ইস্যু 5277 দেখুন।

      তবে, যদি এক বা একাধিক অ্যানোটেশন প্রসেসর ইনক্রিমেন্টাল বিল্ড সমর্থন না করে, তাহলে ইনক্রিমেন্টাল জাভা কম্পাইলেশন সক্রিয় হয় না। এর পরিবর্তে, আপনি আপনার gradle.properties ফাইলে নিম্নলিখিত ফ্ল্যাগটি অন্তর্ভুক্ত করতে পারেন:

      android.enableSeparateAnnotationProcessing=true
                  

      আপনি যখন এই ফ্ল্যাগটি অন্তর্ভুক্ত করেন, তখন অ্যান্ড্রয়েড গ্রেডল প্লাগইন অ্যানোটেশন প্রসেসরগুলিকে একটি পৃথক টাস্কে সম্পাদন করে এবং জাভা কম্পাইলেশন টাস্ককে পর্যায়ক্রমে চলার অনুমতি দেয়।

  • অপ্রচলিত API ব্যবহার করার সময় আরও ভালো ডিবাগ তথ্য: যখন প্লাগইনটি শনাক্ত করে যে আপনি এমন একটি API ব্যবহার করছেন যা আর সমর্থিত নয়, তখন এটি এখন আরও বিস্তারিত তথ্য প্রদান করতে পারে, যা আপনাকে সেই API-টি কোথায় ব্যবহৃত হচ্ছে তা নির্ধারণ করতে সাহায্য করবে। অতিরিক্ত তথ্য দেখতে, আপনাকে আপনার প্রোজেক্টের gradle.properties ফাইলে নিম্নলিখিতটি অন্তর্ভুক্ত করতে হবে:

              android.debug.obsoleteApi=true
            

    আপনি কমান্ড লাইন থেকে -Pandroid.debug.obsoleteApi=true পাস করেও ফ্ল্যাগটি সক্রিয় করতে পারেন।

  • আপনি কমান্ড লাইন থেকে ফিচার মডিউলগুলোতে ইন্সট্রুমেন্টেশন টেস্ট চালাতে পারেন।

আচরণের পরিবর্তন

  • লেজি টাস্ক কনফিগারেশন: প্লাগইনটি এখন গ্রেডলের নতুন টাস্ক ক্রিয়েশন এপিআই ব্যবহার করে এমন সব টাস্ক ইনিশিয়ালাইজ ও কনফিগার করা এড়িয়ে চলে, যেগুলো বর্তমান বিল্ড সম্পন্ন করার জন্য প্রয়োজনীয় নয় (অথবা যেগুলো এক্সিকিউশন টাস্ক গ্রাফে নেই)। উদাহরণস্বরূপ, যদি আপনার একাধিক বিল্ড ভ্যারিয়েন্ট থাকে, যেমন “রিলিজ” এবং “ডিবাগ” বিল্ড ভ্যারিয়েন্ট, এবং আপনি আপনার অ্যাপের “ডিবাগ” সংস্করণটি বিল্ড করছেন, তাহলে প্লাগইনটি আপনার অ্যাপের “রিলিজ” সংস্করণের জন্য টাস্ক ইনিশিয়ালাইজ ও কনফিগার করা এড়িয়ে চলে।

    Variants API-এর কিছু পুরোনো মেথড, যেমন variant.getJavaCompile() , কল করলে তা এখনও টাস্ক কনফিগারেশন বাধ্যতামূলক করতে পারে। আপনার বিল্ডটি লেজি টাস্ক কনফিগারেশনের জন্য অপ্টিমাইজ করা হয়েছে কিনা তা নিশ্চিত করতে, এমন নতুন মেথড কল করুন যা এর পরিবর্তে একটি TaskProvider অবজেক্ট রিটার্ন করে, যেমন variant.getJavaCompileProvider()

    আপনি যদি কাস্টম বিল্ড টাস্ক সম্পাদন করেন, তাহলে গ্রেডলের নতুন টাস্ক-ক্রিয়েশন এপিআই-এর সাথে কীভাবে মানিয়ে নিতে হয় তা জেনে নিন।

  • একটি নির্দিষ্ট বিল্ড টাইপের জন্য, useProguard false সেট করলে, প্লাগইনটি এখন আপনার অ্যাপের কোড এবং রিসোর্স সংকুচিত ও অস্পষ্ট করতে ProGuard-এর পরিবর্তে R8 ব্যবহার করে। R8 সম্পর্কে আরও জানতে, অ্যান্ড্রয়েড ডেভেলপারস ব্লগের এই ব্লগ পোস্টটি পড়ুন।

  • লাইব্রেরি প্রোজেক্টের জন্য দ্রুততর R ক্লাস তৈরি: পূর্বে, অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপনার প্রোজেক্টের প্রতিটি ডিপেন্ডেন্সির জন্য একটি করে R.java ফাইল তৈরি করত এবং তারপর আপনার অ্যাপের অন্যান্য ক্লাসের পাশাপাশি সেই R ক্লাসগুলোকেও কম্পাইল করত। প্লাগইনটি এখন মধ্যবর্তী R.java ক্লাসগুলো প্রথমে বিল্ড না করেই, সরাসরি আপনার অ্যাপের কম্পাইল করা R ক্লাস সম্বলিত একটি JAR ফাইল তৈরি করে। এই অপটিমাইজেশনটি এমন প্রোজেক্টগুলোর বিল্ড পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত করতে পারে যেগুলোতে অনেক লাইব্রেরি সাবপ্রোজেক্ট এবং ডিপেন্ডেন্সি রয়েছে, এবং অ্যান্ড্রয়েড স্টুডিওতে ইনডেক্সিংয়ের গতিও বাড়াতে পারে।

  • একটি অ্যান্ড্রয়েড অ্যাপ বান্ডেল তৈরি করার সময়, সেই অ্যাপ বান্ডেল থেকে তৈরি হওয়া APK ফাইলগুলো, যা অ্যান্ড্রয়েড ৬.০ (API লেভেল ২৩) বা তার উচ্চতর সংস্করণকে টার্গেট করে, সেগুলোতে এখন ডিফল্টরূপে আপনার নেটিভ লাইব্রেরিগুলোর আনকম্প্রেসড সংস্করণ অন্তর্ভুক্ত থাকে। এই অপটিমাইজেশনের ফলে ডিভাইসকে লাইব্রেরির একটি কপি তৈরি করতে হয় না এবং এর ফলে আপনার অ্যাপের ডিস্কের আকার কমে যায়। আপনি যদি এই অপটিমাইজেশনটি নিষ্ক্রিয় করতে চান, তাহলে আপনার gradle.properties ফাইলে নিম্নলিখিতটি যোগ করুন:

    android.bundle.enableUncompressedNativeLibs = false
            
  • এই প্লাগইনটি কিছু থার্ড-পার্টি প্লাগইনের সর্বনিম্ন সংস্করণ প্রয়োগ করে।

  • একক-ভেরিয়েন্ট প্রজেক্ট সিঙ্ক : আপনার প্রজেক্টের গঠন অ্যান্ড্রয়েড স্টুডিওকে বোঝানোর জন্য, বিল্ড কনফিগারেশনের সাথে প্রজেক্ট সিঙ্ক করা একটি গুরুত্বপূর্ণ পদক্ষেপ। তবে, বড় প্রজেক্টের ক্ষেত্রে এই প্রক্রিয়াটি সময়সাপেক্ষ হতে পারে। যদি আপনার প্রজেক্টে একাধিক বিল্ড ভেরিয়েন্ট ব্যবহৃত হয়, তবে এখন আপনি শুধুমাত্র আপনার নির্বাচিত ভেরিয়েন্টটিতে সিঙ্ক সীমাবদ্ধ রেখে প্রজেক্ট সিঙ্ক অপ্টিমাইজ করতে পারেন।

    এই অপটিমাইজেশনটি চালু করতে আপনাকে অ্যান্ড্রয়েড স্টুডিও ৩.৩ বা তার উচ্চতর সংস্করণ এবং অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৩.৩.০ বা তার উচ্চতর সংস্করণ ব্যবহার করতে হবে। যখন আপনি এই শর্তগুলো পূরণ করবেন, তখন আপনার প্রজেক্ট সিঙ্ক করার সময় IDE আপনাকে এই অপটিমাইজেশনটি চালু করার জন্য অনুরোধ করবে। নতুন প্রজেক্টগুলোতেও এই অপটিমাইজেশনটি ডিফল্টভাবে চালু থাকে।

    এই অপ্টিমাইজেশনটি ম্যানুয়ালি চালু করতে, ফাইল > সেটিংস > এক্সপেরিমেন্টাল > গ্র্যাডল (ম্যাকে অ্যান্ড্রয়েড স্টুডিও > প্রেফারেন্সেস > এক্সপেরিমেন্টাল > গ্র্যাডল ) -এ ক্লিক করুন এবং ‘ অনলি সিঙ্ক দ্য অ্যাক্টিভ ভ্যারিয়েন্ট’ চেকবক্সটি নির্বাচন করুন।

    দ্রষ্টব্য : এই অপ্টিমাইজেশনটি জাভা এবং সি++ ভাষা অন্তর্ভুক্ত প্রোজেক্টগুলিকে সম্পূর্ণরূপে সমর্থন করে এবং কোটলিনের জন্য এর আংশিক সমর্থন রয়েছে। কোটলিন কন্টেন্টযুক্ত প্রোজেক্টগুলির জন্য অপ্টিমাইজেশনটি সক্রিয় করা হলে, গ্রেডল সিঙ্ক অভ্যন্তরীণভাবে সম্পূর্ণ সংস্করণগুলি ব্যবহার করতে ফিরে যায়।

  • অনুপস্থিত SDK প্যাকেজগুলির স্বয়ংক্রিয় ডাউনলোড : এই কার্যকারিতাটি এখন NDK সমর্থন করার জন্য সম্প্রসারিত করা হয়েছে। আরও জানতে, "Gradle-এর সাহায্যে অনুপস্থিত প্যাকেজগুলি স্বয়ংক্রিয়ভাবে ডাউনলোড করুন" পড়ুন।

বাগ সংশোধন

  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৩.৩.০ নিম্নলিখিত সমস্যাগুলো সমাধান করে:

    • Jetifier সক্রিয় থাকা সত্ত্বেও, বিল্ড প্রক্রিয়াটি AndroidX সংস্করণের পরিবর্তে android.support.v8.renderscript.RenderScript কল করছে।
    • androidx-rs.jar এ স্ট্যাটিক্যালি বান্ডল করা annotation.AnyRes অন্তর্ভুক্ত থাকার কারণে সংঘর্ষ।
    • RenderScript ব্যবহার করলে, আপনাকে আর আপনার build.gradle ফাইলগুলিতে বিল্ড টুলস ভার্সন ম্যানুয়ালি সেট করতে হবে না।