افزونه اندروید گریدل ۷.۱.۰ (ژانویه ۲۰۲۲)

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

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

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

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

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

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

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

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

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

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

این به‌روزرسانی جزئی مربوط به انتشار نسخه اول اندروید استودیو Bumblebee است.

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

سازگاری

حداقل نسخه نسخه پیش‌فرض یادداشت‌ها
گرادل ۷.۲ ۷.۲ برای کسب اطلاعات بیشتر، به به‌روزرسانی Gradle مراجعه کنید.
ابزارهای ساخت SDK ۳۰.۰.۳ ۳۰.۰.۳ ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
ان دی کی ناموجود ۲۱.۴.۷۰۷۵۵۲۹ نسخه دیگری از NDK را نصب یا پیکربندی کنید .
جی‌دی‌کی ۱۱ ۱۱ برای کسب اطلاعات بیشتر، به تنظیم نسخه JDK مراجعه کنید.

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

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

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

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

اکنون می‌توان یک ماژول اندروید Gradle با کد 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
  }
}
  • ماژول مصرف‌کننده باید با اضافه کردن یک خط در بلوک dependencies فایل build.gradle به ماژول منتشرکننده ارجاع دهد. برای مثال:
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'
          }
        }
      }
    }

برای توضیح بیشتر در مورد نحوه پیکربندی مصرف‌کنندگان و تولیدکنندگان بومی AAR با AGP، به وابستگی‌های بومی با AGP مراجعه کنید.

تنظیمات مخزن در فایل settings.gradle

وقتی یک پروژه جدید در اندروید استودیو Bumblebee ایجاد می‌شود، فایل build.gradle سطح بالا شامل بلوک plugins است و به دنبال آن کدی برای تمیز کردن دایرکتوری build شما قرار دارد:

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 در سطح ماژول برای تعریف پیکربندی‌های ساخت که مختص یک ماژول مشخص در پروژه شما هستند، استفاده کنید.

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

اندروید استودیو Bumblebee شامل یک کاهش‌دهنده منابع بهبود یافته است که به کاهش حجم برنامه شما کمک می‌کند.

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

پیاده‌سازی پیش‌فرضِ کاهش‌دهنده‌ی منابع اندروید در افزونه‌ی اندروید گریدل ۷.۱.۰-آلفا۰۹ به‌روزرسانی شده است. این پیاده‌سازی جدید از کاهش حجم برنامه‌ها با ویژگی‌های پویا پشتیبانی می‌کند.

کاهش بیشتر حجم برنامه به صورت آزمایشی

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

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

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

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

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

انتشار Javadoc JAR

AGP 7.1.0 و بالاتر به شما امکان می‌دهد Javadoc را از منابع جاوا و کاتلین تولید کنید و علاوه بر AARها برای پروژه‌های کتابخانه‌ای، فایل‌های JAR Javadoc را نیز منتشر کنید. Javadoc به فایل‌های POM و Gradle Module Metadata {:.external} اضافه می‌شود. این ویژگی را با اضافه کردن withJavadocJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، به نمونه کد گزینه‌های انتشار مراجعه کنید.

منابع را منتشر کنید JAR

AGP 7.1.0 و بالاتر به شما امکان می‌دهد علاوه بر AARها برای پروژه‌های کتابخانه‌ای، فایل‌های JAR منبع جاوا و کاتلین را نیز منتشر کنید. این منابع به فایل‌های POM و Gradle Module Metadata {:.external} اضافه می‌شوند. می‌توانید این ویژگی را با اضافه کردن withSourcesJar() در بلوک انتشار singleVariant یا multipleVariants فعال کنید. برای کسب اطلاعات بیشتر، به نمونه کد گزینه‌های انتشار مراجعه کنید.

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

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

APIهای AGP که افزونه‌ی Navigation 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 با یک نسخه snapshot از Navigation Safe Args، Navigation 2.5.0-SNAPSHOT استفاده کنید. برای استفاده از نسخه snapshot، دستورالعمل‌های snapshot را با شناسه ساخت #8054565 دنبال کنید.

علاوه بر این، نسخه‌های ۲.۴.۱ و ۲.۵.۰ از ابزار Navigation Safe Args دیگر با AGP 4.2 کار نخواهند کرد؛ برای استفاده از این نسخه‌های Safe Args، باید از 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 نسخه ۱.۴.۰ و پایین‌تر سازگار نیست. دستیار ارتقاء AGP به طور خودکار افزونه را به نسخه ۱.۴.۱ به‌روزرسانی نمی‌کند، بنابراین اگر از firebase-perf استفاده می‌کنید و می‌خواهید AGP را به ۷.۱ ارتقا دهید، باید این به‌روزرسانی خاص را به صورت دستی انجام دهید.

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

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

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

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

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