پلاگین 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 ارتقا دهید.