অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.0.0 (এপ্রিল 2023)

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

সামঞ্জস্য

ন্যূনতম সংস্করণ ডিফল্ট সংস্করণ নোট
গ্রেডল ৮.০ ৮.০ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস 30.0.3 30.0.3 SDK বিল্ড টুল ইনস্টল বা কনফিগার করুন
এনডিকে N/A 25.1.8937393 NDK এর একটি ভিন্ন সংস্করণ ইনস্টল বা কনফিগার করুন
জেডিকে 17 17 আরও জানতে, JDK সংস্করণ সেট করা দেখুন।

প্যাচ রিলিজ

নিচে Android Gradle Plugin 8.0 এর জন্য প্যাচ রিলিজের একটি তালিকা রয়েছে।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.0.2 (মে 2023)

AGP 8.0.2 এ সংশোধন করা বাগগুলির একটি তালিকার জন্য, Android Studio 2022.2.1 বন্ধ হওয়া সমস্যাগুলি দেখুন।

অ্যান্ড্রয়েড গ্রেডল প্লাগইন 8.0.1 (মে 2023)

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

স্থির সমস্যা
ত্রুটি: AGP 7.2.2 -> 7.4.0 আপগ্রেড করার পরে "সারণীতে প্রদত্ত আইডি সহ কোন সংস্করণের প্রয়োজন নেই"
markTypeAsLive AGP 7.4.1 এ R8 NullPointerException
[R8 4.0.53] Android 11-এ হার্ড ক্লাস যাচাইকরণ ব্যর্থতা

ব্রেকিং পরিবর্তন: মডিউল-স্তরের বিল্ড স্ক্রিপ্টে নামস্থান প্রয়োজন

ম্যানিফেস্ট ফাইলের পরিবর্তে আপনাকে মডিউল-স্তরের build.gradle.kts ফাইলে নামস্থান সেট করতে হবে। আপনি AGP 7.3 দিয়ে শুরু করে namespace ডিএসএল প্রপার্টি ব্যবহার শুরু করতে পারেন। আরও জানতে, একটি নামস্থান সেট করুন দেখুন।

নামস্থান DSL-এ স্থানান্তরিত করার সময়, নিম্নলিখিত বিষয়গুলি সম্পর্কে সচেতন থাকুন:

  • এজিপির পূর্ববর্তী সংস্করণগুলি কিছু ক্ষেত্রে ভুলভাবে মূল নামস্থান বা অ্যাপ্লিকেশন আইডি থেকে পরীক্ষার নামস্থান অনুমান করে। AGP আপগ্রেড সহকারী আপগ্রেড ব্লক করে যদি এটি দেখে যে আপনার প্রকল্পের প্রধান নামস্থান এবং পরীক্ষার নামস্থান একই। আপগ্রেড ব্লক করা হলে, আপনাকে ম্যানুয়ালি testNamespace পরিবর্তন করতে হবে এবং সেই অনুযায়ী আপনার সোর্স কোড পরিবর্তন করতে হবে।
  • আপনি পরীক্ষার নামস্থান পরিবর্তন করার পরে, আপনার কোড কম্পাইল করা সম্ভব কিন্তু আপনার যন্ত্রযুক্ত পরীক্ষা রানটাইমে ব্যর্থ হয়। এটি ঘটতে পারে যদি আপনার ইনস্ট্রুমেন্টেড টেস্ট সোর্স কোড আপনার androidTest এবং অ্যাপ সোর্স উভয়েই সংজ্ঞায়িত একটি রিসোর্স উল্লেখ করে।

আরও তথ্যের জন্য, সংখ্যা #191813691 মন্তব্য #19 দেখুন।

ব্রেকিং পরিবর্তন: বিল্ড বিকল্প ডিফল্ট মান

AGP 8.0 দিয়ে শুরু করে, বিল্ড পারফরম্যান্স উন্নত করতে এই পতাকার ডিফল্ট মানগুলি পরিবর্তিত হয়েছে। এই পরিবর্তনগুলির কিছু সমর্থন করার জন্য আপনার কোড সামঞ্জস্য করতে সহায়তা পেতে, AGP আপগ্রেড সহকারী ( টুলস > AGP আপগ্রেড সহকারী ) ব্যবহার করুন। আপগ্রেড সহকারী আপনাকে নতুন আচরণ বা পূর্বের আচরণ সংরক্ষণের জন্য পতাকা সেট করার জন্য আপনার কোড আপডেট করার মাধ্যমে গাইড করে।

পতাকা নতুন ডিফল্ট মান পূর্ববর্তী ডিফল্ট মান নোট
android.defaults.buildfeatures.buildconfig false true AGP 8.0 ডিফল্টরূপে BuildConfig তৈরি করে না। আপনার প্রয়োজন যেখানে প্রকল্পগুলিতে DSL ব্যবহার করে আপনাকে এই বিকল্পটি নির্দিষ্ট করতে হবে।
android.defaults.buildfeatures.aidl false true AGP 8.0 ডিফল্টরূপে AIDL সমর্থন সক্ষম করে না। আপনার প্রয়োজন যেখানে প্রকল্পগুলিতে DSL ব্যবহার করে আপনাকে এই বিকল্পটি নির্দিষ্ট করতে হবে। এই পতাকাটি AGP 9.0 এ সরানোর পরিকল্পনা করা হয়েছে।
android.defaults.buildfeatures.renderscript false true AGP 8.0 ডিফল্টরূপে রেন্ডারস্ক্রিপ্ট সমর্থন সক্ষম করে না। আপনার প্রয়োজন যেখানে প্রকল্পগুলিতে DSL ব্যবহার করে আপনাকে এই বিকল্পটি নির্দিষ্ট করতে হবে। এই পতাকাটি AGP 9.0 এ সরানোর পরিকল্পনা করা হয়েছে।
android.nonFinalResIds true false AGP 8.0 ডিফল্টরূপে অ-ফাইনাল ক্ষেত্র সহ R ক্লাস তৈরি করে।
android.nonTransitiveRClass true false AGP 8.0 শুধুমাত্র বর্তমান মডিউলে সংজ্ঞায়িত সম্পদের জন্য R ক্লাস তৈরি করে।
android.enableR8.fullMode true false AGP 8.0 ডিফল্টরূপে R8 সম্পূর্ণ মোড সক্ষম করে। আরো বিস্তারিত জানার জন্য, R8 ফুল মোড দেখুন।

ব্রেকিং পরিবর্তন: এনফোর্সড বিল্ড বিকল্প মান

AGP 8.0 দিয়ে শুরু করে, আপনি আর এই পতাকার মান পরিবর্তন করতে পারবেন না। আপনি যদি তাদের gradle.properties ফাইলে উল্লেখ করেন, তাহলে মান উপেক্ষা করা হয় এবং AGP সতর্কতা প্রিন্ট করে।

পতাকা বলবৎ মান নোট
android.dependencyResolutionAtConfigurationTime.warn true AGP 8.0 একটি সতর্কতা নির্গত করে যদি এটি কনফিগারেশন পর্বের সময় কনফিগারেশন রেজোলিউশন সনাক্ত করে কারণ এটি Gradle কনফিগারেশন সময়কে নেতিবাচকভাবে প্রভাবিত করে।
android.r8.failOnMissingClasses true AGP 8.0 ব্যর্থ হয় এমন বিল্ড যা R8 ব্যবহার করে যদি ভালো DEX অপ্টিমাইজেশন নিশ্চিত করতে ক্লাস অনুপস্থিত থাকে। এটি মোকাবেলা করার জন্য, আপনাকে অনুপস্থিত লাইব্রেরিগুলি যোগ করতে হবে বা -dontwarn রাখার নিয়মগুলি যোগ করতে হবে। আরও বিশদ বিবরণের জন্য, R8 সংকোচনে অনুপস্থিত ক্লাস সতর্কতা দেখুন।
android.testConfig.useRelativePath true যখন ইউনিট পরীক্ষায় অ্যান্ড্রয়েড রিসোর্স, সম্পদ এবং ম্যানিফেস্ট ব্যবহার করার জন্য সমর্থন সক্ষম করা হয়, তখন AGP 8.0 একটি test_config.properties ফাইল তৈরি করে যাতে শুধুমাত্র আপেক্ষিক পাথ থাকে। এটি নিশ্চিত করে যে অ্যান্ড্রয়েড ইউনিট পরীক্ষা সবসময় গ্রেডল বিল্ড ক্যাশে ব্যবহার করতে পারে।
android.useNewJarCreator true বিল্ড কর্মক্ষমতা উন্নত করতে JAR ফাইল তৈরি করার সময় AGP Zipflinger লাইব্রেরি ব্যবহার করে।
android.bundletool.includeRepositoriesInDependencyReport true AABs এবং APKগুলিতে SDK নির্ভরতা তথ্য যোগ করার সময়, AGP 8.0 এই তথ্যের সাথে প্রকল্প সংগ্রহস্থলগুলির একটি তালিকাও যোগ করে। আরও জানতে, প্লে কনসোলের নির্ভরতার তথ্য দেখুন।
android.enableArtProfiles true বেসলাইন প্রোফাইলগুলি এখন সর্বদা তৈরি হয়। বিস্তারিত জানার জন্য বেসলাইন প্রোফাইল দেখুন।
android.enableNewResourceShrinker true ডিফল্টরূপে নতুন সম্পদ শিঙ্কার বাস্তবায়ন ব্যবহার করুন। নতুন সম্পদ সঙ্কুচিত গতিশীল বৈশিষ্ট্য জন্য সমর্থন অন্তর্ভুক্ত.
android.enableSourceSetPathsMap true আপেক্ষিক রিসোর্স পাথ ম্যাপিং কম্পিউট করার জন্য ব্যবহৃত হয়, তাই Gradle বিল্ডগুলি প্রায়শই আপ-টু-ডেট থাকে।
android.cacheCompileLibResources true কম্পাইল করা লাইব্রেরি সংস্থানগুলি এখন ডিফল্টরূপে ক্যাশে করা যেতে পারে কারণ গ্রেডল প্রকল্পের অবস্থানের সাথে সম্পর্কিত সংস্থান ফাইলগুলিকে ট্র্যাক করে। android.enableSourceSetPathsMap সক্রিয় করার প্রয়োজন।
android.disableAutomaticComponentCreation true AGP 8.0 ডিফল্টরূপে কোনো সফটওয়্যার কম্পোনেন্ট তৈরি করে না। পরিবর্তে AGP শুধুমাত্র প্রকাশনা DSL ব্যবহার করে প্রকাশ করার জন্য কনফিগার করা ভেরিয়েন্টের জন্য Software Components তৈরি করে।

এক্সিকিউশন প্রোফাইলের জন্য নতুন স্থিতিশীল পতাকা

AGP নতুন পতাকা android.settings.executionProfile অন্তর্ভুক্ত করে। SettingsExtension থেকে ডিফল্ট এক্সিকিউশন প্রোফাইল ওভাররাইড করতে এই পতাকাটি ব্যবহার করুন। আরও জানতে, সেটিংস প্লাগইন ডকুমেন্টেশন দেখুন।

পরীক্ষামূলক পতাকাগুলির পূর্বরূপ দেখতে, প্রিভিউ রিলিজ নোটগুলি দেখুন।

Kotlin অলস সম্পত্তি নিয়োগ সমর্থিত নয়

আপনি যদি আপনার বিল্ড স্ক্রিপ্টের জন্য Gradle's Kotlin DSL ব্যবহার করেন, তাহলে মনে রাখবেন Android Studio এবং AGP 8.0 = অপারেটর ব্যবহার করে পরীক্ষামূলক সম্পত্তি অ্যাসাইনমেন্ট সমর্থন করে না। এই বৈশিষ্ট্য সম্পর্কে আরও তথ্যের জন্য, রিলিজ নোট এবং ডকুমেন্টেশন দেখুন।

বিশ্লেষক টাস্ক বিভাগ তৈরি করুন

অ্যান্ড্রয়েড স্টুডিও ফ্ল্যামিঙ্গো দিয়ে শুরু করে, বিল্ড অ্যানালাইজারে এমন কাজগুলির জন্য একটি নতুন ডিফল্ট ভিউ রয়েছে যা বিল্ডের সময়কালকে প্রভাবিত করে। যদি আপনার প্রোজেক্ট AGP 8.0 বা উচ্চতর ব্যবহার করে, কাজগুলি পৃথকভাবে প্রদর্শন করার পরিবর্তে, বিল্ড অ্যানালাইজার তাদের বিভাগ অনুসারে গোষ্ঠীভুক্ত করুন। উদাহরণস্বরূপ, অ্যান্ড্রয়েড রিসোর্স, কোটলিন, বা ডেক্সিং-এর জন্য নির্দিষ্ট কাজগুলিকে একত্রে গোষ্ঠীভুক্ত করা হয় এবং তারপর বিল্ড সময়কাল অনুসারে সাজানো হয়। এটি বিল্ড টাইমে কোন শ্রেণীতে সবচেয়ে বেশি প্রভাব ফেলে তা জানা সহজ করে তোলে। প্রতিটি বিভাগ প্রসারিত করা সংশ্লিষ্ট কাজের একটি তালিকা প্রদর্শন করে। গ্রুপিং ছাড়াই পৃথকভাবে কাজগুলি প্রদর্শন করতে, ড্রপ-ডাউন দ্বারা গোষ্ঠীটি ব্যবহার করুন।

বিশ্লেষক টাস্ক বিভাগ তৈরি করুন।

নতুন সেটিংস প্লাগইন

AGP 8.0.0-alpha09 নতুন সেটিংস প্লাগইন প্রবর্তন করে। সেটিংস প্লাগইন আপনাকে গ্লোবাল কনফিগারেশনগুলিকে কেন্দ্রীভূত করতে দেয় - সমস্ত মডিউলের জন্য প্রযোজ্য কনফিগারেশনগুলি - এক জায়গায় যাতে আপনাকে একাধিক মডিউলে কনফিগারেশনগুলি অনুলিপি এবং পেস্ট করতে হবে না৷ উপরন্তু, আপনি টুল এক্সিকিউশন প্রোফাইল তৈরি করতে সেটিংস প্লাগইন ব্যবহার করতে পারেন, বা টুল চালানোর জন্য বিভিন্ন নির্দেশাবলী, এবং তাদের মধ্যে স্যুইচ করতে পারেন।

সেটিংস প্লাগইন ব্যবহার করতে, settings.gradle ফাইলে প্লাগইনটি প্রয়োগ করুন:

apply plugin 'com.android.settings'

বিশ্বব্যাপী কনফিগারেশন কেন্দ্রীভূত করুন

গ্লোবাল কনফিগারেশন কনফিগার করতে, settings.gradle ফাইলে নতুন android ব্লক ব্যবহার করুন। এখানে একটি উদাহরণ:

android {
  compileSdk 31
  minSdk 28
  ...
}

টুল এক্সিকিউশন প্রোফাইল

সেটিংস প্লাগইন আপনাকে কিছু সরঞ্জামের জন্য এক্সিকিউশন প্রোফাইল তৈরি করতে দেয়। একটি এক্সিকিউশন প্রোফাইল নির্ধারণ করে কিভাবে একটি টুল চালানো হয়; আপনি পরিবেশের উপর নির্ভর করে বিভিন্ন এক্সিকিউশন প্রোফাইল নির্বাচন করতে পারেন। একটি এক্সিকিউশন প্রোফাইলে, আপনি একটি টুলের জন্য JVM আর্গুমেন্ট সেট করতে পারেন এবং এটি একটি পৃথক প্রক্রিয়ায় চালানোর জন্য কনফিগার করতে পারেন। বর্তমানে, শুধুমাত্র R8 টুল সমর্থিত।

এক্সিকিউশন প্রোফাইল তৈরি করুন এবং settings.gradle ফাইলে ডিফল্ট এক্সিকিউশন প্রোফাইল সেট করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

ডিফল্ট প্রোফাইল ওভাররাইড করতে, gradle.properties ফাইলে android.experimental.settings.executionProfile প্রপার্টি ব্যবহার করে একটি ভিন্ন প্রোফাইল নির্বাচন করুন:

android.experimental.settings.executionProfile=high

আপনি কমান্ড লাইন ব্যবহার করে এই সম্পত্তি সেট করতে পারেন, যা আপনাকে বিভিন্ন ওয়ার্কফ্লো সেট আপ করতে দেয়। যেমন আপনার যদি একটানা ইন্টিগ্রেশন ওয়ার্কফ্লো থাকে তাহলে আপনি settings.gradle ফাইল পরিবর্তন না করেই এক্সিকিউশন প্রোফাইল পরিবর্তন করতে কমান্ড লাইন ব্যবহার করতে পারেন:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

AGP 8.0 চালানোর জন্য JDK 17 প্রয়োজন

আপনার অ্যাপ তৈরি করতে Android Gradle Plugin 8.0 ব্যবহার করার সময়, এখন Gradle চালানোর জন্য JDK 17 প্রয়োজন। অ্যান্ড্রয়েড স্টুডিও ফ্ল্যামিঙ্গো JDK 17 বান্ডিল করে এবং এটিকে ডিফল্টরূপে ব্যবহার করার জন্য গ্র্যাডলকে কনফিগার করে, যার মানে হল যে বেশিরভাগ অ্যান্ড্রয়েড স্টুডিও ব্যবহারকারীদের তাদের প্রকল্পগুলিতে কোনও কনফিগারেশন পরিবর্তন করতে হবে না।

আপনি যদি Android স্টুডিওর ভিতরে AGP দ্বারা ব্যবহৃত JDK সংস্করণটি ম্যানুয়ালি সেট করতে চান তবে আপনাকে JDK 17 বা উচ্চতর ব্যবহার করতে হবে।

অ্যান্ড্রয়েড স্টুডিও থেকে স্বাধীন এজিপি ব্যবহার করার সময়, JAVA_HOME এনভায়রনমেন্ট ভেরিয়েবল বা -Dorg.gradle.java.home কমান্ড-লাইন বিকল্পটি আপনার JDK 17 এর ইনস্টলেশন ডিরেক্টরিতে সেট করে JDK সংস্করণ আপগ্রেড করুন।