الإصدار 3.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث يتيح جميع ميزات لغة Java 7 ومجموعة فرعية من ميزات لغة Java 8 التي تختلف حسب إصدار النظام الأساسي. فعندما إنشاء تطبيقك باستخدام الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، يمكنك استخدام بعض واجهات برمجة تطبيقات لغة Java 8 بدون الحاجة إلى الحد الأدنى لمستوى واجهة برمجة التطبيقات التطبيق.
تصف هذه الصفحة ميزات لغة Java 8 التي يمكنك استخدامها، وكيفية قم بتهيئة مشروعك لاستخدامها، وأي مشكلات معروفة قد تواجهها. يمكنك مشاهدة الفيديو التالي للحصول على نظرة عامة على ميزات اللغة في Java 8.
يوفّر المكوّن الإضافي لنظام Gradle المتوافق مع Android دعمًا مدمجًا لاستخدام بعض أنواع Java 8
ميزات اللغة ومكتبات الجهات الخارجية التي تستخدمها. سلسلة الأدوات التلقائية
تنفذ ميزات اللغة الجديدة من خلال إجراء
عمليات تحويل رمز البايت، المسماة desugar
، كجزء من التحويل البرمجي D8/R8
من ملفات الفئة إلى كود DEX، كما هو موضح في الشكل 1.
![إتاحة ميزة لغة Java 8 باستخدام رمز البايت "desugar"
عمليات التحويل](https://developer.android.google.cn/static/studio/images/write/desugar_diagram.png?authuser=19&hl=ar)
desugar
وعمليات تحويل رمز البايت.
دعم ميزة لغة Java 8 (المكوّن الإضافي لنظام Gradle المتوافق مع Android الإصدار 3.0.0 أو الإصدارات الأحدث)
لبدء استخدام ميزات لغة Java 8 المتوافقة:
- تحديث المكوّن الإضافي لنظام Gradle المتوافق مع Android إلى 3.0.0 أو أحدث.
- لكل وحدة تستخدم Java 8
ميزات اللغة (إما في التعليمات البرمجية المصدر الخاصة بها أو من خلال التبعيات)،
قم بتحديث ملف
build.gradle
أوbuild.gradle.kts
الخاص بالوحدة كما هو موضح أدناه:
Kotlin
android { ... // Configure only for each module that uses Java 8 // language features (either in its source code or // through dependencies). compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } // For Kotlin projects kotlinOptions { jvmTarget = "1.8" } }
Groovy
android { ... // Configure only for each module that uses Java 8 // language features (either in its source code or // through dependencies). compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // For Kotlin projects kotlinOptions { jvmTarget = "1.8" } }
عند إنشاء تطبيقك باستخدام الإصدار 3.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android والإصدارات الأحدث، لا يدعم المكون الإضافي جميع ميزات لغة Java 8. اللغة التالية على جميع مستويات واجهة برمجة التطبيقات:
ميزة لغة Java 8 | ملاحظات |
---|---|
تعبيرات لامدا | لا يدعم Android تسلسل وتعبيرات لامدا. |
مراجع الطُرق | |
كتابة التعليقات التوضيحية | لا تتوفر معلومات التعليقات التوضيحية حول النوع إلا في وقت التجميع،
وليس في وقت التشغيل تتيح المنصة
TYPE
في المستوى 24 من واجهة برمجة التطبيقات والمستويات الأدنى، وليس ElementType.TYPE_USE أو
ElementType.TYPE_PARAMETER
|
الطرق التلقائية والثابتة للواجهة | |
تعليقات توضيحية متكرّرة |
بالإضافة إلى ميزات لغة Java 8 هذه، يتضمّن المكوّن الإضافي لنظام Gradle المتوافق مع Android
يوسِّع الإصدار 3.0.0 والإصدارات الأعلى من
try
-with-resources على جميع مستويات واجهات برمجة تطبيقات Android.
لا يعمل Desugar
MethodHandle.invoke
أو
MethodHandle.invokeExact
إذا كان رمز المصدر أو إحدى تبعيات الوحدات تستخدم إحدى هذه الطرق،
يجب تحديد minSdkVersion 26
أو أعلى. وبخلاف ذلك، تتلقى
الخطأ التالي:
Dex: Error converting bytecode to dex:
Cause: signature-polymorphic method called without --min-sdk-version >= 26
في بعض الحالات، قد لا تستخدم الوحدة invoke
أو invokeExact
.
حتى عند تضمينها في تبعية مكتبة. لمواصلة استخدام
تلك المكتبة بـ minSdkVersion 25
أو أقل،
تفعيل تخفيض حجم الرموز لإزالة
والطرق غير المستخدمة. إذا لم يفلح ذلك، ففكر في استخدام مكتبة بديلة
لا يستخدم الطرق غير المتوافقة.
إزالة الخصائص التفصيلية للغة Java 8 والإصدارات الأحدث على Android Gradle
الإصدار 3.0.0 والإصدارات الأحدث منه، ولا يؤدي إلى إنشاء أي فئات وواجهات برمجة تطبيقات إضافية
(مثل java.util.stream.*
) متاحة للاستخدام على إصدارات Android القديمة.
يتوفّر الدعم الخاص بإزالة لغة برمجة تطبيقات Java جزئيًا من خلال نظام Gradle المتوافق مع Android
الإصدار 4.0.0 أو إصدار أحدث، كما هو موضح في القسم التالي.
دعم إزالة كسر واجهة برمجة التطبيقات Java 8 أو الإصدارات الأحدث (الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث)
إذا كنت تنشئ تطبيقك باستخدام الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو إصدار أحدث، والمكون الإضافي دعم استخدام عدد من واجهات برمجة تطبيقات لغات Java 8 بدون تتطلب حدًا أدنى لمستوى واجهة برمجة التطبيقات لتطبيقك. باستخدام المكوّن الإضافي لنظام Gradle المتوافق مع Android 7.4.0 أو المزيد، يتوفر أيضًا عدد من واجهات برمجة تطبيقات لغة Java 11 الإصدار 2.0.0 أو الإصدارات الأحدث من المكتبة.
من الممكن الحصول على هذا الدعم الإضافي لإصدارات النظام الأساسي القديمة بسبب المكوِّن الإضافي.
4.0.0 والإصدارات الأعلى تعمل على توسيع نطاق المحرك إزالة الخصائص الشفهية إلى لغة البرمجة Java أيضًا
واجهات برمجة التطبيقات. يمكنك تضمين واجهات برمجة التطبيقات للّغات العادية التي كانت متوفّرة فقط في
أحدث إصدارات Android (مثل java.util.streams
) في التطبيقات التي تتوافق مع الإصدارات الأقدم
من Android.
تتوفّر المجموعة التالية من واجهات برمجة التطبيقات عند إنشاء تطبيقك باستخدام نظام التشغيل Android. الإصدار 4.0.0 من المكوّن الإضافي لنظام Gradle أو الإصدارات الأحدث:
- أحداث البث المتسلسلة (
java.util.stream
) - مجموعة فرعية من
java.time
java.util.function
- الإضافات الأخيرة إلى "
java.util.{Map,Collection,Comparator}
" - اختيارية (
java.util.Optional
وjava.util.OptionalInt
وjava.util.OptionalDouble
) وبعض الصفوف الجديدة - بعض الإضافات إلى
java.util.concurrent.atomic
(طرق جديدة علىAtomicInteger
وAtomicLong
وAtomicReference
) ConcurrentHashMap
(مع إصلاحات الأخطاء لنظام Android 5.0)
باستخدام الإصدار 7.4.0 من المكوّن الإضافي لنظام Gradle المتوافق مع Android أو الإصدارات الأحدث، تتم إضافة واجهات برمجة تطبيقات Java 11 الإضافية
متاحة مثل مجموعة فرعية من حزمة java.nio.file
.
للاطّلاع على قائمة كاملة بواجهات برمجة التطبيقات المتاحة، يمكنك الانتقال إلى واجهات برمجة تطبيقات Java 8 والإصدارات الأحدث المتاحة من خلال إزالة التصنيف أو واجهات برمجة تطبيقات Java 11 والإصدارات الأحدث المتاحة من خلال إزالة التصنيف
لدعم واجهات برمجة التطبيقات الخاصة باللغات هذه، يجمع المكوّن الإضافي ملف DEX منفصل. التي تتضمن تنفيذًا لواجهات برمجة التطبيقات المفقودة وإدراجها في تطبيقك. تؤدي عملية إزالة التصنيف إلى إعادة كتابة رمز التطبيق لاستخدام هذه المكتبة بدلاً من ذلك في وقت التشغيل.
لتفعيل دعم واجهات برمجة التطبيقات لهذه اللغات على أي إصدار من نظام التشغيل Android، النظام الأساسي:
- تحديث المكوّن الإضافي لنظام Gradle المتوافق مع Android إلى 4.0.0 (أو أعلى).
- أدرِج ما يلي في وحدة التطبيق.
ملف
build.gradle
أوbuild.gradle.kts
:
Kotlin
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled = true } compileOptions { // Flag to enable support for the new language APIs // For AGP 4.1+ isCoreLibraryDesugaringEnabled = true // For AGP 4.0 // coreLibraryDesugaringEnabled = true // Sets Java compatibility to Java 8 sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } } dependencies { // For AGP 7.4+ coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") // For AGP 7.3 // coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.2.3") // For AGP 4.0 to 7.2 // coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.9") }
Groovy
android { defaultConfig { // Required when setting minSdkVersion to 20 or lower multiDexEnabled true } compileOptions { // Flag to enable support for the new language APIs coreLibraryDesugaringEnabled true // Sets Java compatibility to Java 8 sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { // For AGP 7.4+ coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.3' // For AGP 7.3 // coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.2.3' // For AGP 4.0 to 7.2 // coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.9' }
تجدر الإشارة إلى أنّك قد تحتاج أيضًا إلى تضمين مقتطف الرمز السابق في إحدى المكتبات.
الخاصة بالوحدة build.gradle
أو build.gradle.kts
في الحالات التالية:
تستخدم اختبارات الآلات الموسيقية في وحدة المكتبة واجهات برمجة التطبيقات للغات (إما مباشرةً أو من خلال وحدة المكتبة أو تبعياتها). هذا حتى يتم توفير واجهات برمجة التطبيقات المفقودة لحزمة APK التجريبية التي تم قياسها.
عليك تشغيل أداة Lint في وحدة المكتبة بشكل منفصل. الهدف من ذلك هو المساعدة تتعرّف أداة Lint على الاستخدامات الصالحة لواجهات برمجة التطبيقات للّغة وتتجنّب الإبلاغ عن الخطأ. الجديدة.
كما تجدر الإشارة أيضًا إلى أنه يمكن الجمع بين إزالة لغة برمجة التطبيقات مع تقليص الصفحات، عند استخدام جهاز تقليص R8.
الإصدارات
يعرض الجدول التالي إصدارات مكتبة واجهة برمجة التطبيقات Java 8+ الحد الأدنى لإصدار المكوّن الإضافي لنظام Gradle المتوافق مع Android الذي يتوافق مع كل إصدار:
الإصدار | الحد الأدنى لإصدار المكوّن الإضافي لنظام Gradle المتوافق مع Android |
---|---|
1.1.9 | 4.0.0 |
1.2.3 | 7.3.0 |
2.0.3 | 7.4.0-alpha10 |
للحصول على تفاصيل حول إصدارات مكتبة واجهة برمجة تطبيقات Java 8+ ، يُرجى الاطّلاع على
ملف CHANGELOG.md
في مستودع GitHub desugar_jdk_libs
.