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

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

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

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

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

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

৩.৪.২ (জুলাই ২০১৯)

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

৩.৪.১ (মে ২০১৯)

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

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

  • নতুন লিন্ট চেক ডিপেন্ডেন্সি কনফিগারেশন: lintChecks এর আচরণে পরিবর্তন এসেছে এবং lintPublish একটি নতুন ডিপেন্ডেন্সি কনফিগারেশন চালু করা হয়েছে, যা আপনার অ্যান্ড্রয়েড লাইব্রেরিতে কোন লিন্ট চেকগুলো প্যাকেজ করা হবে তার উপর আপনাকে আরও বেশি নিয়ন্ত্রণ দেবে।

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

    নিম্নলিখিত কোড নমুনাটি একটি স্থানীয় অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পে উভয় ডিপেন্ডেন্সি কনফিগারেশন ব্যবহার করে।

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • সাধারণভাবে, প্যাকেজিং এবং সাইনিং টাস্কগুলোর কারণে বিল্ডের গতি সামগ্রিকভাবে উন্নত হবে। যদি আপনি এই টাস্কগুলোর সাথে সম্পর্কিত পারফরম্যান্সের অবনতি লক্ষ্য করেন, তবে অনুগ্রহ করে একটি বাগ রিপোর্ট করুন

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

  • অ্যান্ড্রয়েড ইনস্ট্যান্ট অ্যাপস ফিচার প্লাগইন অবচয় সতর্কতা: আপনি যদি এখনও আপনার ইনস্ট্যান্ট অ্যাপ বিল্ড করার জন্য com.android.feature প্লাগইন ব্যবহার করে থাকেন, তাহলে অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৩.৪.০ আপনাকে একটি অবচয় সতর্কতা দেখাবে। প্লাগইনের ভবিষ্যৎ সংস্করণগুলিতেও যাতে আপনি আপনার ইনস্ট্যান্ট অ্যাপ বিল্ড করতে পারেন, তা নিশ্চিত করতে আপনার ইনস্ট্যান্ট অ্যাপটিকে ডাইনামিক ফিচার প্লাগইন ব্যবহারে মাইগ্রেট করুন, যা আপনাকে একটিমাত্র অ্যান্ড্রয়েড অ্যাপ বান্ডেল থেকে আপনার ইনস্টলড এবং ইনস্ট্যান্ট অ্যাপ উভয় অভিজ্ঞতাই প্রকাশ করার সুযোগ দেয়।

  • R8 ডিফল্টরূপে সক্রিয়: R8 এক ধাপেই ডিসুগারিং, শ্রিংকিং, অবফাসকেটিং, অপটিমাইজিং এবং ডেক্সিং-কে একীভূত করে—যার ফলে বিল্ড পারফরম্যান্সে লক্ষণীয় উন্নতি ঘটে । R8 অ্যান্ড্রয়েড গ্রেডল প্লাগইন 3.3.0-এ চালু করা হয়েছিল এবং এখন প্লাগইন 3.4.0 ও তার উচ্চতর সংস্করণ ব্যবহারকারী অ্যাপ এবং অ্যান্ড্রয়েড লাইব্রেরি উভয় প্রকল্পের জন্যই এটি ডিফল্টরূপে সক্রিয় থাকে।

নিচের চিত্রটি R8 প্রবর্তনের আগে কম্পাইল প্রক্রিয়ার একটি সামগ্রিক চিত্র তুলে ধরে।

R8-এর আগে, ProGuard ছিল dexing এবং desugaring থেকে একটি ভিন্ন কম্পাইল ধাপ।

এখন, R8-এর সাহায্যে, ডিসুগারিং, শ্রিংকিং, অবফাসকেটিং, অপটিমাইজিং এবং ডেক্সিং (D8) সবই এক ধাপে সম্পন্ন হয়, যেমনটি নিচে দেখানো হয়েছে।

R8-এ, ডিসুগারিং, শ্রিংকিং, অবফাসকেটিং, অপটিমাইজিং এবং ডেক্সিং সবই একটিমাত্র কম্পাইল ধাপে সম্পন্ন করা হয়।

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

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

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

দ্রষ্টব্য: কোনো নির্দিষ্ট বিল্ড টাইপের জন্য, যদি আপনি আপনার অ্যাপ মডিউলের build.gradle ফাইলে useProguard false সেট করেন, তাহলে অ্যান্ড্রয়েড গ্রেডল প্লাগইনটি সেই বিল্ড টাইপের জন্য আপনার অ্যাপের কোড সংকুচিত করতে R8 ব্যবহার করে, আপনি আপনার প্রোজেক্টের gradle.properties ফাইলে R8 নিষ্ক্রিয় করলেও।

  • ndkCompile এখন আর ব্যবহৃত হয় না: আপনি যদি আপনার নেটিভ লাইব্রেরিগুলো কম্পাইল করার জন্য ndkBuild ব্যবহার করার চেষ্টা করেন, তাহলে এখন একটি বিল্ড এরর পাবেন। এর পরিবর্তে , আপনার প্রোজেক্টে C এবং C++ কোড যোগ করার জন্য CMake অথবা ndk-build ব্যবহার করা উচিত।

পরিচিত সমস্যা

  • অনন্য প্যাকেজ নামের সঠিক ব্যবহার বর্তমানে বাধ্যতামূলক করা হয় না, তবে প্লাগইনের পরবর্তী সংস্করণগুলিতে এটি আরও কঠোর হবে। অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণ 3.4.0-এ, আপনার প্রজেক্ট গ্রহণযোগ্য প্যাকেজ নাম ঘোষণা করেছে কিনা তা পরীক্ষা করার জন্য, আপনি আপনার gradle.properties ফাইলে নিচের লাইনটি যোগ করে বিকল্পটি বেছে নিতে পারেন।

              android.uniquePackageNames = true
              
            

    অ্যান্ড্রয়েড গ্রেডল প্লাগইনের মাধ্যমে প্যাকেজ নাম সেট করার বিষয়ে আরও জানতে, অ্যাপ্লিকেশন আইডি সেট করুন দেখুন।