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

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

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ মন্তব্য
গ্রেডল ৪.১০.১ ৪.১০.১ আরও জানতে, Gradle আপডেট করা দেখুন। Gradle 5.0 এবং উচ্চতর সংস্করণ ব্যবহার করার সময়, ডিফল্ট Gradle ডেমন মেমরি হিপ সাইজ 1 GB থেকে 512 MB এ কমে যায়। এর ফলে বিল্ড পারফরম্যান্স রিগ্রেশন হতে পারে। এই ডিফল্ট সেটিংটি ওভাররাইড করতে, আপনার প্রোজেক্টের gradle.properties ফাইলে Gradle ডেমন হিপ সাইজ নির্দিষ্ট করুন।
SDK বিল্ড টুলস ২৮.০.৩ ২৮.০.৩ SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন

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

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

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

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

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

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

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

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

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

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

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

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

    দ্রষ্টব্য: এই বৈশিষ্ট্যটি Gradle 4.10.1 এবং উচ্চতর সংস্করণের সাথে সামঞ্জস্যপূর্ণ, Gradle সমস্যা 8194 এর কারণে Gradle 5.1 ছাড়া।

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

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

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

      android.enableSeparateAnnotationProcessing=true
                  

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

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

              android.debug.obsoleteApi=true
            

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

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

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

  • অলস টাস্ক কনফিগারেশন: প্লাগইনটি এখন গ্র্যাডেলের নতুন টাস্ক ক্রিয়েশন 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.java ক্লাস তৈরি না করেই সরাসরি আপনার অ্যাপের কম্পাইল করা R ক্লাস ধারণকারী একটি JAR তৈরি করে। এই অপ্টিমাইজেশন অনেক লাইব্রেরি সাবপ্রজেক্ট এবং নির্ভরতা অন্তর্ভুক্ত প্রকল্পগুলির জন্য বিল্ড পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত করতে পারে এবং Android স্টুডিওতে ইনডেক্সিং গতি উন্নত করতে পারে।

  • একটি Android App Bundle তৈরি করার সময়, সেই অ্যাপ বান্ডেল থেকে তৈরি APK গুলি যা Android 6.0 (API লেভেল 23) বা তার বেশি ভার্সনকে লক্ষ্য করে, এখন ডিফল্টরূপে আপনার নেটিভ লাইব্রেরির আনকম্প্রেসড ভার্সনগুলি অন্তর্ভুক্ত করে। এই অপ্টিমাইজেশন ডিভাইসটিকে লাইব্রেরির একটি কপি তৈরি করার প্রয়োজন এড়ায় এবং এর ফলে আপনার অ্যাপের অন-ডিস্ক আকার হ্রাস করে। আপনি যদি এই অপ্টিমাইজেশনটি অক্ষম করতে চান, তাহলে আপনার gradle.properties ফাইলে নিম্নলিখিতটি যোগ করুন:

    android.bundle.enableUncompressedNativeLibs = false
            
  • প্লাগইনটি কিছু তৃতীয় পক্ষের প্লাগইনের ন্যূনতম সংস্করণগুলিকে জোরদার করে।

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

    এই অপ্টিমাইজেশন সক্ষম করার জন্য আপনাকে Android Studio 3.3 বা উচ্চতর সংস্করণ ব্যবহার করতে হবে, Android Gradle Plugin 3.3.0 বা উচ্চতর সংস্করণ সহ। যখন আপনি এই প্রয়োজনীয়তাগুলি পূরণ করেন, তখন IDE আপনাকে আপনার প্রকল্প সিঙ্ক করার সময় এই অপ্টিমাইজেশন সক্ষম করতে অনুরোধ করবে। নতুন প্রকল্পগুলিতেও অপ্টিমাইজেশনটি ডিফল্টরূপে সক্ষম থাকে।

    এই অপ্টিমাইজেশনটি ম্যানুয়ালি সক্ষম করতে, File > Settings > Experimental > Gradle ( Android Studio > Preferences > Experimental > Gradle on a Mac) এ ক্লিক করুন এবং Only sync the active variant চেকবক্সটি নির্বাচন করুন।

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

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

বাগ ফিক্স

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

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