پلاگین Android Gradle 8.3.0 (فوریه 2024)

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

سازگاری

حداکثر سطح API که افزونه اندروید Gradle نسخه ۸.۳ پشتیبانی می‌کند، سطح API ۳۴ است. در اینجا اطلاعات سازگاری دیگری نیز وجود دارد:

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

موارد زیر ویژگی‌های جدید افزونه اندروید Gradle نسخه ۸.۳ هستند.

انتشار پچ

در زیر لیستی از پچ‌های منتشر شده در اندروید استودیو Iguana و افزونه اندروید Gradle نسخه ۸.۳ آمده است.

اندروید استودیو ایگوانا | 2023.2.1 پچ 2 و AGP 8.3.2 (آوریل 2024)

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

اندروید استودیو ایگوانا | 2023.2.1 پچ 1 و AGP 8.3.1 (مارس 2024)

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

پشتیبانی از کاتالوگ‌های نسخه Gradle

اندروید استودیو از کاتالوگ‌های نسخه Gradle مبتنی بر TOML پشتیبانی می‌کند، قابلیتی که به شما امکان می‌دهد وابستگی‌ها را در یک مکان مرکزی مدیریت کنید و وابستگی‌ها را در ماژول‌ها یا پروژه‌ها به اشتراک بگذارید. اندروید استودیو اکنون پیکربندی کاتالوگ‌های نسخه را از طریق پیشنهادات ویرایشگر و ادغام با کادر محاوره‌ای ساختار پروژه آسان‌تر می‌کند. یاد بگیرید که چگونه کاتالوگ‌های نسخه Gradle را تنظیم و پیکربندی کنید یا چگونه نسخه ساخته شده خود را به کاتالوگ‌های نسخه منتقل کنید .

تکمیل کد و ناوبری

اندروید استودیو هنگام ویرایش یک کاتالوگ نسخه در قالب فایل TOML یا اضافه کردن یک وابستگی از یک کاتالوگ نسخه به یک فایل ساخت، قابلیت تکمیل کد را ارائه می‌دهد. برای استفاده از تکمیل کد، کلیدهای Ctrl+Space (در macOS کلیدهای Command+Space ) را فشار دهید. علاوه بر این، می‌توانید با فشار دادن کلیدهای Ctrl+b (در macOS کلیدهای Command+b ) به سرعت از یک مرجع وابستگی در فایل build.gradle برنامه خود به جایی که در کاتالوگ نسخه اعلام شده است، حرکت کنید.

تکمیل کد هنگام اضافه کردن یک وابستگی

ادغام با پنجره ساختار پروژه

اگر پروژه شما از یک کاتالوگ نسخه تعریف شده در قالب فایل TOML استفاده می‌کند، می‌توانید متغیرهایی را که در آنجا تعریف کرده‌اید از طریق پنجره ساختار پروژه ، نمای متغیرها ( File > Project Structure > Variables ) در اندروید استودیو ویرایش کنید. برای هر کاتالوگ نسخه، یک منوی کشویی وجود دارد که متغیرهای آن کاتالوگ را فهرست می‌کند. برای ویرایش یک متغیر، روی مقدار آن کلیک کنید و آن را بازنویسی کنید. هنگامی که این تغییرات را ذخیره می‌کنید، فایل TOML بر اساس آن به‌روزرسانی می‌شود.

متغیرهایی از یک کاتالوگ نسخه در پنجره ساختار پروژه

همچنین می‌توانید وابستگی‌ها را در پنجره ساختار پروژه، نمای وابستگی‌ها ( File > Project Structure > Dependencies ) به‌روزرسانی کنید. برای به‌روزرسانی نسخه‌ها با استفاده از پنجره ساختار پروژه ، به ماژول و وابستگی‌ای که می‌خواهید ویرایش کنید بروید و سپس فیلد نسخه درخواستی (Requested Version ) را به‌روزرسانی کنید. وقتی این تغییرات را ذخیره می‌کنید، فایل TOML نیز متناسب با آن به‌روزرسانی می‌شود. توجه داشته باشید که اگر نسخه وابستگی با استفاده از یک متغیر تعریف شده باشد، به‌روزرسانی مستقیم نسخه به این روش، متغیر را با یک مقدار ثابت جایگزین می‌کند. همچنین توجه داشته باشید که حذف یک وابستگی از یک فایل ساخت، چه از پنجره ساختار پروژه استفاده کنید و چه نکنید، وابستگی را از کاتالوگ نسخه حذف نمی‌کند.

وابستگی‌های یک کاتالوگ نسخه در پنجره ساختار پروژه

مشکلات و محدودیت‌های شناخته‌شده

موارد زیر مشکلات یا محدودیت‌های شناخته‌شده‌ای در پشتیبانی از Gradle Version Catalogs در اندروید استودیو هستند.

  • خطا در هایلایت کردن اعلان‌های نام مستعار افزونه در فایل‌های اسکریپت کاتلین: وقتی اعلان افزونه‌ای به شکل alias(libs.plugins.example) اضافه می‌کنید، ویرایشگر یک زیرخط قرمز زیر قسمت libs اضافه می‌کند. این یک مشکل شناخته شده در نسخه‌های ۸.۰ و پایین‌تر Gradle است و در نسخه‌های بعدی Gradle حل خواهد شد.

  • پشتیبانی اندروید استودیو فقط برای کاتالوگ‌های نسخه با فرمت TOML: در حال حاضر پشتیبانی از دیالوگ‌های تکمیل کد، ناوبری و ساختار پروژه اندروید استودیو فقط برای کاتالوگ‌های نسخه تعریف شده در فرمت فایل TOML در دسترس است. با این حال، شما هنوز می‌توانید یک کاتالوگ نسخه را مستقیماً در فایل settings.gradle اضافه کنید و از وابستگی‌های آن در پروژه خود استفاده کنید.

  • پیمایش برای فایل‌های ساخت KTS پشتیبانی نمی‌شود: پیمایش به تعریف وابستگی در یک کاتالوگ نسخه با استفاده از Control + click ( Command + click در macOS) هنوز برای فایل‌های ساخت نوشته شده با استفاده از اسکریپت Kotlin پشتیبانی نمی‌شود.

  • دستیار فایربیس وابستگی‌ها را مستقیماً در اسکریپت‌های ساخت اضافه می‌کند: دستیار فایربیس وابستگی‌ها را مستقیماً به اسکریپت‌های ساخت شما اضافه می‌کند، نه از طریق کاتالوگ‌های نسخه.

  • قابلیت «یافتن کاربردها» پشتیبانی نمی‌شود: یافتن کاربردهای یک متغیر کاتالوگ نسخه در سایر فایل‌های ساخت هنوز پشتیبانی نمی‌شود، چه فایل ساخت در KTS باشد و چه در Groovy. یعنی استفاده از Control + click ( Command + click در macOS) روی تعریف یک متغیر در کاتالوگ نسخه، به فایل‌های ساختی که متغیر در آنها استفاده شده است، منجر نمی‌شود.

  • پنجره‌ی ساختار پروژه در اندروید استودیو، اگر فایل‌های کاتالوگ در پوشه‌ی اصلی gradle باشند، چندین فایل کاتالوگ را نشان می‌دهد، اما کاتالوگ‌های مربوط به ساخت ترکیبی را نشان نمی‌دهد. برای مثال، اگر دو فایل کاتالوگ دارید - یکی برای برنامه‌ی شما و دیگری برای ساخت ترکیبی - پنجره‌ی ساختار پروژه فقط فایل کاتالوگ برنامه را نشان می‌دهد. می‌توانید از ساخت ترکیبی استفاده کنید، اما باید فایل TOML آن را مستقیماً ویرایش کنید.

بینش‌های بیشتر در مورد SDK: مسائل مربوط به سیاست

اندروید استودیو برای SDK های عمومی که در فهرست SDK گوگل پلی، نقض خط مشی Play دارند، هشدارهای lint را در فایل‌های build.gradle.kts و build.gradle و در پنجره ساختار پروژه نمایش می‌دهد. شما باید هرگونه وابستگی که خط مشی‌های Play را نقض می‌کند، به‌روزرسانی کنید زیرا این نقض‌ها می‌تواند در آینده مانع از انتشار شما در کنسول گوگل پلی شود. هشدارهای نقض خط مشی، هشدارهای نسخه قدیمی نمایش داده شده توسط اندروید استودیو را تکمیل می‌کنند.

پشتیبانی از نسخه compileSDK اندروید استودیو

اگر پروژه شما از compileSdk ای استفاده کند که توسط نسخه فعلی اندروید استودیو پشتیبانی نمی‌شود، اندروید استودیو هشداری را نمایش می‌دهد. در صورت وجود، همچنین پیشنهاد می‌دهد که به نسخه‌ای از اندروید استودیو که از compileSdk مورد استفاده پروژه شما پشتیبانی می‌کند، منتقل شوید. به خاطر داشته باشید که ارتقاء اندروید استودیو ممکن است نیاز به ارتقاء AGP نیز داشته باشد . AGP همچنین در صورتی که compileSdk مورد استفاده پروژه شما توسط نسخه فعلی AGP پشتیبانی نشود، هشداری را در پنجره ابزار ساخت نمایش می‌دهد.

تغییر رفتار Lint

با شروع از افزونه اندروید Gradle نسخه ۸.۳.۰-alpha02، هنگام اجرای lint روی یک ماژول، وظایف تجزیه و تحلیل lint جداگانه برای اجزای اصلی و آزمایشی ماژول اجرا می‌شوند. دلیل این تغییر بهبود عملکرد است. برای بازگشت به رفتار قبلی، android.experimental.lint.analysisPerComponent=false را در فایل gradle.properties خود تنظیم کنید.

کاهش دقیق منابع به طور پیش‌فرض فعال است

کوچک‌سازی دقیق منابع، که ورودی‌های بلااستفاده را از فایل resources.arsc حذف می‌کند و فایل‌های منبع بلااستفاده را از بین می‌برد، به طور پیش‌فرض فعال است. وقتی این کوچک‌سازی فعال باشد، جدول منابع شما کوچک می‌شود و فقط ورودی‌های پوشه res که به آنها ارجاع داده شده است در APK گنجانده می‌شوند.

برای غیرفعال کردن کوچک‌سازی دقیق منابع، مقدار android.enableNewResourceShrinker.preciseShrinking را در فایل gradle.properties پروژه خود روی false تنظیم کنید.

مشکلات برطرف شده

افزونه اندروید گریدل ۸.۳.۲

مشکلات برطرف شده
افزونه گرادل اندروید
ممکن است بن‌بست در AGP 8.3 با فعال بودن desugaring رخ دهد.
AGP 8.3 فایل zipApksFor Task را می‌شکند
ادغام Lint
Lint قادر به رفع ابهام از وابستگی KMP نیست

افزونه اندروید گریدل ۸.۳.۱

مشکلات برطرف شده
افزونه گرادل اندروید
مشکل مدیریت ورودی‌های افزایشی MergeJavaResourcesTask
ادغام Lint
Lint نمی‌تواند نوع مجموعه‌های منبع خواهر و برادر را در AGP 8.3.0-rc02 تشخیص دهد

افزونه اندروید گریدل ۸.۳.۰

مشکلات برطرف شده
افزونه گرادل اندروید
حافظه پنهان ساخت برای وظیفه PackageForUnitTest زائد است
[AGP 8.1.0] اگر هر دو splits.abi.isEnable و testOptions.unitTests.isIncludeAndroidResources درست باشند، تست ./gradlew با پیام "Unable to find manifest output" با شکست مواجه می‌شود.
ساخت مدل AGP با ساخت‌های کامپوزیت گریدل تو در تو با شکست مواجه می‌شود
ابزار کاهش منابع، شناسه‌های منابع را دستکاری می‌کند و منجر به خرابی‌های زمان اجرا می‌شود.
بررسی حداقل نسخه Gradle در ساخت دوم و بعد از آن اجرا نمی‌شود
اجرای وظیفه ':app:mergeReleaseClasses' پس از به‌روزرسانی AGP از ۸.۰.۲ به ۸.۱.۰ با شکست مواجه شد.
[Gradle 8.4][ارتقاء] شکست تست ادغام پس از ارتقا به دلیل استفاده از ویژگی منسوخ شده در افزونه kotlin gradle
در طول مرحله پیکربندی، وجود فایل‌های پوششی مانیفست را بررسی نکنید
لینک خراب به سند Gradle در مورد خطای MergeJavaResWorkAction
Gradle 8.1 به دلیل وجود .gradle/.android/analytics.settings، ذخیره سازی پیکربندی را مختل می‌کند.
AGP نباید از ProjectComponentIdentifier.projectPath بدون ProjectComponentIdentifier.build استفاده کند.
لطفاً گزارش‌گیری در سطح اطلاعات را برای AGP کاهش/حذف کنید "Analytics افزونه دیگری برای proto: ..."
[Gradle 8.4][upgrade] عملیات فایل در طول پیکربندی در ProcessJavaResTask، ذخیره سازی پیکربندی را مختل می‌کند.
API متغیر برای دریافت جدول نمادها (R.txt)
افزونه مستقل lint وابستگی gradleApi() را به درستی مدیریت نمی‌کند.
kDocs ضعیف روی کلاس‌ها/ویژگی‌های AGP. `VariantOutput.enable` پیشنهاد می‌دهد که باید با `VariantOutput.enable` جایگزین شود.
AGP 8.3.0-alpha02 نمی‌تواند پروفایل‌های انتشار را روی میزبان‌های ویندوز نصب کند
اعمال `android.enableDexingArtifactTransform=true`
[Gradle 8.4][upgrade] عدم موفقیت تست یکپارچه‌سازی پس از ارتقا به دلیل مدیریت فایل در مرحله پیکربندی
AGP 8.3.0-alpha-02 - `خطا: deserialize کردن مخزن منابع ذخیره شده ناموفق بود.`
[Gradle 8.4][upgrade] شکست تست یکپارچه‌سازی پس از ارتقا به دلیل مدیریت فایل در فاز پیکربندی TestLabBuildService
AGP 8.1.0 پس از اجرای تست‌های ابزار دقیق، برنامه را حذف نصب می‌کند - 7.4.2 این کار را نمی‌کند
تبدیل فایل APK منجر به خطایی در ListingFileRedirectTask می‌شود.
تبدیل مصنوع ASSETS به مکان‌های ورودی/خروجی خراب
android.experimental.r8.dex-startup-optimization=true را به صورت پیش‌فرض فعال کنید.
به API ترازبندی پیکربندی جدید Gradle مهاجرت کنید
کامپایل منبع هنگام تلاش کامپایلر کاتلین برای به‌روزرسانی به IDEA 21.3 با شکست مواجه می‌شود
تابع get() واکنشی با رابط برنامه‌نویسی کاربردی (API) مربوط به مصنوعات (artifacts API)
ویژگی AGP "android.lint.printStackTrace" را به حالت پایدار ارتقا دهید
AGP 8.1.0: ویژگی پویا: وابستگی ضمنی بین exportReleaseConsumerProguardFiles و extractProguardFiles باعث خطاهای کامپایل می‌شود
به نظر نمی‌رسد که `variant.unitTest.jniLibs.addGeneratedSourceDirectory` کاری انجام دهد.
به‌روزرسانی تجزیه‌گر XML مورد استفاده در AGP برای سازگاری با Gradle 8.4
بسته انتشار AGP 8.0.1 ابزار jacoco اجرا نمی‌شود
رگرسیون جوجه تیغی: دکمه اجرا چند ثانیه به تأخیر می‌افتد (در حال ایجاد مشخصات)
AGP 8.3.0-alpha11 فایل APK منتشر شده‌ای تولید می‌کند که هنگام راه‌اندازی با خطای android.content.res.Resources$NotFoundException از کار می‌افتد.
ویژگی AGP "android.lint.printStackTrace" را به حالت پایدار ارتقا دهید
درخواست ویژگی: ارتقاء com.android.build.api.extension.impl.CURRENT_AGP_VERSION به یک API عمومی
SDK Manager باید ارسال هرزنامه به اطلاعات لاگ در خروجی استاندارد (stdout) را متوقف کند.
DexArchiveBuilderTaskDelegate با ماژول کتابخانه resource only ناموفق بود.
افزونه سفارشی AGP7.4 نوع toTransform برای همه ورودی‌های تکراری: استثنای META-INF/MANIFEST.MF
پشتیبانی از تگ‌های جدید Manifest
لینک مربوط به «پروژه‌های جداشده» در تنظیمات استودیو به جای اشتباهی می‌رود.
لطفاً گزینه‌هایی برای گنجاندن منابع تولید شده در Javadoc و SourceJar ارائه دهید
نیاز به رفع سریع اختلاف بین compileSdk و وابستگی با minCompileSdkVersion دارم.
ابزارهای [Gradle]:overrideLibrary باید از ستاره (*) پشتیبانی کنند
رابط کاربری هنگام ویرایش مانیفست قفل می‌شود
تنظیم نسخه JaCoCo در AGP 8.2.0 امکان‌پذیر نیست
کار نصب افزونه اندروید Gradle نسخه ۸.۲.۰ در پروژه‌ای که از ویژگی‌های پویا استفاده می‌کند، با شکست مواجه می‌شود.
کار نصب افزونه اندروید Gradle نسخه ۸.۲.۰ در پروژه‌ای که از ویژگی‌های پویا استفاده می‌کند، با شکست مواجه می‌شود.
دکسر (D8)
[کتابخانه desugared] کتابخانه Desugared نسخه ۲.۱ با نسخه‌های قبلی R8 سازگار نیست.
بهینه‌سازی‌ها حتی فقط با D8 هم اجرا می‌شوند؟
پرز
[Lint] TranslucentViewDetector در تابع filterIncident از کار می‌افتد و باعث می‌شود lint نتیجه اشتباه تولید کند.
TranslucentViewDetector باید مقدار "back" را بپذیرد.
خطای Android Lint در کتابخانه KMP با `property 'variantInputs.name' does not have a configure value``
TranslucentViewDetector خط اشتباه را در مانیفست گزارش می‌دهد
lintDebug هنگام استفاده از وابستگی‌های پروژه، هشدارهای UseTomlInstead را به اشتباه گزارش می‌دهد.
مشکلات غیرمنتظره از پروژه دیگری که توسط Android Lint علامت‌گذاری شده است
بررسی LINT تشخیص مثبت کاذب منابع استفاده نشده در داخل اتصال و شنونده کلیک
نتوانست فایل jar بررسی lint سفارشی را بارگیری کند: Node را نمی‌توان به TreeNode تبدیل کرد
تابع lint visitAnnotationUsage برای استفاده از کلاس‌های حاشیه‌نویسی‌شده در تعریف متغیرها فراخوانی نمی‌شود.
Lint نسخه ۳۱.۰.۲ با خطای java.util.NoSuchElementException: Array is empty مواجه می‌شود.
هیچ هشدار Lint در مورد kotlin.text.MatchNamedGroupCollection#get(String) که نیاز به API 26 دارد، وجود ندارد.
lint:TypographyQuotes منفی‌های کاذب: بیش از یک آپاستروفِ گریزان نادیده گرفته می‌شوند
AGP 8.0.2 lint آشکارساز InvalidId مثبت کاذب
مشکلات LintError به خطوط پایه lint اضافه شد
Quickfix Lint کار نمی‌کند و منجر به خطای IDE می‌شود
شکست متناقض آزمایش به دلیل تحلیل جزئی
هایلایت نامعتبر یک هشدار که مثبت کاذب است
تابع lint visitAnnotationUsage برای استفاده از کلاس‌های حاشیه‌نویسی‌شده در تعریف متغیرها فراخوانی نمی‌شود.
پردازنده منابع بلااستفاده ممکن است فایل ساخت Gradle را حذف کند
بررسی lint در NewApi فیلد نهایی "isAtleastU() && otherCondition()" را نمی‌فهمد.
StackOverflow از `LintClient.getSdkHome`
اندروید استودیو / لینت به شما نمی‌گوید که چه زمانی وابستگی‌های «پلتفرم» قدیمی شده‌اند
اشکال: هیچ پیشنهادی برای به‌روزرسانی وابستگی Firebase-bom وجود ندارد
ساختار پروژه (و Gradle (?)) وابستگی‌های Firebase BOM را برای ارتقا به نسخه جدیدتر شناسایی نمی‌کند.
ادغام Lint
خطای lint مربوط به DuplicatePlatformClasses از وابستگی testImplementation
شرینکر (R8)
R8 بعد از ارتقا از AGP 8.0.2 به 8.1.0 کار نمی‌کند
isShrinkResources در نسخه‌های ۸.۳.۰-alpha11 تا alpha14 بیش از حد بهینه می‌شود.
خرابی SDK مربوط به R8 Flurry با AGP 8.2.0
اندروید - R8 باعث از کار افتادن زیرکلاس LinearLayoutManager می‌شود
R8 نسخه ۸.۲.۳۳، "java.lang.VerifyError: نوع نامناسب در پشته عملوند" پس از ارتقا، از کار افتاد.
[R8 8.3.21] R8 8.3.21 به میزان ۱.۵۷ مگابایت از R8 8.1.56 بزرگتر است.
[R8 8.3.21] R8 8.3.21 به میزان ۱.۵۷ مگابایت از R8 8.1.56 بزرگتر است.
تابع ()class.getInterfaces مقدار خالی برمی‌گرداند.
تست SimpleKotlinEnumUnboxingTest روی ربات kotlin_dev با شکست مواجه می‌شود