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

افزونه اندروید Gradle 8.3.0 یک نسخه اصلی است که شامل انواع ویژگی ها و بهبودهای جدید است.

سازگاری

حداکثر سطح API که افزونه Android Gradle 8.3 پشتیبانی می کند، سطح API 34 است. در اینجا سایر اطلاعات سازگاری وجود دارد:

حداقل نسخه نسخه پیش فرض یادداشت ها
گریدل 8.4 8.4 برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید.
ابزارهای ساخت SDK 34.0.0 34.0.0 ابزارهای ساخت SDK را نصب یا پیکربندی کنید .
NDK N/A 25.1.8937393 نسخه دیگری از NDK را نصب یا پیکربندی کنید .
JDK 17 17 برای کسب اطلاعات بیشتر، به تنظیم نسخه JDK مراجعه کنید.

در زیر ویژگی های جدید پلاگین Gradle اندروید 8.3 آمده است.

پچ منتشر می شود

در زیر لیستی از پچ های منتشر شده در Android Studio Iguana و Android Gradle پلاگین 8.3 است.

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

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

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

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

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

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

تکمیل کد و پیمایش

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

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

ادغام با گفتگوی ساختار پروژه

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

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

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

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

مسائل و محدودیت های شناخته شده

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

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

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

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

  • Firebase Assistant وابستگی ها را مستقیماً در اسکریپت های ساخت اضافه می کند: دستیار Firebase وابستگی ها را مستقیماً به اسکریپت های ساخت شما به جای کاتالوگ نسخه اضافه می کند.

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

  • گفتگوی Project Structure در Android Studio چندین فایل کاتالوگ را در صورتی که در پوشه root gradle باشند نشان می دهد، اما کاتالوگ های یک ساخت ترکیبی را نشان نمی دهد. به عنوان مثال، اگر دو فایل کاتالوگ دارید - یکی برای برنامه خود و دیگری برای ساخت ترکیبی - گفتگوی Project Structure فقط فایل کاتالوگ برنامه را نشان می دهد. می توانید از یک ساخت ترکیبی استفاده کنید، اما باید فایل TOML آن را مستقیماً ویرایش کنید.

بینش های اضافی SDK: مسائل مربوط به خط مشی

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

پشتیبانی از نسخه CompileSdk Android Studio

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

رفتار پرز تغییر می کند

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

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

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

برای خاموش کردن کاهش دقیق منابع، android.enableNewResourceShrinker.preciseShrinking را در فایل gradle.properties پروژه خود روی false قرار دهید.

مسائل رفع شد

پلاگین اندروید Gradle 8.3.0

رفع مشکلات
پلاگین اندروید Gradle
ساخت کش برای کار PackageForUnitTest اضافی است
[AGP 8.1.0] اگر هر دو splits.abi.isEnable و testOptions.unitTests.isIncludeAndroidResources درست باشند، آزمایش ./gradlew با "Unable to find output manifest" ناموفق است.
ساختمان مدل AGP با ساختارهای کامپوزیت گرید تو در تو با شکست مواجه می شود
کاهش دهنده منابع شناسه های منبع را مخدوش می کند و منجر به خرابی زمان اجرا می شود
بررسی نسخه Minimum Gradle در ساخت دوم و بعد از آن اجرا نمی شود
پس از به‌روزرسانی AGP از 8.0.2 به 8.1.0، برای کار «:app:mergeReleaseClasses» اجرا نشد.
[Gradle 8.4] [ارتقا] شکست تست یکپارچه سازی پس از ارتقا به دلیل استفاده از ویژگی منسوخ شده در افزونه kotlin gradle
وجود فایل های همپوشانی مانیفست را در مرحله پیکربندی بررسی نکنید
پیوند شکسته به Gradle doc در مورد خطای MergeJavaResWorkAction
Gradle 8.1 حافظه پنهان پیکربندی را به دلیل .gradle/.android/analytics.settings شکست می‌دهد.
AGP نباید از ProjectComponentIdentifier.projectPath بدون ProjectComponentIdentifier.build استفاده کند
لطفاً گزارش‌گیری در سطح اطلاعات را برای AGP کاهش یا حذف کنید "Analytics other plugin to proto: ..."
[Gradle 8.4] [ارتقا] عملیات فایل در حین پیکربندی در ProcessJavaResTask ذخیره پیکربندی را به هم می زند
متغیر API برای دریافت جدول نمادها (R.txt)
پلاگین مستقل lint وابستگی ()gradleApi را به درستی مدیریت نمی کند
kDocs ضعیف در کلاس‌ها/ویژگی‌های AGP. "VariantOutput.enable" پیشنهاد می کند که باید با "VariantOutput.enable" جایگزین شود
AGP 8.3.0-alpha02 نمی تواند نمایه های انتشار را روی هاست ویندوز نصب کند
«android.enableDexingArtifactTransform=true» را اجرا کنید
[Gradle 8.4] [ارتقا] شکست تست یکپارچه سازی پس از ارتقا به دلیل مدیریت فایل در مرحله پیکربندی
AGP 8.3.0-alpha-02 - `خطا: مخزن منبع ذخیره شده از فهرست خارج نشد.`
[Gradle 8.4] [ارتقا] شکست تست ادغام پس از ارتقاء به دلیل مدیریت فایل در مرحله پیکربندی TestLabBuildService
AGP 8.1.0 برنامه را پس از اجرای تست های ابزاری حذف نصب می کند - 7.4.2 این کار را انجام نمی دهد
تغییر شکل یک APK منجر به خطا در ListingFileRedirectTask می شود
تبدیل آرتیفکت ASSETS مکان های ورودی/خروجی شکسته ای را می دهد
تبلیغ android.experimental.r8.dex-startup-optimization=true to default
به API ترازبندی پیکربندی Gradle جدید مهاجرت کنید
هنگامی که کامپایلر Kotlin سعی می کند به IDEA 21.3 به روز شود، کامپایل منبع با شکست مواجه می شود
Reactive get() با آرتیفکت 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 باید ارسال هرزنامه اطلاعات گزارش به stdout را متوقف کند
DexArchiveBuilderTaskDelegate با ماژول کتابخانه فقط منبع ناموفق بود
نوع پلاگین سفارشی AGP7.4 برای تبدیل برای همه ورودی های تکراری: استثنا META-INF/MANIFEST.MF
پشتیبانی از برچسب های جدید Manifest،
پیوند "پروژه های جدا شده" در تنظیمات استودیو به مکان اشتباهی می رود.
لطفاً گزینه هایی برای گنجاندن منابع تولید شده در Javadoc و SourceJar ارائه دهید
به رفع سریع اختلاف بین compileSdk و وابستگی با minCompileSdkVersion نیاز دارید
ابزار [Gradle]: OverrideLibrary باید از ستاره (*) پشتیبانی کند
هنگام ویرایش مانیفست، رابط کاربری ثابت می شود
تنظیم نسخه JaCoCo در AGP 8.2.0 ممکن نیست
نصب پلاگین Android Gradle 8.2.0 در پروژه ای که از ویژگی های پویا استفاده می کند با شکست مواجه می شود
نصب پلاگین Android Gradle 8.2.0 در پروژه ای که از ویژگی های پویا استفاده می کند با شکست مواجه می شود
دکسر (D8)
[کتابخانه desugared] نسخه 2.1 کتابخانه Desugared با نسخه های قبلی R8 سازگار نیست
بهینه سازی هایی که حتی فقط با D8 اجرا می شوند؟
لینت
[Lint] TranslucentViewDetector در عملکرد filterIncident خراب می شود و باعث می شود که پرز نتیجه اشتباهی ایجاد کند.
TranslucentViewDetector باید مقدار "back" را بپذیرد
Android Lint در یک کتابخانه KMP با «ویژگی «variantInputs.name» مقدار پیکربندی‌شده ندارد.
TranslucentViewDetector خط اشتباهی را در مانیفست گزارش می‌کند
lintDebug به اشتباه هشدارهای UseTomlInstead را هنگام استفاده از وابستگی های پروژه گزارش می کند
مشکلات غیرمنتظره از پروژه دیگری که توسط Android Lint پرچم گذاری شده است
LINT تشخیص مثبت کاذب منبع استفاده نشده را در داخل صحافی بررسی کرده و شنونده را کلیک کنید
فایل jar بررسی لینت سفارشی بارگیری نشد: گره را نمی توان به TreeNode فرستاد
Lint visitAnnotationUsage برای استفاده از کلاس های حاشیه نویسی در اعلان های متغیر فراخوانی نشده است
Lint 31.0.2 با java.util.NoSuchElementException خراب می شود: آرایه خالی است.
هیچ هشداری درباره kotlin.text.MatchNamedGroupCollection#get(String) که به API 26 نیاز دارد وجود ندارد
lint: تایپوگرافی به نگاتیوهای نادرست اشاره می کند: بیش از یک آپاستروف فرار نادیده گرفته می شود
AGP 8.0.2 lint آشکارساز InvalidId مثبت کاذب
مشکلات LintError به خطوط پایه پرز اضافه شد
Quickfix Lint کار نمی کند و منجر به خطای IDE می شود
شکست تست ناسازگار به دلیل تجزیه و تحلیل جزئی
هایلایت نامعتبر هشداری که مثبت کاذب است
Lint visitAnnotationUsage برای استفاده از کلاس های حاشیه نویسی در اعلان های متغیر فراخوانی نشده است
پردازشگر منابع استفاده نشده ممکن است فایل ساخت Gradle را حذف کند
بررسی لینت NewApi فیلد نهایی "isAtleastU() && otherCondition()" را درک نمی کند
StackOverflow از `LintClient.getSdkHome`
Android Studio / Lint به شما نمی گوید که چه زمانی وابستگی های "پلتفرم" قدیمی هستند
اشکال: پیشنهادی برای به‌روزرسانی وابستگی Firebase-bom وجود ندارد
ساختار پروژه (و Gradle (؟)) وابستگی های Firebase BOM را برای ارتقاء به نسخه جدیدتر کشف نمی کند.
ادغام لینت
خطای پرز DuplicatePlatformClasses از وابستگی testImplementation
کوچک کننده (R8)
R8 بعد از ارتقا از AGP 8.0.2 به 8.1.0 کار نمی کند
isShrinkResources در 8.3.0-alpha11 به alpha14 بیش از حد بهینه می شود.
خرابی R8 Flurry SDK با AGP 8.2.0
Android - R8 باعث از کار افتادن زیر کلاس LinearLayoutManager می شود
R8 v8.2.33، "java.lang.VerifyError: نوع بد در پشته عملوند" پس از ارتقاء خراب می شود
[R8 8.3.21] R8 8.3.21 1.57 مگابایت بزرگتر از R8 8.1.56 است
[R8 8.3.21] R8 8.3.21 1.57 مگابایت بزرگتر از R8 8.1.56 است
class.getInterfaces() خالی برمی گردد
تست SimpleKotlinEnumUnboxingTest در ربات kotlin_dev ناموفق بود

پلاگین اندروید Gradle 8.3.1

رفع مشکلات
پلاگین اندروید Gradle
مشکل رسیدگی به ورودی های افزایشی MergeJavaResourcesTask
ادغام لینت
Lint نمی تواند انواع مجموعه های منبع خواهر و برادر را در AGP 8.3.0-rc02 حل کند

پلاگین اندروید Gradle 8.3.2

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