Android Gradle Plugin 7.1.0 (জানুয়ারি ২০২২)

Android Gradle প্লাগ-ইন 7.1.0 হল একটি মেজর রিলিজ যাতে বিভিন্ন ধরনের নতুন ফিচার ও উন্নতি অন্তর্ভুক্ত।

7.1.3 (এপ্রিল ২০২২)

এই মাইনর আপডেটে নিম্নলিখিত সমস্যার সমাধান করা হয়েছে:

  • R8-এর তরফ থেকে ডুপ্লিকেট ক্লাস সংক্রান্ত সমস্যার অভিযোগ জানানো হয়েছে

এই রিলিজের মধ্যে অন্তর্ভুক্ত বাগ ফিক্সের সম্পূর্ণ তালিকা দেখতে, Android Studio Bumblebee প্যাচ ৩ ব্লগ পোস্ট দেখুন।

7.1.2 (ফেব্রুয়ারি ২০২২)

এই মাইনর আপডেটে নিম্নলিখিত সমস্যার সমাধান করা হয়েছে:

  • Android Gradle Plugin 7.1.0-rc01 ইউনিট টেস্টের সময় ASM bytecode ট্রান্সফর্মেশন করতে পারে না
  • "Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'." মেসেজ সহ Gradle সিঙ্ক করা যায়নি।
  • Android Gradle Plugin 7.0.0-এ Groovy DSL থেকে কিছু নতুন DSL ব্লক ব্যবহার করা যায় না
  • AGP 7.1 নতুন প্রকাশনা API: তৈরি করা javadoc jar সই করা হয় না
  • ClassesDataSourceCache-এ লেটেস্ট Asm ভার্সন ব্যবহার করা উচিত
  • Android Studio BumbleBee সবসময় লেটেস্ট পরিবর্তনগুলি ডেপ্লয় করে না

এই রিলিজের মধ্যে অন্তর্ভুক্ত বাগ ফিক্সের সম্পূর্ণ তালিকা দেখতে, Android Studio Bumblebee প্যাচ ২ ব্লগ পোস্ট দেখুন।

7.1.1 (ফেব্রুয়ারি ২০২২)

এই মাইনর আপডেটটি Android Studio Bumblebee প্যাচ ১-এর রিলিজের সাথে সম্পর্কিত।

এই রিলিজে অন্তর্ভুক্ত সমস্যা সমাধানের তালিকা দেখতে, Android Studio Bumblebee প্যাচ ১ ব্লগ পোস্ট দেখুন।

মানানসই

ন্যূনতম ভার্সন ডিফল্ট ভার্সন নোট
Gradle ৭.২ ৭.২ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK Build Tools ৩০.০.৩ ৩০.০.৩ SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন।
NDK N/A 21.4.7075529 NDK-এর অন্য কোনও ভার্সন ইনস্টল বা কনফিগার করুন।
JDK 11 11 আরও জানতে, JDK ভার্সন সেট করা দেখুন।

Lint বিশ্লেষণ টাস্ক এখন ক্যাশে করা যাবে

AndroidLintAnalysisTask এখন Gradle বিল্ড ক্যাশে-এর সাথে মানানসই। আপনার gradle.properties ফাইলে org.gradle.caching=true সেট করে বিল্ড ক্যাশে চালু করলে, সম্ভব হলে, লিন্ট বিশ্লেষণ টাস্ক বিল্ড ক্যাশে থেকে এর আউটপুট পাবে।

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

C/C++ মডিউল এখন একই প্রোজেক্টে অন্যান্য C/C++ মডিউলকে রেফার করতে পারে

C/C++ কোড সহ Gradle Android মডিউল এখন হেডার ফাইল এবং অন্য Gradle মডিউলে লাইব্রেরি কোড রেফারেন্স করার জন্য সেট-আপ করা যেতে পারে। Gradle মডিউলের মধ্যে হেডার ও লাইব্রেরি কমিউনিকেট করতে Prefab প্রোটোকল ব্যবহার করা হয়।

প্রয়োজনীয়তা

  • ব্যবহারকারী মডিউলকে CMake হতে হবে এবং ndk-build হলে চলবে না। ndk-build-এর জন্য ভবিষ্যতে NDK আপডেট প্রয়োজন হবে। প্রকাশনা মডিউল CMake বা ndk-build হতে পারে।

  • ব্যবহারকারী মডিউলকে অবশ্যই build.gradle ফাইলে prefab চালু করতে হবে।

android {
  buildFeatures {
    prefab true
  }
}
  • প্রকাশনা মডিউলে build.gradle ফাইলে prefabPublishing চালু থাকতে হবে।
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • কনজিউমিং মডিউলকে পাবলিশিং মডিউলের রেফারেন্স দিতে হবে build.gradle ফাইল dependencies ব্লকে একটি লাইন যোগ করে। যেমন:
dependencies {
  implementation project(':mylibrary')
}
  • প্রকাশনা মডিউলে অবশ্যই একটি prefab বিভাগ ব্যবহার করে একটি প্যাকেজ এক্সপোজ করতে হবে। যেমন:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • কনজিউমিং মডিউলের CMakeLists.txt ফাইল, প্রোডিউসিং মডিউল দ্বারা প্রকাশিত প্যাকেজ লোকেট করতে find_package() ব্যবহার করতে পারে। যেমন:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

AGP-এর সাথে C/C++ AAR কনজিউমার ও প্রোডিউসার কীভাবে কনফিগার করতে হয় সেই সম্পর্কে আরও জানতে, AGP-এর সাথে নেটিভ ডিপেন্ডেন্সি দেখুন।

settings.gradle ফাইলে রেপোজিটরি সেটিংস

Android Studio Bumblebee-তে নতুন প্রোজেক্ট তৈরি করা হলে, সবচেয়ে উপরের লেভেলের build.gradle ফাইলে plugins ব্লক থাকে, তারপরে আপনার বিল্ড ডিরেক্টরি পরিষ্কার করার কোড থাকে:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

যেসব রেপোজিটরি সেটিংস আগে টপ-লেভেল build.gradle ফাইলে ছিল, সেগুলি এখন settings.gradle ফাইলে আছে:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

মডিউল-লেভেল build.gradle ফাইলে কোনও পরিবর্তন হয়নি। তাই, আপনার প্রোজেক্টের সব মডিউলে প্রযোজ্য বিল্ড কনফিগারেশন অথবা Gradle-এ প্রযোজ্য রিপোজিটরি ও নির্ভরতা নির্ধারণ করতে, টপ-লেভেল build.gradle ফাইল ও settings.gradle ফাইল ব্যবহার করুন; আপনার প্রোজেক্টের মধ্যে কোনও নির্দিষ্ট মডিউলে প্রযোজ্য বিল্ড কনফিগারেশন নির্ধারণ করতে, মডিউল-লেভেল build.gradle ফাইল ব্যবহার করুন।

উন্নত রিসোর্স শ্রিন্কার

Android Studio Bumblebee-তে উন্নত রিসোর্স শ্রিন্কার আছে যা আপনার অ্যাপের সাইজ কমাতে সাহায্য করে।

ডায়নামিক ফিচার সহ অ্যাপের জন্য সহায়তা

Android রিসোর্স শ্রিন্কারের ডিফল্ট প্রয়োগ Android Gradle Plugin 7.1.0-alpha09-এ আপডেট করা হয়েছে। নতুন ইমপ্লিমেন্টেশন ডায়নামিক ফিচার সহ অ্যাপের সাইজ ছোট করার সুবিধা দেয়।

অ্যাপের সাইজ আরও কমানোর জন্য এক্সপেরিমেন্ট করা

নতুন রিসোর্স শ্রিন্কার প্রয়োগ করার ফলে, রিসোর্স টেবিল পরিবর্তন করে ব্যবহার না করা ভ্যালু রিসোর্স এবং ব্যবহার না করা ফাইল রিসোর্সের রেফারেন্স সরিয়ে দিয়ে আপনার ছোট করা অ্যাপের সাইজ আরও কমানো যেতে পারে। নতুন রিসোর্স শ্রিঙ্কার, অব্যবহৃত ফাইল রিসোর্স সম্পূর্ণভাবে মুছে দিতে পারে, এর ফলে আপনার অ্যাপের সাইজ আরও কমে যায়। এই আচরণ এখনও ডিফল্ট হিসেবে চালু করা হয়নি, তবে আপনি পরীক্ষামূলক বিকল্প যোগ করে এটি ব্যবহার করে দেখতে android.experimental.enableNewResourceShrinker.preciseShrinking=true আপনার প্রজেক্টের gradle.properties ফাইলে অপ্ট-ইন করতে পারেন।

নতুন রিসোর্স শ্রিনকার বা পরীক্ষামূলক ফ্ল্যাগ সংক্রান্ত কোনও সমস্যা দেখতে পেলে, সেই বিষয়ে অভিযোগ জানান। সমস্যা নির্ণয় করতে সাহায্য করতে অথবা অস্থায়ী সমাধান হিসেবে, আপনি নিজের প্রজেক্টের android.enableNewResourceShrinker=false-এ gradle.properties যোগ করে আগের প্রয়োগে ফিরে যেতে পারেন। নতুন শ্রিন্কার, ব্যবহার করা হয়নি এমন ফাইল-ভিত্তিক রিসোর্সকে আগের রিসোর্স শ্রিন্কারের তুলনায় সামান্য আলাদা ন্যূনতম ফাইল দিয়ে প্রতিস্থাপন করে, তবে এর ফলে রানটাইমে কোনও প্রভাব পড়বে না বলেই আশা করা হয়।

পুরনো ইমপ্লিমেন্টেশন Android Gradle প্লাগ-ইন 8.0.0 থেকে সরিয়ে দেওয়ার শিডিউল করা হয়েছে।

বিল্ড ভ্যারিয়েন্ট প্রকাশ করা

Android Gradle প্লাগ-ইন 7.1.0 ও এর পরের যেকোনও ভার্সন আপনাকে কোন বিল্ড ভেরিয়েন্ট Apache Maven রিপোজিটরিতে প্রকাশ করতে হবে তা কনফিগার করতে দেয়। নতুন প্রকাশনা DSL-এর উপর ভিত্তি করে AGP একটি কম্পোনেন্ট তৈরি করে যার মধ্যে একটি বা একাধিক বিল্ড ভ্যারিয়েন্ট থাকে, যা আপনি কোনও প্রকাশনাকে Maven রিপোজিটরিতে কাস্টমাইজ করতে ব্যবহার করতে পারেন। আগের ভার্সনের তুলনায়, এটি অপ্রয়োজনীয় কাজও এড়িয়ে যায়, কারণ কোনও কম্পোনেন্টই সাধারণত তৈরি করা হয় না। আরও জানতে, প্রকাশনা কোড স্যাম্পেল দেখুন।

Javadoc JAR প্রকাশ করা

AGP 7.1.0 ও এর পরের যেকোনও ভার্সন আপনাকে Java ও Kotlin সোর্স থেকে Javadoc তৈরি করতে এবং লাইব্রেরি প্রোজেক্টের জন্য AAR ছাড়াও Javadoc JAR ফাইল প্রকাশ করতে দেয়। Javadoc, POM এবং Gradle মডিউল মেটাডেটা{:.external} ফাইলে যোগ করা হয়। withJavadocJar() যোগ করে এই ফিচার চালু করুন singleVariant বা multipleVariants প্রকাশনা ব্লক। আরও জানতে, প্রকাশনা বিকল্পের কোড স্যাম্পেল দেখুন।

সোর্স JAR প্রকাশ করা

AGP 7.1.0 ও এর পরের যেকোনও ভার্সন আপনাকে লাইব্রেরি প্রোজেক্টের জন্য AAR ছাড়াও Java ও Kotlin সোর্স JAR ফাইল প্রকাশ করতে দেয়। সোর্সগুলি POM এবং Gradle মডিউল মেটাডেটা{:.external} ফাইলে যোগ করা হয়। singleVariant বা multipleVariants প্রকাশনা ব্লকে withSourcesJar() যোগ করে আপনি এই ফিচার চালু করতে পারবেন। আরও জানতে, প্রকাশনা বিকল্পের কোড স্যাম্পেল দেখুন।

Lint ব্লকের সিম্যান্টিক পরিবর্তন

কোনও সমস্যার দেওয়া তীব্রতা লেভেলকে ওভাররাইড করে এমন সব লিন্ট পদ্ধতি—enable, disable/ignore, informational, warning, error, fatal—এখন কনফিগারেশনের ক্রম মেনে চলে। যেমন, finalizeDsl()-এ কোনও সমস্যাকে 'মারাত্মক' হিসেবে সেট করা হলে এখন সেটি মূল DSL-এ বন্ধ করাকে ওভাররাইড করে। আরও তথ্যের জন্য, lint{} ব্লক রেফারেন্স ডকুমেন্ট এবং Android বিল্ড ফ্লো ও এক্সটেনশন পয়েন্ট দেখুন।

AGP API যা নেভিগেশন Safe Args Gradle প্লাগইন নির্ভর করে তা সরিয়ে দেওয়া হয়েছে। AGP 7.1, Navigation Safe Args-এর 2.4.0-rc1 বা 2.4.0 ভার্সনের সাথে কাজ করে না, তবে 2.5.0-alpha01 এবং 2.4.1 ভার্সনের সাথে কাজ করে। এর মধ্যে, বিকল্প হিসেবে, আপনি নেভিগেশন সেফ আর্গসের স্ন্যাপশট বিল্ডের সাথে AGP 7.1 ব্যবহার করতে পারেন, নেভিগেশন 2.5.0-SNAPSHOT. স্ন্যাপশট বিল্ড ব্যবহার করতে, বিল্ড আইডি #8054565 সহ স্ন্যাপশট সংক্রান্ত নির্দেশাবলী অনুসরণ করুন।

এছাড়াও, Navigation Safe Args-এর 2.4.1 এবং 2.5.0 ভার্সন আর AGP 4.2-এর সাথে কাজ করবে না; Safe Args-এর সেইসব ভার্সন ব্যবহার করতে হলে, আপনাকে অবশ্যই AGP 7.0 এবং তার পরের যেকোনও ভার্সন ব্যবহার করতে হবে।

অটোমেটিক কম্পোনেন্ট তৈরি করা বন্ধ করুন

AGP 8.0 থেকে, অটোমেটিক কম্পোনেন্ট তৈরি করার সুবিধা ডিফল্ট হিসেবে বন্ধ করা থাকবে। AGP 7.1 প্রতিটি বিল্ড ভ্যারিয়েন্টের জন্য অটোমেটিক একটি কম্পোনেন্ট তৈরি করে, যার নাম বিল্ড ভ্যারিয়েন্টের নামের মতোই হয় এবং একটি all কম্পোনেন্ট তৈরি করে যার মধ্যে সব বিল্ড ভ্যারিয়েন্ট থাকে। এই অটোমেটিক কম্পোনেন্ট তৈরি করার সুবিধা বন্ধ করা হবে। নতুন আচরণে ট্রানজিট করতে, আপনাকে android.disableAutomaticComponentCreation to true. সেট করে অটোমেটিক কম্পোনেন্ট তৈরি করা ম্যানুয়ালি বন্ধ করতে হবে আরও তথ্যের জন্য, দেখুন Maven Publish প্লাগ-ইন ব্যবহার করুন।

Firebase Performance Monitoring-এর কম্প্যাটিবিলিটি

AGP 7.1, Firebase পারফর্ম্যান্স মনিটরিং Gradle প্লাগ-ইন ভার্সন 1.4.0 ও তার আগের যেকোনও ভার্সনের সাথে মানানসই নয়। AGP Upgrade Assistant অটোমেটিক প্লাগ-ইনকে 1.4.1 ভার্সনে আপডেট করবে না, তাই আপনি firebase-perf ব্যবহার করলে এবং AGP-কে 7.1 ভার্সনে আপগ্রেড করতে চাইলে, আপনাকে এই নির্দিষ্ট আপগ্রেডটি ম্যানুয়ালি করতে হবে।

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

এই বিভাগে Android Gradle plugin 7.1.0-এ থাকা পরিচিত সমস্যাগুলি বর্ণনা করা হয়েছে।

Hilt প্লাগ-ইন ব্যবহার করে এমন অ্যাপ প্রোজেক্টের ইউনিট টেস্টিং সংক্রান্ত সমস্যা

ইউনিট টেস্ট ক্লাসপাথে নন-ইনস্ট্রুমেন্টেড অ্যাপ ক্লাস থাকে, যার অর্থ হল ইউনিট টেস্ট চালানোর সময় Hilt, ডিপেন্ডেন্সি ইনজেকশন হ্যান্ডেল করার জন্য অ্যাপ ক্লাসকে ইনস্ট্রুমেন্ট করে না।

7.1.1 রিলিজের মাধ্যমে এই সমস্যার সমাধান করা হবে, সমস্যা #213534628 দেখুন।