افزایه Android Gradle 7.1.0 (ژانویه ۲۰۲۲)

افزایه Android Gradle نسخه ۷.۱.۰ نسخهٔ پخش اصلی است که شامل انواع ویژگی‌های جدید و بهبودها است.

‫۷.۱.۳ (آوریل ۲۰۲۲)

این به‌روزرسانی جزئی شامل رفع اشکالات زیر است:

  • مشکلات کلاس تکراری گزارش‌شده توسط R8

برای دیدن فهرست کامل رفع اشکالات موجود در این نسخه پخش، پست وب وصله ۳ «استودیو Android Bumblebee» را ببینید.

‫۷.۱.۲ (فوریه ۲۰۲۲)

این به‌روزرسانی جزئی شامل رفع اشکالات زیر است:

  • «افزایه Android Gradle» نسخه 7.1.0-rc01 نمی‌تواند تبدیل کدبایت ASM را درطول آزمایش‌های واحد انجام دهد
  • همگام‌سازی Gradle با «Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'.» ناموفق بود.
  • برخی‌از بلوک‌های جدید DSL را نمی‌توان از Groovy DSL در Android Gradle افزایه ۷.۰.۰ استفاده کرد
  • میانای برنامه‌سازی کاربردی جدید AGP 7.1 برای انتشار: فایل jar ساخته‌شده javadoc امضا نمی‌شود
  • ‫ClassesDataSourceCache باید از جدیدترین نسخه Asm استفاده کند
  • ‫Android Studio BumbleBee همیشه جدیدترین تغییرات را پیاده‌سازی نمی‌کند

برای دیدن فهرست کامل رفع اشکالات موجود در این نسخه پخش، پست وبلاگ وصله ۲ Android Studio Bumblebee را ببینید.

‫۷.۱.۱ (فوریه ۲۰۲۲)

این به‌روزرسانی جزئی با انتشار Android Studio Bumblebee Patch 1 مطابقت دارد.

برای دیدن فهرست رفع اشکالات موجود در این نسخه، پست وبلاگ Android Studio Bumblebee Patch 1 را ببینید.

سازگاری

حداقل نسخه نسخه پیش‌فرض یادداشت‌ها
Gradle ‫۲-۷ ‫۲-۷ برای کسب اطلاعات بیشتر، به‌روزرسانی Gradle را ببینید.
ابزارهای ساخت کیت توسعه نرم‌افزار ‫۳۰.۰.۳ ‫۳۰.۰.۳ «ابزارهای ساخت کیت توسعه نرم‌افزار» را نصب یا پیکربندی کنید.
NDK موجود نیست 21.4.7075529 نسخه دیگری از NDK را نصب یا پیکربندی کنید.
JDK 11 11 برای کسب اطلاعات بیشتر، تنظیم نسخه JDK را ببینید.

تکلیف تجزیه‌وتحلیل Lint اکنون قابل ذخیره در حافظه نهان است

‫AndroidLintAnalysisTask اکنون با Gradle ساخت حافظه نهان سازگار است. اگر با تنظیم کردن org.gradle.caching=true در فایل gradle.properties خود حافظه نهان ساخت را فعال کنید، وظیفه تجزیه‌وتحلیل lint درصورت امکان برونداد خود را از حافظه نهان ساخت دریافت خواهد کرد.

وظیفه تجزیه‌وتحلیل lint اغلب بزرگ‌ترین گلوگاه هنگام اجرای lint با افزایه Android Gradle است، بنابراین فعال کردن حافظه نهان ساخت سرعت ساخت را هنگام اجرای lint در بسیاری از موقعیت‌ها بهبود می‌بخشد. باید بهبود عملکرد قابل‌توجهی را ببینید، برای مثال، اگر پروژه چندماژولی دارید و دایرکتوری ساخت را قبل‌از اجرای lint در سرور CI پاک می‌کنید.

اکنون واحدهای C/C++ می‌توانند به واحدهای C/C++ دیگر در همان پروژه ارجاع دهند

اکنون می‌توان واحد Gradle Android با کد C/C++ را طوری تنظیم کرد که به فایل‌های سرصفحه و کد کتابخانه در واحد Gradle دیگری ارجاع دهد. از پروتکل Prefab برای انتقال سرصفحه‌ها و کتابخانه‌ها بین واحدهای Gradle استفاده می‌شود.

الزامات

  • واحد مصرف‌کننده باید CMake باشد و نباید ndk-build باشد. پشتیبانی از ndk-build به به‌روزرسانی NDK در آینده نیاز دارد. واحد انتشار ممکن است CMake یا ndk-build باشد.

  • واحد مصرف‌کننده باید prefab را در فایل build.gradle فعال کند.

android {
  buildFeatures {
    prefab true
  }
}
  • واحد انتشار باید prefabPublishing را در فایل build.gradle فعال کند.
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)
  • باید یک STL برای کل برنامه وجود داشته باشد. بنابراین، برای مثال، هر دو واحد مصرف‌کننده و منتشرکننده می‌توانند از STL مشترک C++ استفاده کنند.
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

برای توضیح بیشتر درباره نحوه پیکربندی مصرف‌کنندگان و تولیدکنندگان C/C++ AAR با AGP، به وابستگی‌های بومی با 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 سطح واحد تغییر نکرده است. بنابراین، از فایل build.gradle سطح بالا و فایل settings.gradle برای تعریف پیکربندی‌های ساخت استفاده کنید که برای همه واحدهای پروژه شما اعمال می‌شود، یا مخزن‌ها و وابستگی‌هایی که برای خود Gradle اعمال می‌شود؛ از فایل build.gradle سطح واحد برای تعریف پیکربندی‌های ساخت استفاده کنید که مختص واحد معینی در پروژه شما است.

کاهش‌دهنده منابع بهبودیافته

‫Android Studio Bumblebee شامل کوچک‌کننده بهبودیافته منبع است که به کاهش اندازه برنامه شما کمک می‌کند.

پشتیبانی از برنامه‌های دارای ویژگی‌های پویا

پیاده‌سازی پیش‌فرض کوچک‌کننده منبع Android در «افزایه Android Gradle» نسخه 7.1.0-alpha09 به‌روز شده است. پیاده‌سازی جدید از کوچک کردن برنامه‌ها با ویژگی‌های پویا پشتیبانی می‌کند.

کاهش بیشتر اندازه برنامه آزمایشی

پیاده‌سازی جدید کوچک‌کننده منبع می‌تواند با اصلاح جدول منبع برای برداشتن منابع مقدار استفاده‌نشده و ارجاع به منابع فایل استفاده‌نشده، اندازه برنامه کوچک‌شده شما را حتی بیشتر کاهش دهد. کوچک‌کننده منبع جدید می‌تواند منابع فایل استفاده‌نشده را به‌طور کامل حذف کند و اندازه برنامه شما را بیشتر کاهش دهد. این رفتار هنوز به‌طور پیش‌فرض فعال نیست، اما می‌توانید با افزودن گزینه آزمایشی android.experimental.enableNewResourceShrinker.preciseShrinking=true به فایل gradle.properties پروژه خود، برای امتحان کردن آن موافقت کنید.

لطفاً هر مشکلی را که در کوچک‌کننده منبع جدید یا پرچم آزمایشی پیدا کردید گزارش کنید. برای کمک به تشخیص مشکلات، یا به‌عنوان راهکاری موقت، می‌توانید با افزودن android.enableNewResourceShrinker=false به پروژه gradle.properties، به پیاده‌سازی قبلی برگردید. کوچک‌کننده جدید منابع مبتنی بر فایل استفاده‌نشده را با فایل‌های حداقلی کمی متفاوت‌تر از کوچک‌کننده منبع قبلی جایگزین می‌کند، اما انتظار نمی‌رود این کار تأثیری بر زمان اجرا داشته باشد.

پیاده‌سازی قدیمی قرار است در افزایه Android Gradle نسخه ۸.۰.۰ برداشته شود.

انتشار گونه ساخت

افزایه Android Gradle نسخه ۷.۱.۰ و بالاتر به شما امکان می‌دهد پیکربندی کنید کدام گونه‌های ساختمانی در مخزن Apache Maven منتشر شوند. ‫AGP براساس زبان مدل‌سازی انتشار جدید، مؤلفه‌ای با یک یا چند گونه ساخت ایجاد می‌کند که می‌توانید از آن برای سفارشی‌سازی انتشار در مخزن Maven استفاده کنید. در مقایسه با نسخه‌های قبلی، این نسخه از کار غیرضروری نیز جلوگیری می‌کند، زیرا هیچ مؤلفه‌ای به‌طور پیش‌فرض ایجاد نمی‌شود. برای کسب اطلاعات بیشتر، انتشار کد نمونه را ببینید.

انتشار Javadoc JAR

‫AGP نسخه ۷.۱.۰ و بالاتر به شما امکان می‌دهد Javadoc را از منابع Java و Kotlin تولید کنید و فایل‌های Javadoc JAR را علاوه‌بر AAR برای پروژه‌های کتابخانه منتشر کنید. ‫Javadoc به POM و فایل‌های فراداده واحد Gradle{:.external} اضافه می‌شود. با افزودن withJavadocJar() در singleVariant یا multipleVariants بلوک انتشار، این ویژگی را فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه‌های انتشار را ببینید.

انتشار منبع JAR

‫AGP نسخه ۷.۱.۰ و بالاتر به شما امکان می‌دهد فایل‌های منبع Java و Kotlin را علاوه‌بر فایل‌های AAR برای پروژه‌های کتابخانه منتشر کنید. منابع به فایل‌های POM و فراداده واحد Gradle{:.external} اضافه می‌شوند. با افزودن withSourcesJar() در singleVariant یا multipleVariants واحد انتشار می‌توانید این ویژگی را فعال کنید. برای کسب اطلاعات بیشتر، نمونه کد گزینه‌های انتشار را ببینید.

تغییر معنایی بلوک Lint

اکنون همه روش‌های Lint که سطح شدت مشکل را لغو می‌کنند—enable،‏ disable/ignore،‏ informational،‏ warning،‏ error،‏ fatal—ترتیب پیکربندی را رعایت می‌کنند. برای مثال، تنظیم مشکل به‌عنوان مهلک در finalizeDsl() اکنون غیرفعال کردن آن را در DSL اصلی ملغی می‌کند. برای اطلاعات بیشتر، lint{} اسناد مرجع بلوک و جریان ساخت Android و نقاط افزونه را ببینید.

میاناهای برنامه‌سازی کاربردی AGP که Navigation Safe Args Gradle plugin به آن‌ها وابسته است برداشته شده است. ‫AGP 7.1 با نسخه‌های 2.4.0-rc1 یا 2.4.0 از «آرگومان‌های ایمن ناوبری» کار نمی‌کند، اما با نسخه‌های 2.5.0-alpha01 و 2.4.1 کار خواهد کرد. در این فاصله، به‌عنوان راهکار موقت، می‌توانید از AGP 7.1 با ساختار لحظه‌ای Navigation Safe Args، ‏Navigation 2.5.0-SNAPSHOT استفاده کنید. برای استفاده از ساختار لحظه‌ای، دستورالعمل‌های لحظه‌ای با شناسه ساختار #8054565 را دنبال کنید.

علاوه‌براین، نسخه‌های ۲.۴.۱ و ۲.۵.۰ «آرگومان‌های ایمن پیمایش» دیگر با AGP 4.2 کار نخواهد کرد؛ برای استفاده از آن نسخه‌های «آرگومان‌های ایمن»، باید از AGP 7.0 و بالاتر استفاده کنید.

غیرفعال کردن ایجاد خودکار عنصر

از AGP 8.0، ایجاد خودکار عنصر به‌طور پیش‌فرض غیرفعال خواهد شد. ‫AGP 7.1 به‌طور خودکار برای هر گونه ساخت یک عنصر ایجاد می‌کند، که نام آن با نام گونه ساخت یکسان است، و یک عنصر all که حاوی همه گونه‌های ساخت است. این ساخت خودکار عنصر غیرفعال خواهد شد. برای انتقال به عملکرد جدید، باید با تنظیم android.disableAutomaticComponentCreation به true.، ایجاد خودکار عنصر را به‌صورت دستی غیرفعال کنید برای اطلاعات بیشتر، استفاده از افزایه Maven Publish را ببینید.

سازگاری «پایشگر کارایی Firebase»

‫AGP 7.1 با افزایه Firebase Performance Monitoring Gradle نسخه 1.4.0 و پایین‌تر سازگار نیست. «دستیار ارتقای AGP» افزایه را به‌طور خودکار به نسخه ۱.۴.۱ به‌روزرسانی نمی‌کند، بنابراین اگر از firebase-perf استفاده می‌کنید و می‌خواهید AGP را به ۷.۱ ارتقا دهید، باید این ارتقا را به‌صورت دستی انجام دهید.

مشکلات شناخته‌شده

این بخش مشکلات شناخته‌شده موجود در افزایه Android Gradle نسخه ۷.۱.۰ را شرح می‌دهد.

مشکلات مربوط به آزمایش واحد پروژه برنامه‌ای که از افزایه Hilt استفاده می‌کند

مسیر کلاس آزمایش واحد حاوی کلاس‌های برنامه بدون ابزار است، که یعنی Hilt کلاس‌های برنامه را برای مدیریت تزریق وابستگی هنگام اجرای آزمایش‌های واحد ابزاربندی نمی‌کند.

این مشکل با انتشار نسخه ۷.۱.۱ برطرف خواهد شد، مشکل شماره ۲۱۳۵۳۴۶۲۸ را ببینید.