پلاگین Android Gradle 8.0.0 (آوریل 2023)

پلاگین Android Gradle 8.0.0 یک نسخه اصلی است که شامل انواع ویژگی ها و بهبودهای جدید است.

سازگاری

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

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

در زیر لیستی از پچ های منتشر شده برای اندروید Gradle Plugin 8.0 آمده است.

پلاگین Android Gradle 8.0.2 (مه 2023)

برای لیستی از اشکالات رفع شده در AGP 8.0.2، به مشکلات بسته Android Studio 2022.2.1 مراجعه کنید.

پلاگین Android Gradle 8.0.1 (مه 2023)

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

مسائل رفع شد
خطا: "No VersionRequirement با شناسه داده شده در جدول" پس از ارتقاء AGP 7.2.2 -> 7.4.0
R8 NullPointerException در markTypeAsLive AGP 7.4.1
[R8 4.0.53] خرابی تأیید کلاس سخت در اندروید 11

تغییر شکست: فضای نام در اسکریپت ساخت سطح ماژول مورد نیاز است

شما باید فضای نام را در فایل build.gradle.kts سطح ماژول به جای فایل مانیفست تنظیم کنید. می توانید با شروع AGP 7.3 از ویژگی namespace DSL استفاده کنید. برای کسب اطلاعات بیشتر، به تنظیم فضای نام مراجعه کنید.

هنگام مهاجرت به فضای نام DSL، از مسائل زیر آگاه باشید:

  • نسخه‌های قبلی AGP فضای نام آزمایشی را از فضای نام اصلی یا شناسه برنامه در برخی موارد به اشتباه استنتاج می‌کنند. دستیار ارتقاء 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 به طور پیش فرض پشتیبانی از RenderScript را فعال نمی کند. شما باید این گزینه را با استفاده از 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 keep را اضافه کنید. برای جزئیات بیشتر، به هشدارهای کلاس گمشده در کوچک کننده R8 مراجعه کنید.
android.testConfig.useRelativePath true وقتی پشتیبانی از استفاده از منابع، دارایی‌ها و مانیفست‌های Android در تست‌های واحد فعال است، AGP 8.0 یک فایل test_config.properties ایجاد می‌کند که فقط شامل مسیرهای نسبی است. این تضمین می‌کند که تست‌های واحد اندروید همیشه می‌توانند از حافظه نهان ساخت Gradle استفاده کنند.
android.useNewJarCreator true AGP هنگام ایجاد فایل های JAR از کتابخانه Zipflinger برای بهبود عملکرد ساخت استفاده می کند.
android.bundletool.includeRepositoriesInDependencyReport true وقتی افزودن اطلاعات وابستگی SDK در AAB و APK فعال است، AGP 8.0 همچنین فهرستی از مخازن پروژه را به این اطلاعات اضافه می کند. برای کسب اطلاعات بیشتر، به اطلاعات وابستگی کنسول Play مراجعه کنید.
android.enableArtProfiles true نمایه های پایه اکنون همیشه تولید می شوند. برای جزئیات بیشتر به پروفایل های پایه مراجعه کنید.
android.enableNewResourceShrinker true به طور پیش‌فرض از اجرای جدید شینکر منابع استفاده کنید. کوچک کننده منبع جدید شامل پشتیبانی از ویژگی های پویا است.
android.enableSourceSetPathsMap true برای محاسبه نگاشت مسیر منابع نسبی استفاده می شود، بنابراین سازه های Gradle اغلب به روز می شوند.
android.cacheCompileLibResources true منابع کتابخانه کامپایل شده اکنون می توانند به صورت پیش فرض ذخیره شوند زیرا Gradle فایل های منابع را نسبت به محل پروژه ردیابی می کند. نیاز به فعال شدن android.enableSourceSetPathsMap دارد.
android.disableAutomaticComponentCreation true AGP 8.0 به طور پیش فرض هیچ SoftwareComponent ایجاد نمی کند. در عوض AGP SoftwareComponents را فقط برای انواعی که برای انتشار با استفاده از DSL منتشر شده پیکربندی شده اند ایجاد می کند.

پرچم پایدار جدید برای نمایه اجرا

AGP شامل پرچم جدید android.settings.executionProfile است. از این پرچم برای لغو نمایه اجرای پیش فرض از SettingsExtension استفاده کنید. برای کسب اطلاعات بیشتر، به اسناد افزونه تنظیمات مراجعه کنید.

برای پیش نمایش پرچم های آزمایشی، به یادداشت های انتشار پیش نمایش مراجعه کنید.

تخصیص دارایی تنبل Kotlin پشتیبانی نمی شود

اگر از Gradle's Kotlin DSL برای اسکریپت های ساخت خود استفاده می کنید، توجه داشته باشید که Android Studio و AGP 8.0 از تخصیص ویژگی آزمایشی با استفاده از عملگر = پشتیبانی نمی کنند. برای اطلاعات بیشتر درباره این ویژگی، به یادداشت‌های انتشار و مستندات مراجعه کنید.

دسته بندی وظایف آنالایزر را بسازید

با شروع Android Studio Flamingo، Build Analyzer یک نمای پیش‌فرض جدید برای کارهایی دارد که بر مدت زمان ساخت تأثیر می‌گذارند. اگر پروژه شما از AGP 8.0 یا بالاتر استفاده می کند، به جای نمایش وظایف به صورت جداگانه، Build Analyzer آنها را بر اساس دسته بندی گروه بندی می کند. به عنوان مثال، وظایف مختص به Android Resources، Kotlin یا Dexing با هم گروه بندی می شوند و سپس بر اساس مدت زمان ساخت مرتب می شوند. این امر باعث می شود که بدانیم کدام دسته بیشترین تأثیر را در زمان ساخت دارد. با گسترش هر دسته، لیستی از وظایف مربوطه نمایش داده می شود. برای نمایش وظایف به صورت جداگانه، بدون گروه بندی، از منوی کشویی گروه استفاده کنید.

دسته بندی وظایف آنالایزر را بسازید.

افزونه تنظیمات جدید

AGP 8.0.0-alpha09 افزونه تنظیمات جدید را معرفی می کند. افزونه تنظیمات به شما امکان می‌دهد پیکربندی‌های سراسری - تنظیماتی که برای همه ماژول‌ها اعمال می‌شود - را در یک مکان متمرکز کنید، بنابراین نیازی به کپی و پیست کردن تنظیمات در چندین ماژول ندارید. علاوه بر این، می‌توانید از افزونه تنظیمات برای ایجاد نمایه‌های اجرای ابزار یا دستورالعمل‌های مختلف برای نحوه اجرای یک ابزار استفاده کنید و بین آن‌ها جابه‌جا شوید.

برای استفاده از افزونه تنظیمات، افزونه را در فایل settings.gradle اعمال کنید:

apply plugin 'com.android.settings'

متمرکز کردن پیکربندی های جهانی

برای پیکربندی تنظیمات جهانی، از بلوک android جدید در فایل settings.gradle استفاده کنید. در اینجا یک مثال است:

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"
  }
}

برای لغو نمایه پیش فرض، با استفاده از ویژگی android.experimental.settings.executionProfile در فایل gradle.properties ، نمایه دیگری را انتخاب کنید:

android.experimental.settings.executionProfile=high

همچنین می‌توانید این ویژگی را با استفاده از خط فرمان تنظیم کنید، که به شما امکان می‌دهد گردش‌های کاری مختلف را تنظیم کنید. به عنوان مثال، اگر یک گردش کار یکپارچه سازی مداوم دارید، می توانید از خط فرمان برای تغییر نمایه اجرا بدون نیاز به تغییر فایل settings.gradle استفاده کنید:

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

JDK 17 برای اجرای AGP 8.0 مورد نیاز است

هنگامی که از پلاگین Android Gradle 8.0 برای ساخت برنامه خود استفاده می کنید، اکنون برای اجرای Gradle به JDK 17 نیاز است. Android Studio Flamingo JDK 17 را بسته‌بندی می‌کند و Gradle را برای استفاده از آن به‌طور پیش‌فرض پیکربندی می‌کند، به این معنی که اکثر کاربران اندروید استودیو نیازی به تغییر پیکربندی در پروژه‌های خود ندارند.

اگر نیاز دارید نسخه JDK مورد استفاده توسط AGP را در Android Studio به صورت دستی تنظیم کنید ، باید از JDK 17 یا بالاتر استفاده کنید.

هنگام استفاده از AGP مستقل از Android Studio، نسخه JDK را با تنظیم متغیر محیطی JAVA_HOME یا گزینه خط فرمان -Dorg.gradle.java.home در فهرست نصب JDK 17 ارتقا دهید.

مسائل رفع شد

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

رفع مشکلات
افزونه Gradle اندروید
خرابی ساختگی در کار MergeResources
JavaPluginConvention و HasConvention منسوخ شده است
مکان فایل اشتباه و ناسازگار برای API تبدیل جدید
افزونه Gradle Android نباید از تابع منسوخ GUtil.toWords (رشته) استفاده کند.
افزونه Gradle Android نباید از تابع منسوخ ConfigureUtil.configure (بستن، هدف) استفاده کند.
تست های AGP را برای استفاده از KGP 1.7.20-بتا به روز کنید
Gradle 7.4 با شکست مواجه شد (نمی‌توان نمونه‌ای از AnalyticsService ایجاد کرد)
«ثابت enum ناشناخته» جدید از javac در AGP 7.4.0-alpha09
پیکربندی MergeGeneratedProguardFilesCreationAction کند است حتی با ذخیره کردن پیکربندی در حافظه پنهان
[AGP] افزودن فهرست منبع تولید شده به مدل IDE (Variant API)
JavaPluginConvention و HasConvention منسوخ شده است
به طور پیش فرض هشدارهای نادیده گرفته شده را به R8 اضافه نکنید
هنگامی که فایل های محافظ وجود ندارند هشدار دهید
AGP 7.3.0 همگام سازی gradle را برای پروژه های پلت فرم gradle می شکند
کتابخانه apksig: ApkVerifier$Result.getV4SchemeSigners() خصوصی علامت گذاری شده است
اگر پوشش فعال نیست، ایجاد پیکربندی androidJacocoAnt را متوقف کنید
استفاده از @IntDef در یک جزء کتابخانه، annotations.zip را در aar ایجاد نمی کند
قادر به یافتن سوپر نوع رایج برای و
یک نسخه ویژگی gradle LINT_PRINT_STACKTRACE=true اضافه کنید
مصنوعات پیش ساخته قدیمی در حال بسته بندی در AAR
مهاجرت از ویژگی مقصد به ویژگی outputLocation برای رسیدگی به هشدار منسوخ شدن و آماده شدن برای Gradle 9.0
هنگام تنظیم وظیفه JavaCompile، پرچم «--release» را در نظر بگیرید
[AGP-7.3.0-beta03] ShrinkResourcesNewShrinkerTask هنگامی که یک خط خالی پس از اعلان xml وجود داشته باشد ناموفق است
هدف lintVital به طور پیش فرض در یک نوع اشکال زدایی اجرا می شود
هنگامی که فایل های محافظ وجود ندارند هشدار دهید
AGP سعی می کند kotlinOptions.freeCompilerArgs را در مرحله اجرای کار اضافه کند
همگام سازی Gradle ناموفق بود: همگام سازی انجام نشد: دلیل ناشناخته
DependencyReportTask با کش پیکربندی ناسازگار است
نادیده گرفتن منابع با resValue در build.gradle منجر به خطا: منابع تکراری می شود
نوع ساخت «اشکال‌زدایی» دارای کلید امضای پیش‌فرض است، دیگران فاقد کلید امضا هستند
استفاده از ویژگی های پویا و کاهش منابع باعث خرابی زمان اجرا می شود
نوع ساخت «اشکال‌زدایی» دارای کلید امضای پیش‌فرض است، دیگران فاقد کلید امضا هستند
فهرست منبع تولید شده به عنوان فهرست جاوا در ارائه دهنده منبع اصلی مدل lint فهرست شده است
Gradle 8.0-milestone-2 باعث استثنا در AGP می شود
بهینه سازی ادغام مانیفست برای برنامه ها و کتابخانه
gradle-settings-api را به نسل javadoc اضافه کنید
«ثابت enum ناشناخته» جدید از javac در AGP 7.4.0-alpha09
AGP 7.4.0-alpha09 بیلدهایی تولید می کند که در Firebase App Distribution آپلود نمی شوند
lint.xml در ماژول ها برای بررسی به روز وظایف lint در نظر گرفته نمی شود
Android Gradle Plugin 7.0+ و مشکل تست‌های Android: منبع پیدا نشد: id
configureCMakeDebug با استثنای اشاره گر تهی به طور ورقه ای خراب می شود
IllegalAccessError در ارتقای پروژه به AS2022.2.1.5، FireBasePerfPlugin
همگام‌سازی با خطای مرموز "مجموعه حاوی هیچ عنصر منطبق با محمول نیست."
Instrumentation API وابستگی های فایل محلی را تغییر نمی دهد
خطای «AnnotationProcessorOptions.arguments هستند» هنگام به‌روزرسانی به نسخه 7.4 بتا 1
پلاگین های عمومی Gradle را به gradle-api منتقل کنید و BasePlugin.getExtension را حذف کنید
r8.jvmArgs استفاده نمی شود
JDK17 به عنوان نسخه حداقل مورد نیاز برای AGP
AGP 8.0.0 A8 نمایه های پایه را می شکند
در پیام CheckAarMetadataTask در AGP 8.0 'compileSdkVersion' را به 'compileSdk' تغییر دهید
AGP 7.4.0-rc01 Variant API را با "پرس و جو از مقدار نگاشت نقشه (ارائه دهنده(java.util.Set)) قبل از اتمام کار "..." پشتیبانی نمی شود" می شکند.
مشکلات «com.android.build.gradle.tasks.ShaderCompile» با کش پیکربندی
افزودن به منابع جاوا با استفاده از APIهای AGP، کش پیکربندی را خراب می کند
پلاگین Lint بخشی از gradle-api نیست
DexingFileDependenciesTask.outputKeepRules یک دایرکتوری است اما به عنوان OutputFile علامت گذاری شده است.
ارتقاء به AGP 7.4 منجر به خطای StackOverflow می شود
processDebugUnitTestManifest با متغیرهای مانیفست برای انواع آزمایشی شکست می خورد
Lint به اطلاعات مجموعه های منبع بدون وابستگی دسترسی پیدا می کند
خطای ساخت به سطح API 34 اشاره دارد که وجود ندارد
"توصیه می کنیم از یک پلاگین جدیدتر Android Gradle استفاده کنید" زمانی که پلاگین جدیدتری وجود ندارد
android.injected.testOnly=false کار نمی کند
دکسر (D8)
خطای ادغام Dex مربوط به مصنوعی جهانی پس از ارتقاء AS Canary 6 به 7
کتابخانه ابرداده Kotlin را به نسخه 0.6.0 به روز کنید
به نظر می رسد راه حل برای JDK-8272564 در سطح API 28-30 لازم باشد
لینت
بررسی لینت ResourceType برای منابع کاتلین کار نمی کند
VersionChecks بررسی های محدوده Kotlin را انجام نمی دهد
مثبت کاذب برای InlinedApi هنگام بسته بندی
در مورد openInputStream بازیابی مثبت کاذب پر کنید
[BuildTool/Lint] ویژگی سازنده ChecksSdkIntAtLeast
Lint: ادغام PartialResults به درستی کار نمی کند
Android Studio نسخه مشخص شده را به‌طور نامناسب به‌عنوان قدیمی علامت‌گذاری می‌کند.
AndroidDeprecationInspection.DeprecationFilter EP هرگز در فایل android-plugin.xml ثبت نمی شود
توضیح بررسی پرزهای AccessibilityDetector قدیمی است
بررسی های Lint SDK_INT باید متغیرهای محلی موقت را درک کنند
خطا هنگام جایگزینی TestMode.TYPE_ALIAS نوع تابع با typealias
اشکال: وقتی ObjectAnimator خارج از بلوک کد فعلی ایجاد می شود، هشدارهای مثبت کاذب در مورد شروع نکردن آن شماره 38 وجود دارد.
Lint: NPE به دلیل درخواست نمونه Application در حالت mergeOnly
قانون پرز NonConstantResourceId نمی تواند برای اختصاص مقادیر ثابت از شناسه منبع شناسایی کند
عدم نمایش خطا در شناسه view
عدم سریال سازی کش منابع لینت منجر به خطای پرز می شود (اما باید یک هشدار باشد)
AGP Flamingo Alpha 8 Lint NewApi Desugar Regression
TypedArray#close (API 31) قند زدایی نشده است اما AS هنگام استفاده در منابع try-with اخطار نمایش نمی دهد
Lint کست های معتبر را برای گیرنده های تماس بررسی نمی کند
Lint فقط قالب‌های ایمن را برای رابط‌هایی که مستقیماً پیاده‌سازی شده‌اند، بررسی می‌کند، نه آنهایی که به ارث رسیده‌اند
ادغام لینت
فایل پایه در حال حاضر یک ورودی و یک خروجی از وظایف Lint است
کوچک کننده (R8)
خطای NPE / ادعا در تأیید کننده قاب CF
رگرسیون پس از حذف حافظه پنهان جستجوی فیلد
«:app:minifyVariantWithR8» یک NullPointerException را در AGP 7.4.0-beta02 پرتاب می کند.
R8: ClassNotFoundException وقتی -allowaccessmodification
پشتیبانی از گیرنده های زمینه را در ابرداده اضافه کنید
java.lang.VerifyError: تأییدکننده کلاس را رد کرد androidx.compose.ui.graphics.colorspace.o: void androidx.compose.ui.graphics.colorspace.o. (java.lang.Object) تأیید نشد: void androidx.compose.ui.graphics.colorspace.o. (java.lang.Object): [0x0] نمی تواند به فیلد نمونه دسترسی پیدا کند java.lang.Object androidx.compose.ui.graphics.colorspace.na از شی نوع Precise Reference: androidx.compose.ui.graphics.colorspace.o
AGP 7.4.0/7.3.1 - تلاش برای قرار دادن یک عمل در لیست کاری enqueuer غیر قابل فشار
کوچک کردن کد رندر اسکریپت: کاهش عملکرد بسیار زیاد هنگام ارتقاء AGP از 7.3.1 به 7.4.0

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

رفع مشکلات
کوچک کننده (R8)
خطا: "No VersionRequirement با شناسه داده شده در جدول" پس از ارتقاء AGP 7.2.2 -> 7.4.0
R8 NullPointerException در markTypeAsLive AGP 7.4.1
[R8 4.0.53] خرابی تأیید کلاس سخت در اندروید 11

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

رفع مشکلات
کوچک کننده (R8)
R8 در حین ساخت Compose با ArrayIndexOutOfBoundsException شکست می خورد
VerifyError: وقتی از R8 با Kotlin 1.8.20 استفاده می‌کنید، تأییدکننده کلاس را رد کرد
R8 در AGP 8 سرویس Google Fit را خراب می کند
از جمله اطلاعات فایل منبع با نام‌های باقی‌مانده که روی نام‌های ورودی همپوشانی دارند، به درستی نمایش داده نمی‌شود