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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.১.০ একটি প্রধান রিলিজ যাতে বিভিন্ন ধরণের নতুন বৈশিষ্ট্য এবং উন্নতি অন্তর্ভুক্ত রয়েছে।

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

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

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

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

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

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

  • ইউনিট পরীক্ষার সময় অ্যান্ড্রয়েড গ্রেডল প্লাগইন 7.1.0-rc01 ASM বাইটকোড রূপান্তর সম্পাদন করতে ব্যর্থ হয়েছে
  • "'com.android.build.api.extension.AndroidComponentsExtension' ক্লাস লোড করতে অক্ষম" এর সাথে গ্রেডল সিঙ্ক ব্যর্থ হয়।
  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৭.০.০-এ গ্রুভি ডিএসএল থেকে কিছু নতুন ডিএসএল ব্লক ব্যবহার করা যাবে না।
  • AGP 7.1 নতুন প্রকাশনা API: তৈরি জাভাডোক জার স্বাক্ষরিত হয়নি
  • ClassesDataSourceCache-এর সর্বশেষ Asm সংস্করণ ব্যবহার করা উচিত
  • অ্যান্ড্রয়েড স্টুডিও বাম্বলবি সবসময় সর্বশেষ পরিবর্তনগুলি স্থাপন করে না

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

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

এই ছোটখাটো আপডেটটি অ্যান্ড্রয়েড স্টুডিও বাম্বলবি প্যাচ ১ এর রিলিজের সাথে সম্পর্কিত।

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

সামঞ্জস্য

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

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

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

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

C/C++ মডিউলগুলি এখন একই প্রকল্পের অন্যান্য C/C++ মডিউলগুলিকে উল্লেখ করতে পারে

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

আবশ্যকতা

  • কনজিউমিং মডিউলটি অবশ্যই 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 ফাইলে রিপোজিটরি সেটিংস

যখন 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 ফাইলটি ব্যবহার করুন।

উন্নত রিসোর্স সঙ্কুচিতকারী

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

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

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

পরীক্ষামূলকভাবে আরও অ্যাপের আকার হ্রাস

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

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

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.0.0-এ পুরানো বাস্তবায়নটি সরানোর পরিকল্পনা করা হয়েছে।

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

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

জাভাডোক জেআর প্রকাশ করুন

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

প্রকাশের উৎস JAR

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

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

সমস্ত লিন্ট পদ্ধতি যা কোনও সমস্যার তীব্রতার স্তরকে ওভাররাইড করে — enable , disable / ignore , informational , warning , error , fatal — এখন কনফিগারেশনের ক্রম মেনে চলে। উদাহরণস্বরূপ, finalizeDsl() এ কোনও সমস্যাকে fatal হিসাবে সেট করা এখন মূল DSL ​​এ এটিকে অক্ষম করার উপর ওভাররাইড করে। আরও তথ্যের জন্য, 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 সহ স্ন্যাপশট নির্দেশাবলী অনুসরণ করুন।

এছাড়াও, নেভিগেশন সেফ আরগস সংস্করণ 2.4.1 এবং 2.5.0 আর AGP 4.2 এর সাথে কাজ করবে না; সেফ আরগসের এই সংস্করণগুলি ব্যবহার করতে, আপনাকে অবশ্যই AGP 7.0 এবং উচ্চতর ব্যবহার করতে হবে।

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

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 আপগ্রেড অ্যাসিস্ট্যান্ট স্বয়ংক্রিয়ভাবে প্লাগইনটিকে 1.4.1 ভার্সনে আপডেট করবে না, তাই আপনি যদি firebase-perf ব্যবহার করেন এবং AGP 7.1 এ আপগ্রেড করতে চান, তাহলে আপনাকে এই বিশেষ আপগ্রেডটি ম্যানুয়ালি করতে হবে।

জ্ঞাত সমস্যা

এই বিভাগটি Android Gradle প্লাগইন 7.1.0-এ বিদ্যমান জ্ঞাত সমস্যাগুলি বর্ণনা করে।

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

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

এই সমস্যাটি ৭.১.১ রিলিজের মাধ্যমে ঠিক করা হবে, সংখ্যা #২১৩৫৩৪৬২৮ দেখুন।