Android Gradle প্লাগ-ইন 3.4.0 (এপ্রিল ২০১৯)

Android প্লাগ-ইনের এই ভার্সনের জন্য নিম্নলিখিতগুলি প্রয়োজন:

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

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

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

আরও তথ্যের জন্য 4.0.1 রিলিজ নোট দেখুন।

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

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

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

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

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

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

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

    নিম্নলিখিত কোড স্যাম্পেল লোকাল Android লাইব্রেরি প্রোজেক্টে দুটি ডিপেন্ডেন্সি কনফিগারেশনই ব্যবহার করে।

    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"))
        }
            
    • সাধারণত, প্যাকেজিং এবং সাইনিং টাস্কের ক্ষেত্রে সামগ্রিক বিল্ড স্পিড উন্নত হওয়া উচিত। এইসব টাস্কের ক্ষেত্রে পারফর্ম্যান্সের অবনতি লক্ষ্য করলে, সমস্যা সম্পর্কে অভিযোগ জানান।

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

  • Android Instant Apps ফিচার প্লাগ-ইন বন্ধ হয়ে যাওয়া সংক্রান্ত সতর্কতা: আপনি এখনও ইনস্ট্যান্ট অ্যাপ তৈরি করার জন্য com.android.feature প্লাগ-ইন ব্যবহার করলে, Android Gradle প্লাগ-ইন 3.4.0 আপনাকে বন্ধ হয়ে যাওয়া সংক্রান্ত সতর্কতা দেখাবে। প্লাগ-ইনের ভবিষ্যতের ভার্সনেও যাতে আপনি ইনস্ট্যান্ট অ্যাপ তৈরি করতে পারেন, তার জন্য ডায়নামিক ফিচার প্লাগ-ইন ব্যবহার করে আপনার ইনস্ট্যান্ট অ্যাপ মাইগ্রেট করুন, যা আপনাকে একটি Android অ্যাপ বান্ডেল থেকে ইনস্টল করা এবং ইনস্ট্যান্ট অ্যাপ উভয় অভিজ্ঞতা প্রকাশ করার অনুমতি দেয়।

  • ডিফল্ট হিসেবে R8 চালু করা আছে: R8 ডিসুগারিং, শ্রিঙ্কিং, অবফাসকেটিং, অপ্টিমাইজিং ও ডেক্সিং, এই সবকটি ধাপকে একটি ধাপে ইন্টিগ্রেট করে। এর ফলে বিল্ড পারফর্ম্যান্সে উল্লেখযোগ্য উন্নতি হয়। R8-কে Android Gradle প্লাগ-ইন 3.3.0-এ নিয়ে আসা হয়েছে এবং এখন প্লাগ-ইন 3.4.0 ও তার পরবর্তী ভার্সন ব্যবহার করে অ্যাপ ও Android লাইব্রেরি প্রোজেক্ট উভয়ের জন্য ডিফল্ট হিসেবে চালু করা হয়েছে।

R8 চালু করার আগে কম্পাইল প্রসেস কেমন ছিল তা নিচে দেওয়া ছবি থেকে এক নজরে দেখে নিন।

R8-এর আগে, ProGuard ছিল ডেক্সিং এবং ডিসুগারিং থেকে আলাদা কম্পাইল স্টেপ।

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

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

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

R8 ব্যবহার করার সময় কোনও সমস্যা হলে, R8 কম্প্যাটিবিলিটি সংক্রান্ত প্রায়শই জিজ্ঞাসিত প্রশ্ন পড়ে দেখুন যে আপনার সমস্যার কোনও সমাধান আছে কিনা। কোনও সমাধান ডকুমেন্ট করা না থাকলে, সমস্যা সম্পর্কে অভিযোগ জানান। আপনার প্রোজেক্টের 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-এ সেট করেন, তাহলে Android Gradle প্লাগ-ইন R8 ব্যবহার করে সেই বিল্ড টাইপের জন্য আপনার অ্যাপের কোড সঙ্কুচিত করে, প্রজেক্টের gradle.properties ফাইলে R8 বন্ধ করা আছে কিনা তা নির্বিশেষে।

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

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

  • অনন্য প্যাকেজের নামের সঠিক ব্যবহার বর্তমানে এনফোর্স করা হয় না তবে প্লাগ-ইনের পরবর্তী ভার্সনে আরও কঠোরভাবে এনফোর্স করা হবে। Android Gradle প্লাগ-ইন ভার্সন ৩.৪.০-এ, আপনার প্রোজেক্ট গ্রহণযোগ্য প্যাকেজের নাম ঘোষণা করে কিনা তা চেক করার জন্য আপনি অপ্ট-ইন করতে পারেন। এর জন্য আপনার gradle.properties ফাইলে নিচের লাইনটি যোগ করুন।

              android.uniquePackageNames = true
              
            

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