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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.১.০ একটি প্রধান রিলিজ, যাতে বিভিন্ন নতুন ফিচার ও উন্নতি অন্তর্ভুক্ত করা হয়েছে।

৭.১.৩ (এপ্রিল ২০২২)

এই ছোট আপডেটটিতে নিম্নলিখিত বাগ ফিক্সগুলো অন্তর্ভুক্ত করা হয়েছে:

  • R8 দ্বারা রিপোর্ট করা ডুপ্লিকেট ক্লাস সমস্যা

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

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

এই ছোট আপডেটটিতে নিম্নলিখিত বাগ ফিক্সগুলো অন্তর্ভুক্ত করা হয়েছে:

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

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

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

এই ক্ষুদ্র আপডেটটি অ্যান্ড্রয়েড স্টুডিও বাম্বলবি প্যাচ ১-এর প্রকাশের সাথে সঙ্গতিপূর্ণ।

এই রিলিজে অন্তর্ভুক্ত বাগ ফিক্সগুলোর তালিকা দেখতে, Android Studio Bumblebee Patch 1 ব্লগ পোস্টটি দেখুন।

সামঞ্জস্যতা

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ নোট
গ্রেডল ৭.২ ৭.২ আরও জানতে, Gradle আপডেট করা দেখুন।
এসডিকে বিল্ড টুলস ৩০.০.৩ ৩০.০.৩ এসডিকে বিল্ড টুলস ইনস্টল বা কনফিগার করুন
এনডিকে প্রযোজ্য নয় ২১.৪.৭০৭৫৫২৯ NDK-এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন
জেডিকে ১১ ১১ আরও জানতে, JDK সংস্করণ নির্ধারণ দেখুন।

লিন্ট বিশ্লেষণ টাস্ক এখন ক্যাশেযোগ্য।

AndroidLintAnalysisTask এখন Gradle বিল্ড ক্যাশের সাথে সামঞ্জস্যপূর্ণ। যদি আপনি আপনার gradle.properties ফাইলে org.gradle.caching=true সেট করে বিল্ড ক্যাশ সক্রিয় করেন, তাহলে লিন্ট অ্যানালাইসিস টাস্কটি সম্ভব হলে বিল্ড ক্যাশ থেকে তার আউটপুট গ্রহণ করবে।

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

এখন থেকে C/C++ মডিউলগুলো একই প্রোজেক্টের মধ্যে থাকা অন্যান্য C/C++ মডিউলকে রেফারেন্স করতে পারবে।

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

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

  • ব্যবহারকারী মডিউলটি অবশ্যই 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-এর সাথে নেটিভ AAR কনজিউমার এবং প্রডিউসারগুলি কীভাবে কনফিগার করতে হয় তার আরও ব্যাখ্যার জন্য, "AGP-এর সাথে নেটিভ নির্ভরতা" দেখুন।

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

অ্যান্ড্রয়েড স্টুডিও বাম্বলবি-তে যখন একটি নতুন প্রজেক্ট তৈরি করা হয়, তখন শীর্ষ-স্তরের 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 ফাইলটি ব্যবহার করুন।

উন্নত সম্পদ সংকুচিতকারী

অ্যান্ড্রয়েড স্টুডিও বাম্বলবি-তে একটি উন্নত রিসোর্স শ্রিংকার রয়েছে যা আপনার অ্যাপের আকার কমাতে সাহায্য করে।

ডাইনামিক বৈশিষ্ট্য সহ অ্যাপগুলির জন্য সমর্থন

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 7.1.0-alpha09-এ অ্যান্ড্রয়েড রিসোর্স শ্রিংকারের ডিফল্ট ইমপ্লিমেন্টেশন আপডেট করা হয়েছে। নতুন ইমপ্লিমেন্টেশনটি ডাইনামিক ফিচারযুক্ত অ্যাপ শ্রিংক করা সমর্থন করে।

পরীক্ষামূলকভাবে অ্যাপের আকার আরও কমানো হচ্ছে

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

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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৮.০.০ থেকে পুরোনো বাস্তবায়নটি সরিয়ে ফেলার কথা রয়েছে।

ভেরিয়েন্ট প্রকাশনা তৈরি করুন

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.১.০ এবং এর পরবর্তী সংস্করণগুলো আপনাকে একটি অ্যাপাচি ম্যাভেন রিপোজিটরিতে কোন বিল্ড ভ্যারিয়েন্টগুলো পাবলিশ করা হবে তা কনফিগার করার সুযোগ দেয়। AGP নতুন পাবলিশিং DSL-এর উপর ভিত্তি করে একটি বা একাধিক বিল্ড ভ্যারিয়েন্টসহ একটি কম্পোনেন্ট তৈরি করে, যা আপনি একটি ম্যাভেন রিপোজিটরিতে পাবলিকেশন কাস্টমাইজ করতে ব্যবহার করতে পারেন। পূর্ববর্তী সংস্করণগুলোর তুলনায়, এটি অপ্রয়োজনীয় কাজও এড়িয়ে চলে, কারণ ডিফল্টরূপে কোনো কম্পোনেন্ট তৈরি হয় না। আরও জানতে, পাবলিশিং কোড স্যাম্পলটি দেখুন।

Javadoc JAR প্রকাশ করুন

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

উৎস JAR প্রকাশ করুন

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

লিন্ট ব্লকের শব্দার্থগত পরিবর্তন

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

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

এছাড়াও, নেভিগেশন সেফ আর্গস-এর ২.৪.১ এবং ২.৫.০ সংস্করণগুলো এজিপি ৪.২-এর সাথে আর কাজ করবে না; সেফ আর্গস-এর ঐ সংস্করণগুলো ব্যবহার করতে হলে আপনাকে অবশ্যই এজিপি ৭.০ বা তার উচ্চতর সংস্করণ ব্যবহার করতে হবে।

স্বয়ংক্রিয় উপাদান তৈরি নিষ্ক্রিয় করুন

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

ফায়ারবেস পারফরম্যান্স মনিটরিং সামঞ্জস্যতা

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

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

এই অংশে অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.১.০-তে বিদ্যমান জ্ঞাত সমস্যাগুলো বর্ণনা করা হয়েছে।

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

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

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