این صفحه حاوی یادداشتهای انتشار برای نسخههای پیشنمایش پلاگین Android Gradle (AGP) است.
پلاگین اندروید Gradle 9.0
پلاگین Android Gradle 9.0 نسخه اصلی جدید AGP است و تغییرات API و رفتار را به همراه دارد.
برای به روز رسانی به پلاگین اندروید Gradle 9.0.0-alpha05 از افزونه Android Gradle Upgrade Assistant در اندروید استودیو Narwhal 4 Feature Drop | 2025.1.4.
دستیار ارتقاء AGP به حفظ رفتارهای موجود هنگام ارتقاء پروژه در صورت لزوم کمک می کند و به شما امکان می دهد پروژه خود را برای استفاده از AGP 9.0 ارتقا دهید، حتی اگر آماده پذیرش همه پیش فرض های جدید در AGP 9.0 نباشید.
سازگاری
حداکثر سطح API Android که افزونه Android Gradle 9.0.0-alpha05 پشتیبانی می کند، سطح API 36 است.
افزونه Android Gradle 9.0.0-alpha05 به Gradle 9.0.0 نیاز دارد.
حداقل نسخه | نسخه پیش فرض | یادداشت ها | |
---|---|---|---|
گریدل | 9.0.0 | 9.0.0 | برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید. |
ابزارهای ساخت SDK | 36.0.0 | 36.0.0 | ابزارهای ساخت SDK را نصب یا پیکربندی کنید . |
NDK | N/A | 28.2.13676358 | نسخه دیگری از NDK را نصب یا پیکربندی کنید . |
JDK | 17 | 17 | برای کسب اطلاعات بیشتر، به تنظیم نسخه JDK مراجعه کنید. |
کلاسهای DSL android
اکنون فقط رابطهای عمومی جدید را پیادهسازی میکنند
در طول چندین سال گذشته، ما رابطهای جدیدی را برای DSL و API خود معرفی کردهایم تا بهتر کنترل کنیم کدام APIها عمومی هستند. نسخههای AGP 7.x و 8.x هنوز از انواع قدیمی DSL (بهعنوان مثال BaseExtension
) استفاده میکردند که رابطهای عمومی جدید را نیز پیادهسازی میکردند تا با پیشرفت کار روی اینترفیسها، سازگاری را حفظ کنند.
AGP 9.0 به طور انحصاری از رابط های DSL جدید ما استفاده می کند و پیاده سازی ها به انواع جدیدی تغییر کرده اند که کاملاً پنهان هستند. این تغییر همچنین دسترسی به API قدیمی، منسوخ شده را حذف می کند.
برای به روز رسانی به AGP 9.0، ممکن است لازم باشد موارد زیر را انجام دهید:
- جابجایی به Kotlin داخلی : افزونه
org.jetbrains.kotlin.android
با DSL جدید سازگار نیست. پروژه های KMP را به پلاگین کتابخانه Android Gradle برای KMP تغییر دهید: استفاده از افزونه
org.jetbrains.kotlin.multiplatform
در همان پروژه فرعی Gradle به عنوان افزونه هایcom.android.library
وcom.android.application
با DSL جدید سازگار نیست.فایلهای ساخت خود را بهروزرسانی کنید: در حالی که تغییر رابطها به منظور حفظ DSL تا حد امکان مشابه است، ممکن است تغییرات کوچکی رخ دهد.
منطق ساخت سفارشی خود را برای ارجاع به DSL و API جدید به روز کنید: هر ارجاعی به DSL داخلی را با رابط های DSL عمومی جایگزین کنید. در بیشتر موارد این جایگزینی یک به یک خواهد بود. هر گونه استفاده از
applicationVariants
و API های مشابه را باandroidComponents
API جدید جایگزین کنید. این ممکن است پیچیده تر باشد، زیراandroidComponents
API به گونه ای طراحی شده است که پایدارتر باشد تا افزونه ها را برای مدت طولانی تری سازگار نگه دارد. برای نمونه دستور العمل های Gradle ما را بررسی کنید.بهروزرسانی افزونههای شخص ثالث: برخی از افزونههای شخص ثالث ممکن است همچنان به رابطها یا APIهایی وابسته باشند که دیگر در معرض نمایش نیستند. به نسخه هایی از آن پلاگین هایی که با AGP 9.0 سازگار هستند مهاجرت کنید.
اگر به AGP 9.0 به روز رسانی کنید و پیام خطای زیر را مشاهده کنید، به این معنی است که پروژه شما هنوز به برخی از انواع قدیمی ارجاع می دهد:
java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension
اگر توسط افزونههای شخص ثالث ناسازگار مسدود شدهاید، میتوانید انصراف دهید و پیادهسازیهای قدیمی را برای DSL و همچنین نسخه قدیمی API را پس بگیرید. در حین انجام این کار، رابط های جدید نیز در دسترس هستند، و همچنان می توانید منطق ساخت خود را به API جدید به روز کنید. برای انصراف، این خط را در فایل gradle.properties
خود قرار دهید:
android.newDsl=false
همچنین می توانید قبل از ارتقاء به AGP 9.0 ارتقاء به API های جدید را شروع کنید. رابط های جدید برای بسیاری از نسخه های AGP وجود داشته است و بنابراین می توانید ترکیبی از جدید و قدیمی داشته باشید. اسناد مرجع AGP API سطح API را برای هر نسخه AGP و زمانی که هر کلاس، متد و فیلد اضافه شده است را نشان می دهد.
در طول مرحله آلفای 9.0، با نویسندگان افزونه ها تماس می گیریم تا به آنها کمک کنیم تا پلاگین هایی را که کاملاً با حالت های جدید سازگار هستند، تطبیق داده و منتشر کنند، و دستیار ارتقاء AGP را در Android Studio بهبود می بخشد تا شما را در انتقال راهنمایی کند.
اگر متوجه شدید که DSL یا Variant API جدید قابلیت ها یا ویژگی هایی ندارد، لطفاً در اسرع وقت مشکل خود را مطرح کنید.
کاتلین داخلی
افزونه Android Gradle 9.0 شامل پشتیبانی داخلی از کامپایل Kotlin است که جایگزین افزونه Kotlin به طور جداگانه اعمال شده است. این امر ادغام با AGP را ساده می کند، از استفاده از API های منسوخ اجتناب می کند و در برخی موارد عملکرد را بهبود می بخشد.
افزونه اندروید Gradle 9.0 به پلاگین Kotlin Gradle 2.2.10 وابستگی زمان اجرا دارد که حداقل نسخه مورد نیاز برای پشتیبانی داخلی کاتلین است.
میتوانید با تنظیم android.builtInKotlin=false
از Kotlin داخلی انصراف دهید.
اگر از Kotlin داخلی انصراف داده اید و همچنین نیاز به استفاده از نسخه قدیمی پلاگین Kotlin Gradle دارید، می توانید به اجبار آن را کاهش دهید:
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("2.0.0") } // or another version that you want to use
}
}
}
تغییر رفتار
پلاگین Android Gradle 9.0 دارای رفتارهای جدید زیر است:
رفتار | توصیه |
---|---|
افزونه اندروید Gradle 9.0 به طور پیش فرض از NDK نسخه r28c استفاده می کند. | در نظر بگیرید که نسخه NDK را که می خواهید به طور صریح استفاده کنید، مشخص کنید. |
افزونه Android Gradle 9.0 به طور پیشفرض از مصرفکنندگان یک کتابخانه میخواهد از نسخه SDK کامپایل یکسان یا بالاتر استفاده کنند. | هنگام استفاده از کتابخانه از SDK کامپایل یکسان یا بالاتر استفاده کنید. اگر این امکان پذیر نیست، یا می خواهید به مصرف کنندگان کتابخانه ای که منتشر می کنید زمان بیشتری برای جابجایی بدهید، AarMetadata.minCompileSdk به صراحت تنظیم کنید. |
AGP 9.0 شامل بهروزرسانیهای پیشفرض ویژگیهای Gradle زیر است. این به شما این امکان را می دهد که رفتار AGP 8.13 را هنگام ارتقاء حفظ کنید:
اموال | تابع | از AGP 8.13 به AGP 9.0 تغییر دهید | توصیه |
---|---|---|---|
android.newDsl | از رابط های DSL جدید بدون افشای پیاده سازی های قدیمی بلوک android استفاده کنید.این همچنین به این معنی است که API نوع قدیمی مانند android.applicationVariants دیگر در دسترس نیست. | false → true | می توانید با تنظیم android.newDsl=false انصراف دهید.هنگامی که همه پلاگین ها و منطق ساختی که پروژه شما استفاده می کند سازگار است، انصراف را حذف کنید. |
android.builtInKotlin | پشتیبانی فعال برای کامپایل کد Kotlin به طور مستقیم در افزونه Android Gradle، بدون افزونه org.jetbrains.kotlin.android . | false → true | در صورت امکان، با حذف استفاده از افزونه org.jetbrains.kotlin.android ، Kotlin داخلی را بپذیرید. اگر نه، با تنظیم android.builtInKotlin=false انصراف دهید |
android.uniquePackageNames | الزام می کند که هر کتابخانه یک نام بسته مجزا داشته باشد. | false → true | نام بسته های منحصر به فرد را برای تمام کتابخانه های پروژه خود مشخص کنید. اگر این امکان پذیر نیست، می توانید این پرچم را در حین مهاجرت غیرفعال کنید. |
android.dependency.useConstraints | استفاده از محدودیت های وابستگی بین پیکربندی ها را کنترل می کند. پیشفرض در AGP 9.0 false است که فقط از محدودیتها در آزمایشهای دستگاه برنامه (AndroidTest) استفاده میکند. با تنظیم این مورد روی true به رفتار 8.13 برمی گردد. | true → false | از محدودیت های وابستگی در همه جا استفاده نکنید مگر اینکه به آنها نیاز داشته باشید. پذیرش پیشفرض جدید این پرچم، بهینهسازیهایی را در فرآیند واردات پروژه امکانپذیر میکند که باید زمان واردات را برای ساختها با بسیاری از زیرپروژههای کتابخانه اندروید کاهش دهد. |
aandroid.enableAppCompileTimeRClass | کامپایل کد در برنامه ها در برابر کلاس R غیر نهایی، کامپایل برنامه ها را با کامپایل کتابخانه ای هماهنگ می کند. این افزایش افزایشی را بهبود می بخشد و راه را برای بهینه سازی عملکرد آینده در جریان پردازش منابع هموار می کند. | false → true | بسیاری از پروژه ها فقط می توانند رفتار جدید را بدون تغییر منبع اتخاذ کنند. اگر از فیلدهای کلاس R در هر جایی که نیاز به ثابت وجود دارد استفاده شود، مانند موارد سوئیچ، Refactor برای استفاده از دستورهای زنجیره ای if. |
android.sdk.defaultTargetSdkToCompileSdkIfUnset | از نسخه SDK کامپایل به عنوان مقدار پیشفرض نسخه SDK هدف در برنامهها و آزمایشها استفاده میکند. قبل از این تغییر، نسخه SDK هدف به طور پیش فرض روی نسخه حداقل SDK خواهد بود. | false → true | نسخه SDK مورد نظر را به صراحت برای برنامه ها و آزمایش ها مشخص کنید. |
android.onlyEnableUnitTestForTheTestedBuildType | فقط اجزای تست واحد را برای نوع ساخت آزمایش شده ایجاد می کند. در پروژه پیشفرض این منجر به یک تست واحد برای اشکالزدایی میشود، که در آن رفتار قبلی اجرای آزمایشهای واحد برای رفع اشکال یا انتشار بود. | false → true | اگر پروژه شما برای اجرای هر دو اشکال زدایی و انتشار به آزمایش نیاز ندارد، هیچ تغییری لازم نیست. |
android.proguard.failOnMissingFiles | اگر هر یک از فایل های نگهداری مشخص شده در AGP DSL روی دیسک وجود نداشته باشد، ساخت با خطا انجام می شود. قبل از این تغییر، اشتباهات تایپی در نام فایل ها منجر به نادیده گرفتن فایل ها می شود. | false → true | هر گونه اعلامیه نامعتبر فایل های محافظ را حذف کنید |
android.r8.optimizedResourceShrinking | به R8 اجازه می دهد تا با در نظر گرفتن کلاس ها و منابع Android با هم، منابع Android کمتری را حفظ کند. | false → true | اگر قوانین حفظ پروژه شما از قبل کامل شده است، نیازی به تغییر نیست. |
android.r8.strictFullModeForKeepRules | به R8 اجازه میدهد با حفظ نکردن سازنده پیشفرض در هنگام نگهداشتن یک کلاس، مقدار کمتری را حفظ کند. یعنی -keep class A دیگر به معنی -keep class A { <init>(); } | false → true | اگر قوانین حفظ پروژه شما از قبل کامل شده است، نیازی به تغییر نیست.-keep class A با -keep class A { <init>(); } در قوانین keep پروژه شما برای هر موردی که نیاز به نگه داشتن سازنده پیش فرض دارید. |
android.defaults.buildfeatures.resvalues | resValues در تمام پروژه های فرعی فعال می کند | true → false | با تنظیم موارد زیر در فایلهای ساخت Gradle پروژهها، resValues فقط در زیر پروژههایی که به آن نیاز دارند، فعال کنید: android { buildFeatures { resValues = true } } |
android.defaults.buildfeatures.shaders | کامپایل سایه زن را در همه پروژه های فرعی فعال می کند | true → false | با تنظیم موارد زیر در فایلهای ساخت Gradle پروژهها، کامپایل سایهزن را فقط در زیر پروژههایی فعال کنید که حاوی سایهزنها هستند: android { buildFeatures { shaders = true } } |
ویژگی های حذف شده
پلاگین Android Gradle 9.0 عملکرد زیر را حذف می کند:
- پشتیبانی از اپلیکیشن Wear OS جاسازی شده
AGP 9.0 پشتیبانی از جاسازی برنامههای Wear OS را که دیگر در Play پشتیبانی نمیشوند، حذف میکند. این شامل حذف پیکربندیهایwearApp
وAndroidSourceSet.wearAppConfigurationName
DSL میشود. برای نحوه انتشار برنامه خود در Wear OS به توزیع در Wear OS مراجعه کنید. -
androidDependencies
وsourceSets
گزارش وظیفه
DSL تغییر کرد
پلاگین Android Gradle 9.0 دارای تغییرات شکسته DSL زیر است:
پارامترسازی
CommonExtension
حذف شده است.به خودی خود، این فقط یک تغییر شکستن سطح منبع برای کمک به جلوگیری از تغییرات شکستن سطح منبع در آینده است، اما همچنین به این معنی است که روشهای بلوک باید از
CommonExtension
بهApplicationExtension
،LibraryExension
،DynamicFeatureExtension
وTestExtension
منتقل شوند.هنگام ارتقای پروژه خود به AGP 9.0، کد پلاگین Gradle را که از آن پارامترها یا روش های بلوک استفاده می کند، تغییر دهید. به عنوان مثال، افزونه زیر برای حذف پارامتر نوع و عدم تکیه بر روش های بلوک حذف شده به روز می شود:
AGP 8.13
val commonExtension: CommonExtension<*, *, *, *, *, *> = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig { minSdk { version = release(28) } } }
AGP 9.0
val commonExtension: CommonExtension = extensions.getByType(CommonExtension::class) commonExtension.apply { defaultConfig.apply { minSdk { version = release(28) } } }
برای پلاگین هایی که طیف وسیعی از نسخه های AGP را هدف قرار می دهند، استفاده مستقیم از گیرنده با نسخه های AGP کمتر از 9.0 باینری سازگار است.
DSL حذف شد
پلاگین Android Gradle 9.0 حذف می کند:
AndroidComponentsExtension.finalizeDSl
. باfinalizeDsl
جایگزین شده استAndroidSourceSet.jni
، زیرا کاربردی نبود.AndroidSourceSet.wearAppConfigurationName
، زیرا مربوط به پشتیبانی از برنامه Wear OS جاسازی شده حذف شده است.BuildType.isRenderscriptDebuggable
، زیرا کاربردی نبود.Component.transformClassesWith
.Instrumentation.transformClassesWith
جایگزین آن شده استComponent.setAsmFramesComputationMode
.Instrumentation.setAsmFramesComputationMode
جایگزین آن شده استDependenciesInfoBuilder.includedInApk
. آیا باincludeInApk
جایگزین شده استDependenciesInfoBuilder.includedInBundle
. آیا باincludeInBundle
جایگزین شده استComponentBuilder.enabled
ComponentBuilder.enable
جایگزین آن شده است.DependencyVariantSelection
. باDependencySelection
جایگزین شده است که به عنوانkotlin.android
در معرض نمایش قرار می گیردGeneratesApk.targetSdkVersion
. Is باtargetSdk
جایگزین شده استInstallation.installOptions(String)
. با ویژگی تغییرپذیرInstallation.installOptions
جایگزین شده است.Variant.minSdkVersion
. آیا باminSdk
جایگزین شده استVariant.maxSdkVersion
. Is باmaxSdk
جایگزین می شودVariant.targetSdkVersion
. Is باtargetSdk
جایگزین شده استVariantBuilder.targetSdk
وtargetSdkPreview
، زیرا در کتابخانه ها معنی نداشتند. به جای آن ازGeneratesApkBuilder.targetSdk
یاGeneratesApkBuilder.targetSdkPreview
استفاده کنید.VariantOutput.enable
. آیا باenabled
جایگزین می شودبلوک
PostProcessing
آزمایشی، اما هرگز تثبیت نشده است.ProductFlavor.setDimension
که با ویژگیdimension
جایگزین می شودLanguageSplitOptions
که فقط برای Google Play Instant مفید بود که منسوخ شده است.Variant.unitTest
، زیرا برای افزونهcom.android.test
قابل اجرا نبود.unitTest
در زیرگروه هایVariantBuilder
کهHasUnitTest
گسترش می دهد در دسترس است.VariantBuilder.enableUnitTest
، زیرا برای افزونهcom.android.test
قابل اجرا نبود.enableUnitTest
در زیرگروه هایVariantBuilder
کهHasUnitTestBuilder
گسترش می دهد در دسترس است.VariantBuilder.unitTestEnabled
به نفع نام مستمرenableUnitTest
در زیرگروههایVariantBuilder
کهHasUnitTestBuilder
گسترش میدهند، حذف میشود.
ویژگی های Gradle حذف شد
ویژگیهای Gradle زیر ابتدا بهعنوان راههایی برای غیرفعال کردن ویژگیهایی که بهطور پیشفرض فعال شده بودند، اضافه شدند.
این ویژگیها بهطور پیشفرض از نسخه AGP 8.0 یا پایینتر غیرفعال شدهاند. این ویژگیها را فقط در پروژههای فرعی فعال کنید که از آنها برای ساخت کارآمدتر استفاده میکنند.
اموال | تابع | جایگزینی |
---|---|---|
android.defaults.buildfeatures.aidl | تدوین AIDL را در همه پروژه های فرعی فعال می کند | با تنظیم ویژگی زیر در فایل های ساخت Gradle پروژه ها، کامپایل AIDL را فقط در زیر پروژه هایی که منابع AIDL وجود دارد، فعال کنید:android { buildFeatures { aidl = true } } |
android.defaults.buildfeatures.renderscript | کامپایل RenderScript را در همه پروژه های فرعی فعال می کند | کامپایل رندر اسکریپت را فقط در پروژه های فرعی که منابع رندر اسکریپت در آن ها وجود دارد با تنظیم ویژگی زیر در فایل های ساخت Gradle آن پروژه ها فعال کنید: android { buildFeatures { renderScript = true } } |
API های حذف شده
پلاگین Android Gradle 9.0 حذف می کند:
APIهای
BaseExtension.registerTransform
منسوخ و غیرفعال شده، که فقط اجازه کامپایل در برابر آخرین نسخه AGP را می دهد، در حالی که در AGP 4.2 یا پایین تر اجرا می شود.FeaturePlugin
وFeatureExtension
منسوخ و غیرفعال شده است.
ویژگی های Gradle اجباری
اگر ویژگی های Gradle زیر را تنظیم کنید AGP 9.0 خطا می دهد.
افزونه Android Gradle بهروزرسانی دستیار پروژههایی را که از این ویژگیها استفاده میکنند به AGP 9.0 ارتقا نمیدهد.
اموال | تابع |
---|---|
android.r8.integratedResourceShrinking | اکنون کوچک شدن منابع همیشه به عنوان بخشی از R8 اجرا می شود، پیاده سازی قبلی حذف شده است. |