الإصدار 7.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android (تموز/يوليو 2021)
يُعدّ الإصدار 7.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android إصدارًا رئيسيًا يتضمّن مجموعة متنوعة من التحسينات والميزات الجديدة.
7.0.1 (آب/أغسطس 2021)
يتضمّن هذا التحديث البسيط إصلاحات أخطاء مختلفة. للاطّلاع على قائمة بإصلاحات الأخطاء البارزة، يمكنك الاطّلاع على المشاركة ذات الصلة في مدوّنة أخبار الإصدارات
التوافق
الحد الأدنى للإصدار | الإصدار التلقائي | ملاحظات | |
---|---|---|---|
قاعدة مخروطية | 7.0.2 | 7.0.2 | لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحديث Gradle. |
أدوات إنشاء حِزم تطوير البرامج (SDK) | 30.0.2 | 30.0.2 | تثبيت أدوات إنشاء حزمة تطوير البرامج (SDK) أو ضبطها |
كرونة دنماركية | لا ينطبق | 21.4.7075529 | تثبيت أو ضبط إصدار مختلف من NDK. |
JDK | 11 | 11 | لمزيد من المعلومات، راجِع إعداد إصدار JDK. |
يجب توفّر 11 JDK لتشغيل AGP 7.0
عند استخدام الإصدار 7.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android لإنشاء تطبيقك، أصبح JDK 11 الآن المطلوبة لتشغيل Gradle. يُجمِّع إصدار Android Studio Arctic Fox حِزم JDK 11 ويضبط Gradle لاستخدامها تلقائيًا، ما يعني أنّ معظم مستخدمي Android Studio لا يحتاجون إلى إجراء أي تغييرات على الإعدادات في مشاريعهم.
إذا كنت بحاجة إلى ضبط إصدار JDK يدويًا المستخدَم من قِبل AGP داخل Android Studio، عليك استخدام JDK 11 أو إصدار أحدث.
عند استخدام AGP بشكل مستقل عن "استوديو Android"، يجب ترقية إصدار JDK من خلال
إعداد متغيّر بيئة JAVA_Home
أو -Dorg.gradle.java.home
خيار سطر الأوامر
إلى دليل تثبيت JDK 11.
يُرجى العِلم أنّ أداة "مدير SDK" و"مدير AVD" في حزمة "أدوات حزمة تطوير البرامج" (SDK) المتوقّفة لا تعمل مع نظام JDK 11. لمواصلة استخدام أداة "إدارة حِزم تطوير البرامج (SDK)" وأداة "إدارة أجهزة المحاكاة الافتراضية (AVD)" مع الإصدار 7.0 من "مجموعة تطوير البرامج (AGP)" والإصدارات الأحدث، عليك التبديل إلى الإصدارات الجديدة من الأدوات في حزمة "أدوات سطر الأوامر في حزمة تطوير البرامج (SDK) لنظام التشغيل Android" الحالية.
إصدار Variant API الثابت
أصبحت واجهة Variant API الجديدة مستقرة الآن. يمكنك الاطّلاع على الواجهات الجديدة في حزمة com.android.build.api.variant والأمثلة في مشروع GitHub gradle-recipes. وكجزء من العملية الجديدة Variant API، قدّمنا عددًا من الملفات الوسيطة التي تسمى الأدوات، من خلال العناصر من واجهة pyplot. يمكن الحصول على هذه العناصر، مثل البيان المدمج، بأمان وتخصيصها باستخدام المكوّنات الإضافية والرموز البرمجية التابعة لجهات خارجية.
سنواصل توسيع نطاق Variant API من خلال إضافة وظائف جديدة وزيادة عدد العناصر الوسيطة التي نوفّرها للتخصيص.
تغييرات في سلوك أداة Lint
يوضِّح هذا القسم التغييرات المتعددة في سلوك أداة Lint في نظام Android Gradle المكون الإضافي 7.0.0.
أداة Lint محسَّنة لتبعيات المكتبة
أصبح تشغيل أداة Lint باستخدام checkDependencies = true
أسرع الآن.
عن ذي قبل. بالنسبة إلى مشاريع Android التي تتألف من تطبيق يحتوي على مكتبة
المستخدم، فمن المستحسن تعيين checkDependencies
على
true
كما هو موضح أدناه، ولتشغيل أداة Lint عبر
./gradlew :app:lint
، الذي سيحلل كل الاعتمادية
وحدتين بشكل متوازٍ ويتم إنتاج تقرير واحد يتضمن المشكلات من
تطبيقك وجميع تبعياته.
رائع
// build.gradle
android {
...
lintOptions {
checkDependencies true
}
}
Kotlin
// build.gradle.kts
android {
...
lint {
isCheckDependencies = true
}
}
يمكن الآن أن تكون مهام Lint محدّثة
إذا لم تتغير مصادر الوحدة ومواردها، فسيستخدم تحليل الوبر
المهمة الخاصة بالوحدة، فلا يلزم تشغيلها مرة أخرى. عند حدوث ذلك،
يظهر تنفيذ المهمة كـ "UP-TO-DATE" في Gradle
الإخراج. نتيجةً لهذا التغيير، عند تشغيل lint على وحدة تطبيق باستخدام checkDependencies = true
، لن تحتاج سوى الوحدات التي تم تغييرها
إلى إجراء تحليلها. ونتيجةً لذلك، يمكن تشغيل Lint بشكل أسرع.
ولا تحتاج أيضًا مهمة تقرير Lint إلى التشغيل إذا لم يتم تغيير مدخلاتها. مشكلة معروفة ذات صلة هي عدم توفّر ناتج نصي لفحص الأخطاء المطبوع في stdout عندما تكون مهمة فحص الأخطاء UP-TO-DATE (المشكلة رقم 191897708).
تشغيل أداة التدقيق على وحدات الميزات الديناميكية
لم يعد AGP يتيح تشغيل أداة Lint من وحدات الميزات الديناميكية.
سيؤدي تشغيل أداة التدقيق من وحدة التطبيق المقابلة إلى تشغيل أداة التدقيق على
الوحدات المخصّصة للميزات الديناميكية وتضمين جميع المشاكل في ملف
تقرير التدقيق في التطبيق. هناك مشكلة معروفة ذات صلة وهي أنه عند تشغيل أداة Lint
مع checkDependencies = true
من وحدة تطبيق،
لا يتم التحقق من اعتماديات مكتبة الميزات الديناميكية ما لم تكن تطبيقات
التبعيات (مشكلة
#191977888).
تشغيل أداة التدقيق على الصيغة التلقائية فقط
يؤدي تشغيل ./gradlew :app:lint
الآن إلى فحص الأخطاء في
الخيار التلقائي فقط. في الإصدارات السابقة من AGP، كان يشغّل أداة Lint لجميع
مختلفة.
تحذيرات الفئة مفقودة في جهاز تقليص R8
R8 بشكل أكثر دقة
يعالج باستمرار الصفوف غير المتوفّرة والخيار -dontwarn
.
ومن ثمّ، ينبغي لك البدء في تقييم تحذيرات الفئة المفقودة الصادرة
بواسطة R8.
عندما يصادف R8 مرجع فئة غير محدّد في تطبيقك أو أحد تبعياته، سيُصدر تحذيرًا يظهر في ناتج عملية الإنشاء . مثلاً:
R8: Missing class: java.lang.instrument.ClassFileTransformer
يعني هذا التحذير أن تعريف الفئة
تعذر العثور على java.lang.instrument.ClassFileTransformer
عند تحليل رمز تطبيقك وبينما يعني هذا عادةً وجود خطأ،
يمكنك تجاهل هذا التحذير. هناك سببان شائعان
لتجاهل التحذير هما:
-
المكتبات التي تستهدف آلة متجه الدعم والفئة الناقصة هم من مكتبات JVM. نوع المكتبة (كما في المثال أعلاه).
-
تستخدم إحدى تبعياتك واجهة برمجة تطبيقات وقت التجميع فقط.
يمكنك تجاهل تحذير بشأن عدم توفّر صف دراسي من خلال إضافة -dontwarn
.
قاعدة إلى ملف proguard-rules.pro
. مثلاً:
-dontwarn java.lang.instrument.ClassFileTransformer
للتيسير عليك، سيقوم AGP بإنشاء ملف يحتوي على جميع
قواعد مفقودة، كتابتها في مسار ملف مثل ما يلي:
app/build/outputs/mapping/release/missing_rules.txt
إضافة
إلى ملف proguard-rules.pro
لتجاهل التحذيرات.
في الإصدار 7.0 من AGP، ستظهر رسائل الصف المفقودة كتحذيرات، ويمكنك
وتحويلها إلى أخطاء بوضع
android.r8.failOnMissingClasses = true
بوصة
gradle.properties
وفي الإصدار 8.0 من AGP، ستصبح هذه التحذيرات
الأخطاء التي تقطع البناء. من الممكن الحفاظ على سلوك AGP 7.0 من خلال
إضافة الخيار -ignorewarnings
إلىملف
proguard-rules.pro
، ولكن لا يُنصح بذلك.
تمت إزالة ذاكرة التخزين المؤقت لإنشاء المكوّن الإضافي لنظام Gradle المتوافق مع Android
تمت إزالة ذاكرة التخزين المؤقت لإنشاء AGP في الإصدار 4.1 من AGP. تمّ تقديم ذاكرة التخزين المؤقت لإنشاء AGP في الإصدار 2.3 من AGP تكميلاً لذاكرة التخزين المؤقت لإنشاء Gradle، وتمّ استبدال ذاكرة التخزين المؤقت لإنشاء AGP بالكامل بذاكرة التخزين المؤقت لإنشاء Gradle في الإصدار 4.1 من AGP. لا يؤثّر هذا التغيير في وقت الإنشاء.
في AGP 7.0، تُستخدم السمة android.enableBuildCache
،
السمة android.buildCacheDir
،
تمت إزالة مهمة واحدة (cleanBuildCache
).
استخدام رمز المصدر Java 11 في مشروعك
يمكنك الآن تجميع رمز مصدر يصل إلى Java 11 في مشروع تطبيقك، ما يتيح لك استخدام ميزات اللغة الأحدث، مثل طرق الواجهات الخاصة ومُشغِّل العلامة الماسية للفئات المجهولة وبنية المتغيّر المحلي لمَعلمات lambda.
لتفعيل هذه الميزة، عليك ضبط compileOptions
على الإعداد المطلوب.
إصدار Java واضبط القيمة compileSdkVersion
على 30 أو أعلى:
// build.gradle
android {
compileSdkVersion 30
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "11"
}
}
// build.gradle.kts
android {
compileSdkVersion(30)
compileOptions {
sourceCompatibility(JavaVersion.VERSION_11)
targetCompatibility(JavaVersion.VERSION_11)
}
kotlinOptions {
jvmTarget = "11"
}
}
تمّت إزالة إعدادات التبعيات
في AGP 7.0، تم ضبط الإعدادات (أو نطاقات التبعية) التالية تمت إزالتها:
-
compile
استنادًا إلى حالة الاستخدام، تم استبدال هذا الرمز برمزapi
أوimplementation
.
وتنطبق أيضًا على صيغ *التجميع، مثل:debugCompile
. -
provided
تم استبدال هذا الرمز برمزcompileOnly
.
وينطبق ذلك أيضًا على خيارات المنتج *المقدَّمة، على سبيل المثال:releaseProvided
. -
apk
تم استبدال هذا النطاق بالرمزruntimeOnly
. -
publish
تم استبدال هذا الرمز برمزruntimeOnly
.
في معظم الحالات، سينقل مساعِد ترقية AGP مشروعك تلقائيًا إلى الإعدادات الجديدة.
تغيير مسار البحث عن الرمز البرمجي عند الترجمة باستخدام المكوّن الإضافي لنظام Android Gradle
إذا كنت تُنشئ الترجمة باستخدام المكوّن الإضافي لـ Android Gradle، قد يتغيّر مسار تجميع
classpath. لأنّ AGP يستخدم الآن api/implementation
داخليًا، فقد تتم إزالة بعض العناصر من التجميع
مسار الفئة. إذا كنت تعتمد على تبعية AGP في وقت الترجمة، احرص على
إضافتها كتبعية صريحة.
إضافة المكتبات الأصلية في موارد Java المجلد غير متاح.
في السابق، كان بإمكانك إضافة مكتبة مجمّعة من رموز برمجية أصلية في مجلد موارد Java،
وتسجيل المجلد باستخدام android.sourceSets.main.resources.srcDirs
لكي يتم استخراج المكتبة المجمّعة من رموز برمجية أصلية وإضافتها إلى حزمة APK
النهائية. بدءًا من الإصدار AGP 7.0، لا يمكن استخدام هذا الإجراء ويتم تجاهل المكتبات الأصلية في مجلد موارد Java.
بدلاً من ذلك، استخدم طريقة DSL المخصصة
المكتبات الأصلية، android.sourceSets.main.jniLibs.srcDirs
. بالنسبة
مزيد من المعلومات، راجع
كيفية إعداد
مجموعات المصادر
المشاكل المعروفة
يوضِّح هذا القسم المشاكل المعروفة التي تحدث في المكوّن الإضافي لنظام Gradle المتوافق مع Android. 7.0.0
عدم التوافق مع المكوّن الإضافي 1.4.x Kotlin Multiplatform
الإصدار 7.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android متوافق مع لغة كوتلين المكون الإضافي متعدد الأنظمة الأساسية 1.5.0 والإصدارات الأحدث. يجب تحديث المشاريع التي تستخدم Kotlin Multiplatform إلى الإصدار 1.5.0 من Kotlin لاستخدام الإصدار 7.0.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android". كحل بديل، يمكنك الرجوع إلى الإصدار 4.2.x من المكوّن الإضافي لنظام Gradle المتوافق مع Android، ولكن لا يُنصح بذلك.
لمزيد من المعلومات، يُرجى الاطّلاع على KT-43944.
ناتج أداة Lint غير متوفّر.
لا يوجد إخراج نص Lint مطبوعًا على اختبار stdout عندما يتم تنفيذ مهمة Lint محدّث (المشكلة رقم 191897708). لمزيد من المعلومات، يُرجى مراجعة تغييرات السلوك في أداة Lint هذا الإصدار سيتم إصلاحها في الإصدار 7.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android.
لا يتم فحص جميع التبعيات لمكتبة الميزات الديناميكية باستخدام أداة Lint.
عند تشغيل lint باستخدام checkDependencies = true
من ملف APK
لوحدة تطبيق، لا يتم التحقّق من تبعيات مكتبة الميزات الديناميكية ما لم تكن
أيضًا تبعيات للتطبيق
(المشكلة رقم 191977888).
كحل بديل، يمكن تنفيذ مهمة فحص الأخطاء على هذه المكتبات. لمزيد من المعلومات،
راجِع تغييرات السلوك في أداة Lint.