یادداشت های انتشار برای پیش نمایش پلاگین Android Gradle

این صفحه حاوی یادداشت‌های انتشار برای نسخه‌های پیش‌نمایش پلاگین 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 دیگر در دسترس نیست.
falsetrue می توانید با تنظیم android.newDsl=false انصراف دهید.
هنگامی که همه پلاگین ها و منطق ساختی که پروژه شما استفاده می کند سازگار است، انصراف را حذف کنید.
android.builtInKotlin پشتیبانی فعال برای کامپایل کد Kotlin به طور مستقیم در افزونه Android Gradle، بدون افزونه org.jetbrains.kotlin.android . falsetrue در صورت امکان، با حذف استفاده از افزونه org.jetbrains.kotlin.android ، Kotlin داخلی را بپذیرید. اگر نه، با تنظیم android.builtInKotlin=false انصراف دهید
android.uniquePackageNames الزام می کند که هر کتابخانه یک نام بسته مجزا داشته باشد. falsetrue نام بسته های منحصر به فرد را برای تمام کتابخانه های پروژه خود مشخص کنید. اگر این امکان پذیر نیست، می توانید این پرچم را در حین مهاجرت غیرفعال کنید.
android.dependency.useConstraints استفاده از محدودیت های وابستگی بین پیکربندی ها را کنترل می کند.
پیش‌فرض در AGP 9.0 false است که فقط از محدودیت‌ها در آزمایش‌های دستگاه برنامه (AndroidTest) استفاده می‌کند. با تنظیم این مورد روی true به رفتار 8.13 برمی گردد.
truefalse از محدودیت های وابستگی در همه جا استفاده نکنید مگر اینکه به آنها نیاز داشته باشید. پذیرش پیش‌فرض جدید این پرچم، بهینه‌سازی‌هایی را در فرآیند واردات پروژه امکان‌پذیر می‌کند که باید زمان واردات را برای ساخت‌ها با بسیاری از زیرپروژه‌های کتابخانه اندروید کاهش دهد.
aandroid.enableAppCompileTimeRClass کامپایل کد در برنامه ها در برابر کلاس R غیر نهایی، کامپایل برنامه ها را با کامپایل کتابخانه ای هماهنگ می کند.
این افزایش افزایشی را بهبود می بخشد و راه را برای بهینه سازی عملکرد آینده در جریان پردازش منابع هموار می کند.
falsetrue بسیاری از پروژه ها فقط می توانند رفتار جدید را بدون تغییر منبع اتخاذ کنند. اگر از فیلدهای کلاس R در هر جایی که نیاز به ثابت وجود دارد استفاده شود، مانند موارد سوئیچ، Refactor برای استفاده از دستورهای زنجیره ای if.
android.sdk.defaultTargetSdkToCompileSdkIfUnset از نسخه SDK کامپایل به عنوان مقدار پیش‌فرض نسخه SDK هدف در برنامه‌ها و آزمایش‌ها استفاده می‌کند.
قبل از این تغییر، نسخه SDK هدف به طور پیش فرض روی نسخه حداقل SDK خواهد بود.
falsetrue نسخه SDK مورد نظر را به صراحت برای برنامه ها و آزمایش ها مشخص کنید.
android.onlyEnableUnitTestForTheTestedBuildType فقط اجزای تست واحد را برای نوع ساخت آزمایش شده ایجاد می کند.
در پروژه پیش‌فرض این منجر به یک تست واحد برای اشکال‌زدایی می‌شود، که در آن رفتار قبلی اجرای آزمایش‌های واحد برای رفع اشکال یا انتشار بود.
falsetrue اگر پروژه شما برای اجرای هر دو اشکال زدایی و انتشار به آزمایش نیاز ندارد، هیچ تغییری لازم نیست.
android.proguard.failOnMissingFiles اگر هر یک از فایل های نگهداری مشخص شده در AGP DSL روی دیسک وجود نداشته باشد، ساخت با خطا انجام می شود. قبل از این تغییر، اشتباهات تایپی در نام فایل ها منجر به نادیده گرفتن فایل ها می شود. falsetrue هر گونه اعلامیه نامعتبر فایل های محافظ را حذف کنید
android.r8.optimizedResourceShrinking به R8 اجازه می دهد تا با در نظر گرفتن کلاس ها و منابع Android با هم، منابع Android کمتری را حفظ کند. falsetrue اگر قوانین حفظ پروژه شما از قبل کامل شده است، نیازی به تغییر نیست.
android.r8.strictFullModeForKeepRules به R8 اجازه می‌دهد با حفظ نکردن سازنده پیش‌فرض در هنگام نگه‌داشتن یک کلاس، مقدار کمتری را حفظ کند. یعنی -keep class A دیگر به معنی -keep class A { <init>(); }
falsetrue اگر قوانین حفظ پروژه شما از قبل کامل شده است، نیازی به تغییر نیست.

-keep class A با -keep class A { <init>(); } در قوانین keep پروژه شما برای هر موردی که نیاز به نگه داشتن سازنده پیش فرض دارید.
android.defaults.buildfeatures.resvalues resValues در تمام پروژه های فرعی فعال می کند truefalse با تنظیم موارد زیر در فایل‌های ساخت Gradle پروژه‌ها، resValues فقط در زیر پروژه‌هایی که به آن نیاز دارند، فعال کنید:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders کامپایل سایه زن را در همه پروژه های فرعی فعال می کند truefalse با تنظیم موارد زیر در فایل‌های ساخت Gradle پروژه‌ها، کامپایل سایه‌زن را فقط در زیر پروژه‌هایی فعال کنید که حاوی سایه‌زن‌ها هستند:
android {
  buildFeatures {
    shaders = true
  }
}

ویژگی های حذف شده

پلاگین Android Gradle 9.0 عملکرد زیر را حذف می کند:

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 حذف می کند:

ویژگی های Gradle حذف شد

ویژگی‌های Gradle زیر ابتدا به‌عنوان راه‌هایی برای غیرفعال کردن ویژگی‌هایی که به‌طور پیش‌فرض فعال شده بودند، اضافه شدند.

این ویژگی‌ها به‌طور پیش‌فرض از نسخه AGP 8.0 یا پایین‌تر غیرفعال شده‌اند. این ویژگی‌ها را فقط در پروژه‌های فرعی فعال کنید که از آنها برای ساخت کارآمدتر استفاده می‌کنند.

اموال تابع جایگزینی
android.defaults.buildfeatures.aidl تدوین AIDL را در همه پروژه های فرعی فعال می کند با تنظیم ویژگی زیر در فایل های ساخت Gradle پروژه ها، کامپایل AIDL را فقط در زیر پروژه هایی که منابع AIDL وجود دارد، فعال کنید:
android {
  buildFeatures {
    aidl = true
  }
}
در فایل ساخت Gradle هر زیر پروژه حاوی منابع AIDL
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 اجرا می شود، پیاده سازی قبلی حذف شده است.