الإصدار 4.1.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" (آب/أغسطس 2020)
التوافق
الحد الأدنى للإصدار | الإصدار التلقائي | ملاحظات | |
---|---|---|---|
Gradle | 6.5 | لا ينطبق | لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تحديث Gradle. |
أدوات إنشاء حِزم SDK | 29.0.2 | 29.0.2 | ثبِّت أو اضبط أدوات إنشاء حِزم SDK. |
NDK | لا ينطبق | 21.1.6352462 | ثبِّت أو ضبط إصدارًا مختلفًا من حزمة NDK. |
<p>This version of the Android plugin requires the following:</p>
<ul>
<li>
<p><a href="https://docs.gradle.org/6.5.1/release-notes.html">Gradle 6.5</a>.
To learn more, read the section about <a href="#updating-gradle">updating
Gradle</a>.</p>
</li>
<li>
<p><a href="/studio/releases/build-tools.html#notes">SDK Build Tools
29.0.2</a> or higher.</p>
</li>
</ul>
<p>The default NDK version in this release is 21.1.6352462. To install a
different NDK version, see <a href="/studio/projects/install-ndk#specific-version">Install a specific version of the NDK</a>.</p>
الميزات الجديدة
يتضمّن هذا الإصدار من المكوّن الإضافي لنظام Gradle المتوافق مع Android الميزات الجديدة التالية.
توافق لغة Kotlin Script DSL
للمساعدة في تحسين تجربة التعديل لمستخدمي Kotlin buildscript، تمّ الآن تحديد DSL وواجهات برمجة التطبيقات لحزمة Android Gradle الإضافية 4.1 في مجموعة من واجهات Kotlin بشكل منفصل عن فئات التنفيذ. ويعني هذا أنّ:
- تم الآن الإعلان بشكل صريح عن قابلية القيمة الخالية للتغيير وقابلية التغير في أنواع Kotlin.
- يتم نشر المستندات التي يتم إنشاؤها من هذه الواجهات في مرجع Kotlin API.
- تم تحديد واجهة برمجة التطبيقات في "المكوّن الإضافي لنظام Gradle المتوافق مع Android" بوضوح، وذلك لجعل عملية توسيع نطاق عمليات إنشاء تطبيقات Android أقلّ تعقيدًا في المستقبل.
ملاحظة مهمة: إذا سبق لك استخدام نصوص إنشاء KTS أو استخدام Kotlin في
buildSrc
، قد يؤدي ذلك إلى حدوث مشاكل في توافق المصدر بسبب أخطاء معيّنة
كانت ستظهر كأخطاء وقت التشغيل في الإصدارات السابقة.
إنّ أنواع المجموعات المصمّمة للتغيير في لغة وصف البيانات (DSL) يتم الآن تحديدها بشكلٍ موحّد على النحو التالي:
val collection: MutableCollectionType
وهذا يعني أنّه لم يعُد من الممكن كتابة ما يلي في نصوص Kotlin البرمجية لبعض المجموعات التي كانت تتيح ذلك في السابق:
collection = collectionTypeOf(...)
ومع ذلك، يمكن تعديل المجموعة بشكلٍ موحّد، لذا من المفترض أن تعمل collection += …
وcollection.add(...)
الآن في كل مكان.
إذا رصدت أي مشاكل عند ترقية مشروع يستخدِم واجهتَي برمجة التطبيقات وDSL لـ Kotlin في مكوّن Android Gradle Plugin، يُرجى الإبلاغ عن خطأ.
تصدير تبعيات C/C++ من حِزم AAR
أضاف الإصدار 4.0 من "المكوّن الإضافي لنظام Gradle المتوافق مع Android" إمكانية استيراد حِزم Prefab في ملحق AAR. في الإصدار 4.1 من AGP، أصبح من الممكن الآن تصدير المكتبات من الإصدار الخارجي من التطبيق الأصلي في ملف AAR لمشروع مكتبة Android.
لتصدير مكتباتك المجمّعة من رموز برمجية أصلية، أضِف ما يلي إلى مجموعة android
في
الملف build.gradle
الخاص بمشروع مكتبتك:
buildFeatures { prefabPublishing true }prefab { <var>mylibrary</var&;gt { headers "src/main/cpp/<var>mylibrary</var>/include" }
<var>myotherlibrary</var> { headers "src/main/cpp/<var>myotherlibrary</var>/include" }
}
buildFeatures { prefabPublishing = true }prefab { create("<var>mylibrary</var>") { headers = "src/main/cpp/<var>mylibrary</var>/include" }
create("<var>myotherlibrary</var>") { headers = "src/main/cpp/<var>myotherlibrary</var>/include" }
}
في هذا المثال، سيتم تجميع مكتبتَي mylibrary
وmyotherlibrary
من ndk-build أو CMake external native build
في حزمة AAR التي أنشأتها عملية الإنشاء، وسيصدِّر كل منهما الرؤوس
من الدليل المحدّد إلى العناصر التابعة له.
ملاحظة: بالنسبة إلى مستخدمي الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، تغيّرت إعدادات الضبط لاستيراد المكتبات الأصلية المُنشأة مسبقًا. لمزيد من المعلومات، يُرجى الاطّلاع على ملاحظات الإصدار 4.0.
توافق R8 مع البيانات الوصفية في Kotlin
تستخدِم Kotlin بيانات وصفية مخصّصة في ملفات فئات Java لتحديد تراكيب لغة Kotlin. يتيح الإصدار R8 الآن الاحتفاظ بالبيانات الوصفية
في Kotlin وإعادة كتابتها لدعم تصغير مكتبات Kotlin وتطبيقاتها بالكامل
باستخدام kotlin-reflect
.
للاحتفاظ بالبيانات الوصفية لـ Kotlin، أضِف قواعد الاحتفاظ التالية:
-keep class kotlin.Metadata { *; }
-keepattributes RuntimeVisibleAnnotations
سيؤدي ذلك إلى توجيه R8 إلى الاحتفاظ بالبيانات الوصفية لـ Kotlin لجميع الفئات التي يتم حفظها مباشرةً.
لمزيد من المعلومات، يُرجى الاطّلاع على مقالة تصغير مكتبات Kotlin وتطبيقاتها باستخدام ميزة Kotlin reflection مع R8{:.external} على Medium.
الأحكام في الإصدارات المخصّصة لتصحيح الأخطاء
عند إنشاء إصدار تصحيح الأخطاء من تطبيقك باستخدام الإصدار 4.1.0 من "مكوّن Android Gradle المكوّن" والإصدارات الأحدث، سيعيد المُجمِّع المضمّن (D8) كتابة رمز تطبيقك لتفعيل التأكيدات في وقت الترجمة، ما يضمن لك دائمًا تفعيل عمليات التحقّق من التأكيدات.
تغييرات السلوك
إزالة ذاكرة التخزين المؤقت لإنشاء المكوّن الإضافي لنظام Gradle المتوافق مع Android
تمت إزالة ذاكرة التخزين المؤقت لإنشاء AGP في الإصدار 4.1 من AGP. تم تقديم ذاكرة التخزين المؤقت لإنشاء AGP سابقًا في الإصدار 2.3 من AGP تكميلاً لذاكرة التخزين المؤقت لإنشاء Gradle، ولكن تم استبدال ذاكرة التخزين المؤقت لإنشاء AGP بالكامل بذاكرة التخزين المؤقت لإنشاء Gradle في الإصدار 4.1 من AGP. لا يؤثّر هذا التغيير في وقت الإنشاء.
تم إيقاف مهمة cleanBuildCache
وسمات android.enableBuildCache
و
android.buildCacheDir
نهائيًا وسيتمّت إزالتها في IDE
AGP 7.0. لا يكون للملكية android.enableBuildCache
أي تأثير حاليًا،
في حين أنّ الملكية android.buildCacheDir
ومهمّة cleanBuildCache
ستظلان صالحتَين حتى الإصدار 7.0 من AGP لحذف أي محتوًى حالي من ذاكرة التخزين المؤقت لإنشاء AGP.
انخفاض كبير في حجم التطبيقات التي تستخدم ميزة "تصغير حجم الرموز"
بدءًا من هذا الإصدار، لم يعُد يتم الاحتفاظ بالحقول من فئات R تلقائيًا، ما قد يؤدي إلى توفير كبير في حجم حِزم APK للتطبيقات التي تتيح تصغير الرموز البرمجية. من المفترض ألا يؤدي ذلك إلى تغيير في السلوك ما لم يكن يتم الوصول إلى فئات R من خلال التأمل، وفي هذه الحالة، من الضروري إضافة قواعد الاحتفاظ بفئات R هذه.
تمت إعادة تسمية الخاصية android.namespacedRClass إلى android.nonTransitiveRClass
تمت إعادة تسمية العلامة التجريبية android.namespacedRClass
ليصبح اسمها
android.nonTransitiveRClass
.
يتم ضبط هذه العلامة في ملف gradle.properties
، وهي تتيح ضبط مساحة الاسم لكل
فئة R في المكتبة بحيث لا تتضمّن فئة R سوى
الموارد التي تمّ الإعلان عنها في المكتبة نفسها وليس أيًّا من موارد
المكتبة الاعتمادية، ما يؤدي إلى تقليل حجم فئة R لهذه المكتبة.
لغة Kotlin DSL: تمت إعادة تسمية coreLibraryDesugaringEnabled
تم
تغيير خيار تجميع Kotlin DSL coreLibraryDesugaringEnabled
إلى isCoreLibraryDesugaringEnabled
.
لمزيد من المعلومات عن هذا الخيار، يُرجى الاطّلاع على
إتاحة إزالة رمز Java 8 والإصدارات الأحدث من واجهة برمجة التطبيقات (مكوّن إضافي لنظام Gradle المتوافق مع Android 4.0.0 والإصدارات الأحدث).
خصائص الإصدار التي تمّت إزالتها من فئة BuildConfig في مشاريع المكتبات
بالنسبة إلى مشاريع المكتبات فقط، تمت إزالة السمتَين BuildConfig.VERSION_NAME
و
BuildConfig.VERSION_CODE
من فئة
BuildConfig
التي تم إنشاؤها لأنّ هاتين القيمتَين الثابتتَين لم تعكسا
القيم النهائية لرمز إصدار التطبيق واسمه، وبالتالي كانت
مضلِّلة. بالإضافة إلى ذلك، تم تجاهل هذه القيم أثناء دمج البيان.
في إصدار مستقبلي من المكوّن الإضافي لنظام Gradle المتوافق مع Android، ستتم أيضًا إزالة السمتَين versionName
و
versionCode
من لغة برمجة التطبيقات المحدودة (DSL) للمكتبات.
لا تتوفّر حاليًا طريقة للوصول تلقائيًا إلى رمز/اسم إصدار التطبيق
من مشروع فرعي للمكتبة.
بالنسبة إلى وحدات التطبيق، لن يحدث أي تغيير، وسيظل بإمكانك تحديد قيم لسمتي
versionCode
وversionName
في لغة وصف البيانات، وسيتم نشر هذه القيم في
بيان التطبيق وحقل BuildConfig
.
ضبط مسار NDK
يمكنك ضبط المسار إلى تثبيت NDK المحلي باستخدام السمة android.ndkPath
في ملف build.gradle
الخاص بالوحدة.
android {
ndkPath "your-custom-ndk-path"
}
android {
ndkPath = "your-custom-ndk-path"
}
في حال استخدام هذه السمة مع
السمة android.ndkVersion
،
يجب أن يحتوي هذا المسار على إصدار NDK يتطابق مع android.ndkVersion
.
تغييرات في سلوك اختبار وحدات المكتبة
لقد غيّرنا سلوك طريقة تجميع اختبارات وحدات المكتبة وتشغيلها. يتم الآن تجميع اختبارات الوحدات الخاصة بالمكتبة وتشغيلها على فئات وقت التشغيل/التجميع للمكتبة نفسها، ما يؤدي إلى استخدام اختبار الوحدة للمكتبة بالطريقة نفسها التي يستخدمها المشاريع الفرعية الخارجية. يؤدي هذا الإعداد عادةً إلى اختبار أفضل.
في بعض الحالات، قد تواجه اختبارات وحدات المكتبة التي تستخدِم ربط البيانات عدم توفّر فئات DataBindingComponent
أو BR
. يجب نقل هذه الاختبارات إلى اختبار مُزوَّد بأدوات قياس في project
androidTest
، لأنّ تجميع هذه الفئات وتشغيلها في
اختبار الوحدة قد يؤدي إلى ظهور نتيجة غير صحيحة.
إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا
تم إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا، وهو غير متوافق مع الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لمزيد من المعلومات عن حزمة تطوير البرامج (SDK) المتوقّفة نهائيًا من Fabric ونقل البيانات إلى حزمة تطوير البرامج (SDK) لمنصّة Firebase Crashlytics، اطّلِع على الترقية إلى حزمة تطوير البرامج (SDK) لمنصّة Firebase Crashlytics.