الإصدار 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 الميزات الجديدة التالية.
التوافق مع لغة DSL لبرامج Kotlin النصية
للمساعدة في تحسين تجربة التعديل لمستخدمي نصوص الإنشاء بلغة Kotlin، تم الآن تحديد لغة DSL وواجهات برمجة التطبيقات الخاصة بالإصدار 4.1 من المكوّن الإضافي لنظام Android Gradle في مجموعة من واجهات Kotlin بشكل منفصل عن فئات التنفيذ الخاصة بها. ويعني هذا أنّ:
- يتم الآن الإعلان صراحةً عن إمكانية القيم الفارغة وإمكانية التغيير في أنواع Kotlin.
- يتم نشر المستندات التي يتم إنشاؤها من هذه الواجهات في مرجع Kotlin API.
- تم تحديد مساحة واجهة برمجة التطبيقات الخاصة بالمكوّن الإضافي لنظام Gradle المتوافق مع Android بوضوح، وذلك لتسهيل توسيع نطاق عمليات إنشاء تطبيقات Android في المستقبل.
ملاحظة مهمة: إذا كنت قد استخدمت نصوص إنشاء KTS أو كنت تستخدم Kotlin في
buildSrc
، قد يؤدي ذلك إلى حدوث مشاكل في توافق المصدر مع بعض الأخطاء
التي كانت تظهر كأخطاء في وقت التشغيل في الإصدارات السابقة.
تم الآن تعريف أنواع المجموعات المصمَّمة ليتم تغييرها في DSL بشكل موحّد على النحو التالي:
val collection: MutableCollectionType
وهذا يعني أنّه لم يعُد من الممكن كتابة ما يلي في نصوص Kotlin البرمجية لبعض المجموعات التي كانت تتيح ذلك في السابق:
collection = collectionTypeOf(...)
ومع ذلك، يمكن تعديل المجموعة بشكل موحّد، لذا من المفترض أن تعمل collection += …
وcollection.add(...)
الآن في كل مكان.
إذا واجهت أي مشاكل عند ترقية مشروع يستخدم واجهات برمجة التطبيقات ولغة DSL الخاصة بإضافة Android Gradle Kotlin، يُرجى الإبلاغ عن خطأ.
تصدير تبعيات C/C++ من ملفات AAR
أضاف الإصدار 4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android إمكانية استيراد حِزم Prefab في ملحقات AAR. في الإصدار 4.1 من "مكوّن Android الإضافي لبرنامج Gradle"، أصبح بإمكانك الآن تصدير المكتبات من الإصدار الأصلي الخارجي في ملف 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 في حزمة 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 مع R8{:.external} على Medium.
عمليات التأكّد في الإصدارات المخصّصة لتصحيح الأخطاء
عند إنشاء إصدار تصحيح الأخطاء من تطبيقك باستخدام الإصدار 4.1.0 أو إصدار أحدث من Android Gradle Plugin، سيعيد المترجم البرمجي المضمّن (D8) كتابة رمز تطبيقك لتفعيل عمليات التأكّد في وقت الترجمة البرمجية، وبالتالي ستكون عمليات التأكّد نشطة دائمًا.
تغييرات السلوك
إزالة ذاكرة التخزين المؤقت لعمليات الإنشاء في المكوّن الإضافي لنظام Gradle المتوافق مع Android
تمت إزالة ذاكرة التخزين المؤقت لإنشاء AGP في الإصدار 4.1 من AGP. تمت إضافة ذاكرة التخزين المؤقت لتصميم AGP في الإصدار 2.3 من AGP لتكمّل ذاكرة التخزين المؤقت لتصميم Gradle، ولكن تم استبدالها بالكامل بذاكرة التخزين المؤقت لتصميم Gradle في الإصدار 4.1 من AGP. لا يؤثّر هذا التغيير في وقت الإنشاء.
تم إيقاف المهمة cleanBuildCache
والسمتَين android.enableBuildCache
وandroid.buildCacheDir
نهائيًا، وستتم إزالتهما في الإصدار 7.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لا تؤثر السمة android.enableBuildCache
حاليًا في أي شيء،
بينما ستظل السمة android.buildCacheDir
والمهمة cleanBuildCache
تعملان حتى الإصدار 7.0 من "مكوّن Android الإضافي في Gradle" لحذف أي محتوى حالي من ذاكرة التخزين المؤقت لعمليات الإنشاء في "مكوّن Android الإضافي في Gradle".
تقليل حجم التطبيقات بشكل كبير عند استخدام ميزة "تخفيض حجم الرموز"
بدءًا من هذا الإصدار، لن يتم الاحتفاظ تلقائيًا بالحقول من فئات 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 والإصدارات الأحدث (الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث).
إزالة خصائص الإصدار من فئة BuildConfig في مشاريع المكتبات
بالنسبة إلى مشاريع المكتبة فقط، تمت إزالة السمتَين BuildConfig.VERSION_NAME
وBuildConfig.VERSION_CODE
من فئة BuildConfig
التي تم إنشاؤها لأنّ هذه القيم الثابتة لم تعكس القيم النهائية لرمز الإصدار واسم التطبيق، وبالتالي كانت مضلِّلة. بالإضافة إلى ذلك، تم تجاهل هذه القيم أثناء دمج ملف البيان.
في إصدار مستقبلي من المكوّن الإضافي لنظام Gradle المتوافق مع Android، ستتم أيضًا إزالة السمتَين versionName
وversionCode
من لغة DSL الخاصة بالمكتبات.
في الوقت الحالي، ليس هناك طريقة للوصول تلقائيًا إلى رمز/اسم إصدار التطبيق
من مشروع فرعي للمكتبة.
بالنسبة إلى وحدات التطبيق، لن يحدث أي تغيير، وسيظل بإمكانك تعيين قيم versionCode
وversionName
في DSL، وسيتم نقل هذه القيم إلى ملف بيان التطبيق وحقول 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
. ويجب نقل هذه الاختبارات إلى اختبار مزوَّد بأدوات في مشروع androidTest
، لأنّ تجميعها وتشغيلها مع هذه الفئات في اختبار وحدة قد يؤدي إلى نتائج غير صحيحة.
إيقاف المكوّن الإضافي io.fabric Gradle نهائيًا
تم إيقاف المكوّن الإضافي io.fabric لنظام Gradle نهائيًا، وهو غير متوافق مع الإصدار 4.1 من المكوّن الإضافي لنظام Gradle المتوافق مع Android. لمزيد من المعلومات حول حزمة تطوير البرامج (SDK) المتوقّفة نهائيًا من Fabric ونقل البيانات إلى حزمة تطوير البرامج (SDK) من Firebase Crashlytics، اطّلِع على مقالة الترقية إلى حزمة تطوير البرامج (SDK) من Firebase Crashlytics.