افزونه Android Gradle 4.2.0 (مارس 2021)
سازگاری
حداقل نسخه | نسخه پیش فرض | یادداشت ها | |
---|---|---|---|
گریدل | 6.7.1 | N/A | برای کسب اطلاعات بیشتر، به روز رسانی Gradle را ببینید. |
ابزارهای ساخت SDK | 30.0.2 | 30.0.2 | ابزارهای ساخت SDK را نصب یا پیکربندی کنید . |
NDK | N/A | 21.4.7075529 | نسخه دیگری از NDK را نصب یا پیکربندی کنید . |
ویژگی های جدید
این نسخه از پلاگین اندروید Gradle شامل ویژگی های جدید زیر است.
زبان جاوا نسخه 8 به طور پیش فرض
با شروع نسخه 4.2، AGP به طور پیش فرض از سطح زبان جاوا 8 استفاده می کند. جاوا 8 دسترسی به تعدادی از ویژگی های زبان جدیدتر از جمله عبارات لامبدا، مراجع روش و روش های رابط ثابت را فراهم می کند. برای لیست کامل ویژگی های پشتیبانی شده به مستندات جاوا 8 مراجعه کنید.
برای حفظ رفتار قدیمی، جاوا 7 را به صراحت در فایل build.gradle.kts
یا build.gradle
در سطح ماژول خود مشخص کنید:
// build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
کامپایلر جدید منبع JVM
یک کامپایلر منبع جدید JVM در ابزار پلاگین Android Gradle 4.2 جایگزین بخشهایی از کامپایلر منبع AAPT2 میشود که به طور بالقوه باعث بهبود عملکرد ساخت، به ویژه در ماشینهای ویندوز میشود. کامپایلر جدید منبع JVM به طور پیش فرض فعال است.
امضای v3 و v4 اکنون پشتیبانی می شود
Android Gradle Plugin 4.2 اکنون از فرمت های امضای APK v3 و APK v4 پشتیبانی می کند. برای فعال کردن یکی یا هر دوی این قالبها در ساخت، ویژگیهای زیر را به فایل build.gradle
یا build.gradle.kts
در سطح ماژول خود اضافه کنید:
// build.gradle
android {
...
signingConfigs {
config {
...
enableV3Signing true
enableV4Signing true
}
}
}
// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing = true
enableV4Signing = true
}
}
}
امضای APK v4 به شما امکان میدهد با استفاده از نصب APK افزایشی ADB در Android 11 به سرعت فایلهای APK بزرگ را مستقر کنید. این پرچم جدید از مرحله امضای APK در فرآیند استقرار مراقبت میکند.
پیکربندی امضای برنامه در هر نوع
اکنون امکان فعال یا غیرفعال کردن امضای برنامه در افزونه Android Gradle برای هر نوع وجود دارد.
این مثال نحوه تنظیم امضای برنامه در هر نوع با استفاده از متد onVariants()
در Kotlin یا Groovy را نشان میدهد:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
ویژگی جدید Gradle: android.native.buildOutput
برای کاهش شلوغی در خروجی ساخت، AGP 4.2 پیامهای ساختهای بومی که از CMake و ndk-build
استفاده میکنند را فیلتر میکند و بهطور پیشفرض فقط خروجی کامپایلر C/C++ را نمایش میدهد. پیش از این، برای هر فایلی که ساخته میشد، یک خط خروجی تولید میشد که در نتیجه تعداد زیادی پیامهای اطلاعاتی ایجاد میشد.
اگر میخواهید کل خروجی بومی را ببینید، ویژگی جدید Gradle android.native.buildOutput
را روی verbose
تنظیم کنید.
می توانید این ویژگی را در فایل gradle.properties
یا از طریق خط فرمان تنظیم کنید.
gradle.properties
android.native.buildOutput=verbose
خط فرمان
-Pandroid.native.buildOutput=verbose
مقدار پیش فرض این ویژگی quiet
است.
تغییر رفتار برای فایل های gradle.properties
با شروع در AGP 4.2، دیگر امکان نادیده گرفتن ویژگی های Gradle از پروژه های فرعی وجود ندارد. به عبارت دیگر، اگر یک ویژگی را در فایل gradle.properties
در یک پروژه فرعی به جای پروژه root اعلام کنید، نادیده گرفته می شود.
به عنوان مثال، در نسخه های قبلی، AGP مقادیر را از <var>projectDir</var>/gradle.properties
, <var>projectDir</var>/app/gradle.properties
, <var>projectDir</var>/library/gradle.properties
می خواند. <var>projectDir</var>/library/gradle.properties
و غیره. برای ماژول های برنامه، اگر ویژگی Gradle یکسان در <var>projectDir</var>/gradle.properties
و <var>projectDir</var>/app/gradle.properties
وجود داشته باشد، مقدار از <var>projectDir</var>/app/gradle.properties
اولویت دارد.
در AGP 4.2، این رفتار تغییر کرده است و AGP مقادیر gradle.properties
را در پروژههای فرعی بار نمیکند (به عنوان مثال، <var>projectDir</var>/app/gradle.properties
). این تغییر رفتار Gradle جدید را منعکس می کند و از کش پیکربندی پشتیبانی می کند
برای اطلاعات بیشتر در مورد تنظیم مقادیر در فایلهای gradle.properties
، به اسناد Gradle مراجعه کنید.
سازگاری Gradle و تغییرات پیکربندی
هنگام اجرا در Android Studio، ابزار ساخت Gradle از JDK همراه استودیو استفاده می کند. در نسخههای قبلی، JDK 8 با استودیو همراه بود. با این حال، در نسخه 4.2، JDK 11 اکنون به جای آن همراه است. هنگام استفاده از JDK جدید همراه برای اجرای Gradle، این ممکن است منجر به ناسازگاری یا عملکرد JVM به دلیل تغییرات در جمع کننده زباله شود. این مسائل در زیر توضیح داده شده است.
توجه: اگرچه ما اجرای Gradle را با JDK 11 توصیه می کنیم، اما می توان JDK مورد استفاده برای اجرای Gradle را در گفتگوی ساختار پروژه تغییر داد. تغییر این تنظیمات فقط JDK مورد استفاده برای اجرای Gradle را تغییر میدهد و JDK مورد استفاده برای اجرای خود استودیو را تغییر نمیدهد.
سازگاری استودیو با پلاگین Android Gradle (AGP)
Android Studio 4.2 میتواند پروژههایی را که از AGP 3.1 و بالاتر استفاده میکنند باز کند، مشروط بر اینکه AGP Gradle 4.8.1 و بالاتر را اجرا کند. برای اطلاعات بیشتر در مورد سازگاری Gradle، به به روز رسانی Gradle مراجعه کنید.
بهینه سازی بیلدهای Gradle برای JDK 11
این بهروزرسانی به JDK 11 بر پیکربندی پیشفرض زبالهگیر JVM تأثیر میگذارد، زیرا JDK 8 از زبالهگیر موازی استفاده میکند در حالی که JDK 11 از زبالهگیر G1 استفاده میکند.
برای بهبود بالقوه عملکرد ساخت، توصیه میکنیم ساختهای Gradle خود را با جمعکننده زباله موازی آزمایش کنید . در gradle.properties
موارد زیر را تنظیم کنید:
org.gradle.jvmargs=-XX:+UseParallelGC
اگر گزینه های دیگری از قبل در این قسمت تنظیم شده است، یک گزینه جدید اضافه کنید:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
برای اندازهگیری سرعت ساخت با پیکربندیهای مختلف، به نمایه ساخت خود مراجعه کنید.
فایلهای DEX در فایلهای APK فشرده نمیشوند که minSdk
= 28 یا بالاتر باشد
AGP اکنون فایلهای DEX را به صورت غیرفشرده در فایلهای APK زمانی که minSdk
= 28 یا بالاتر بستهبندی میکند. این باعث افزایش اندازه APK می شود، اما باعث می شود اندازه نصب روی دستگاه کوچکتر شود و اندازه دانلود تقریباً یکسان است.
برای اینکه AGP را مجبور کنید فایل های DEX فشرده شده را بسته بندی کند، می توانید موارد زیر را به فایل build.gradle
خود اضافه کنید:
android {
packagingOptions {
dex {
useLegacyPackaging true
}
}
}
از DSL برای بسته بندی کتابخانه های بومی فشرده استفاده کنید
ما توصیه میکنیم کتابخانههای بومی را به صورت فشردهنشده بستهبندی کنید، زیرا این کار باعث میشود که اندازه نصب برنامه کوچکتر، اندازه دانلود برنامه کوچکتر و زمان بارگذاری سریعتر برنامه برای کاربران شما انجام شود. با این حال، اگر میخواهید افزونه Android Gradle کتابخانههای بومی فشردهشده را هنگام ساخت برنامهتان بستهبندی کند، useLegacyPackaging
را در فایل build.gradle
برنامهتان روی true
تنظیم کنید:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
پرچم useLegacyPackaging
جایگزین ویژگی manifest extractNativeLibs
می شود. برای پیشینه بیشتر، به یادداشت انتشار مراجعه کنید.