لغة الجافا

الإعلانات

إستخدام خصائص لغة الجافا 8

 

 

 

يدعم اندرويد ستوديو 3.0 والإصدارات الأحدث، جميع ميزات لغة الجافا Java 7، ومجموعة فرعية من ميزات لغة الجافا Java 8..

والتي تختلف حسب إصدار النظام الأساسي.

توضح هذه الصفحة ميزات لغة Java 8 التي يمكنك إستخدامها، وكيفية تكوين مشروعك بشكلٍ صحيح لإستخدامها، و توضح أي مشكلات معروفة قد تواجهها.

انظر أيضاً الفيديو التالي للحصول على نظرة عامة.

ملاحظة: عند تطوير تطبيقات لنظام اندرويد، فإن إستخدام ميزات لغة Java 8 يعتبر إختيارياً.

يمكنك الإحتفاظ بقيم توافق “المصدر و الهدف” الخاصة بمشروعك، المضبوطة على Java 7، ولكن لا يزال يتعين عليك التجميع “compile” بإستخدام JDK 8.

يوفر اندرويد ستوديو، دعماً مدمجاً لإستخدام ميزات لغة Java 8 معينة، ومكتبات الجهات الخارجية التي تستخدمها.

كما هو موضح في الشكل 1، تقوم سلسلة الأدوات الإفتراضية، بتنفيذ ميزات اللغة الجديدة، عن طريق إجراء تحويلات الرمز الثنائي،

والتي تسمى desugar. على مخرجات برنامج التجميع “compiler” الخاص بـ javac.

لم يعد إطار العمل Jack مدعوماً، ويجب عليك أولاً تعطيل Jack لإستخدام دعم Java 8 المضمن في سلسلة الأدوات الإفتراضية.

الشكل 1. دعم ميزة لغة جافا 8، بإستخدام تحويلات الرمز الثنائي لـdesugar.

 

 

لبدء إستخدام ميزات لغة الجافا “Java 8” المدعومة، قم بتحديث مكون اندرويد الإضافي إلى النسخة 3.0.0 (أو أعلى).

ثم، لكل نموذج يستخدم ميزات لغة Java 8 (سواء في الكود المصدر أو من خلال الإعتمادات)، قم بتحديث توافق المصدر، و توافق الهدف إلى..

النسخة 1.8 في “مربع حوار بنية المشروع Project Structure“، كما هو موضح في الشكل 2 (انقر فوق File > Project Structure).

 

الشكل 2. دعم ميزة لغة الجافا 8 بإستخدام تحويلات الرمز الثنائي لـdesugar.

 

 

يمكنك أيضاً تكوينه مباشرةً في ملف البناء build.gradle المطابق:

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"
  }
}
ملاحظة: إذا اكتشف اندرويد ستوديو أن مشروعك يستخدم إطار عمل Jack أو Retrolambda أو DexGuard، فإن IDE سوف يستخدم دعم Java 8 المقدم من هذه الأدوات بدلاً من ذلك.

ومع ذلك ، فكر في الترحيل إلى سلسلة الأدوات الإفتراضية.

 

 

 

 

 

ميزات لغة الجافا 8 و واجهة برمجة التطبيقات المدعومة


اندرويد ستوديو لا يدعم جميع ميزات لغة Java 8، ولكن سوف يتم إضافة المزيد من الميزات في الإصدارات المستقبلية من IDE.

بناءً على إصدار minSdkVersion الذي تستخدمه، تتوفر ميزات وواجهات برمجة تطبيقات معينة الآن، كما هو موضح في الجدول أدناه.

ميزات لغة الجافا 8الإصدار المتوافق من minSdkVersion
Lambda expressionsأي منها. لاحظ أن اندرويد ستوديو لا يدعم تسلسل تعبيرات lambda.
Method referencesأي منها.
Type annotationsأي منها. مع ذلك، معلومات التعليق التوضيحي، متاحة أثناء وقت التجميع.
ولكن ليس أثناء وقت التشغيل.

يدعم النظام الأساسي أيضاً، النوع TYPE في المستوى 24 وأقل، ولكن لا يدعم ElementType.TYPE_USE أو ElementType.TYPE_PARAMETER.
Default and static interface methodsأي منها.
Repeating annotationsأي منها.
واجهة برمجة لغة الجافا 8إصدار minSdkVersion المتوافق
java.lang.annotation.Repeatableالمستوى 24 أو أعلى.
AnnotatedElement.getAnnotationsByType(Class)المستوى 24 أو أعلى.
java.util.streamالمستوى 24 أو أعلى.
java.lang.FunctionalInterfaceالمستوى 24 أو أعلى.
java.lang.reflect.Method.isDefault()المستوى 24 أو أعلى.
java.util.functionالمستوى 24 أو أعلى.

 

بالإضافة إلى ميزات لغة جافا 8 و واجهات برمجة التطبيقات المذكورة أعلاه، يعمل اندرويد ستوديو 3.0 والإصدارات الأحدث، على توسيع..

نطاق الدعم، لتجربة المصادر لكافة مستويات واجهة برمجة الاندرويد.

حالياً لا يقوم 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 أو أقل، قم بتمكين تقليص الكود، لإزالة الدوال الغير مستخدمة.

إذا لم ينجح ذلك، ففكر في إستخدام مكتبة بديلة والتي لا تستخدم دوال غير مدعومة.

 

 

 

الترحيل إلى سلسلة الأدوات الإفتراضية


إذا اكتشف اندرويد ستوديو أن مشروعك يستخدم إطار عمل Jack أو Retrolambda أو DexGuard، فإن IDE سوف يستخدم دعم جافا 8 المقدم من هذه الأدوات بدلاً من ذلك.

ومع ذلك، مقارنة بسلسلة الأدوات الإفتراضية، فإن هذه الأدوات تفتقر إلى بعض الوظائف والدعم.

اتبع الإرشادات الموضحة في هذا القسم للإنتقال إلى سلسلة الأدوات الإفتراضية في اندرويد ستوديو.

 

 

الترحيل من Jack

 

تم إيقاف سلسلة أدوات Jack، وفقاً لهذا الإبلاغ. إذا كان مشروعك يعتمد على Jack، فيجب عليك الإنتقال لإستخدام دعم جافا 8 المدمج في سلسلة الأداوت الإفتراضية في اندرويد ستوديو.

إستخدام سلسلة الأدوات الإفتراضية، يتضمن أيضاً دعماً لمكتبات الجهات الخارجية، والتي تستخدم ميزات لغة الجافا 8، ودعماً للأدوات التي تعتمد على ملفات الفئة .class المتوسطة.

لتعطيل Jack والتبديل إلى سلسلة الأدوات الإفتراضية، ما عليك سوى إزالة jackOptions من ملف البناء build.gradle الخاص بنموذجك:

android {
    ...
    defaultConfig {
        ...
        // Remove this block.
        jackOptions {
            enabled true
            ...
        }
    }

    // Keep the following configuration in order to target Java 8.
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    // For Kotlin projects
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

 

الترحيل من Retrolambda

 

مقارنة بسلسلة الأدوات الإفتراضية في اندرويد ستوديو، Retrolambda تفتقر إلى دعم المكتبات الخارجية، التي تستخدم ميزات لغة جافا 8.

للإنتقال إلى سلسلة الأدوات الإفتراضية، قم بإزالة إعتماد Retrolambda من ملف البناء build.gradle على مستوى المشروع:

buildscript {
  ...
   dependencies {
      // Remove the following dependency.
      classpath 'me.tatarka:gradle-retrolambda:<version_number>'
   }
}

وقم بإزالة مكوّن Retrolambda و retrolambda من كل ملف build.gradle خاص بالنموذج:

// Remove the following plugin.
apply plugin: 'me.tatarka.retrolambda'
...
// Remove this block after migrating useful configurations.
retrolambda {
    ...
    // If you have arguments for the Java VM you want to keep,
    // move them to your project's gradle.properties file.
    jvmArgs '-Xmx2048m'
}

 

 

تعطيل الدعم لميزات لغة الجافا 8


إذا واجهت مشاكل متعلقة بدعم ميزات لغة جافا 8، فيمكنك تعطيلها من خلال إضافة ما يلي إلى ملف gradle.properties الخاص بك:

android.enableDesugar=false

لمساعدتنا في تحسين دعم جافا 8، يرجي الإبلاغ عن المشاكل.

 


للإطلاع على المقال باللغة الإنجليزية أضغط هنا.

الإعلانات

اترك رد