إصدارات Java في إصدارات Android

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

نظرة عامة على علاقات JDK في إصدار Gradle

مسرد المصطلحات

حزمة تطوير Java (JDK)
مجموعة أدوات تطوير Java (JDK) تحتوي على:
  • الأدوات، مثل التجميع والمحلل ومنشئ الأرشيف. تُستخدم هذه الفيديوهات وراء الكواليس خلال عملية الإنشاء إنشاء التطبيق الخاص بك.
  • المكتبات التي تحتوي على واجهات برمجة التطبيقات التي يمكنك الاتصال بها من رمز مصدر Kotlin أو Java. لاحظ أنه ليست كل الدوال المتوفرة على أجهزة Android.
  • جهاز Java الافتراضي (JVM) هو برنامج ترجمة يقوم بتنفيذ تطبيقات Java. يمكنك استخدام آلة متجه الدعم لتشغيل بيئة تطوير البرامج (IDE) الخاصة بـ "استوديو Android" وأداة إنشاء Gradle. لا يتم استخدام JVM على Android الأجهزة أو المحاكيات.
وقت تشغيل JetBrains (JBR)
وقت تشغيل JetBrains (JBR) هو نظام JDK محسّن يتم توزيعه من خلال "استوديو Android". تتضمّن الأداة العديد من التحسينات لاستخدامها في "استوديو YouTube" وJetBrains ذات الصلة ولكن يمكن استخدامها أيضًا لتشغيل تطبيقات Java الأخرى.

كيف أختار JDK لتشغيل "استوديو Android"؟

ننصحك باستخدام JBR لتشغيل "استوديو Android". لقد تم نشره الذي يتيح اختبار "استوديو Android" واستخدامه لاختباره، كما يشمل تحسينات استخدامك لـ "استوديو Android". لضمان ذلك، لا تضبط STUDIO_JDK. متغير البيئة.

تبحث النصوص البرمجية لبدء التشغيل في "استوديو Android" عن JVM على النحو التالي الترتيب:

  1. متغيّر بيئة واحد (STUDIO_JDK)
  2. دليل studio.jdk (في توزيعة "استوديو Android")
  3. دليل jbr (وقت تشغيل JetBrains)، في "استوديو Android" التوزيع. يُنصح به.
  4. متغيّر بيئة واحد (JDK_HOME)
  5. متغيّر بيئة واحد (JAVA_HOME)
  6. java قابل للتنفيذ في متغيّر البيئة PATH.

كيف أختار نظام JDK الذي يدير إصدارات Gradle الخاصة بي؟

إذا شغّلت Gradle باستخدام الأزرار في Android Studio، فسيتم تعيين JDK في تُستخدَم إعدادات "استوديو Android" لتشغيل Gradle. فإذا شغَّلت Gradle في وحدة طرفية، سواء داخل "استوديو Android" أو خارجه، هي متغيّر بيئة JAVA_HOME (إذا تم ضبطها) تحدد JDK نصوص Gradle البرمجية. إذا JAVA_HOME لم يتم ضبطها، ستستخدم الأمر java في بيئة PATH. المتغير.

للحصول على النتائج الأكثر اتساقًا، احرص على ضبط JAVA_HOME. ومتغير البيئة، ضبط Gradle JDK في "استوديو Android" على الإعدادات نفسها JDK.

عند تشغيل التصميم، تنشئ Gradle عملية تسمى برنامج خفي لأداء التصميم الفعلي. يمكن إعادة استخدام هذه العملية، طالما أن الإصدارات تستخدم نفس إصدار JDK وGradle. إعادة الاستخدام برنامج خفي يقلل الوقت اللازم لبدء تشغيل جهاز JVM جديد وتهيئة نظام التصميم.

إذا بدأت إنشاءات باستخدام إصدارات JDK أو Gradle مختلفة، البرامج الخفية، وتستهلك قدرًا أكبر من وحدة المعالجة المركزية (CPU) والذاكرة.

ضبط Gradle JDK في "استوديو Android"

لتعديل تهيئة Gradle JDK للمشروع الحالي، افتح Gradle الإعدادات من File (ملف) (أو Android Studio على نظام التشغيل macOS) > الإعدادات > الإنشاء والتنفيذ والنشر > أدوات الإنشاء > Gradle. برنامج Gradle JDK تحتوي القائمة المنسدلة على الخيارات التالية للاختيار من بينها:

  • وحدات ماكرو مثل JAVA_HOME وGRADLE_LOCAL_JAVA_HOME
  • إدخالات جدول JDK بتنسيق vendor-version مثل jbr-17 التي يتم تخزينها انتقِل إلى ملفات إعداد Android
  • تنزيل ملف JDK
  • إضافة ملف JDK محدد
  • ملفات JDK التي تم اكتشافها محليًا من تثبيت JDK التلقائي لنظام التشغيل الدليل

تم حفظ الخيار المحدَّد في الخيار "gradleJvm" في الخاص بالمشروع .idea/gradle.xml، ويتم استخدام دقة مسار JDK لتشغيل Gradle عند البدء من خلال "استوديو Android".

الشكل 1. إعدادات Gradle JDK في "استوديو Android"

تفعِّل وحدات الماكرو اختيار مسار JDK للمشروع الديناميكي:

  • JAVA_HOME: يستخدم متغير البيئة الذي يحمل الاسم نفسه
  • GRADLE_LOCAL_JAVA_HOME: يستخدِم السمة java.home في ملف .gradle/config.properties الذي يتم ضبطه تلقائيًا على "وقت تشغيل JetBrains".

يتم استخدام JDK المحدّد لتشغيل إصدار Gradle وحل JDK API. المراجع عند تعديل النصوص البرمجية للإصدار ورمز المصدر لاحظ أن سيؤدي تحديد compileSdk إلى تقييد رموز Java التي سيتم متاحة عند تعديل رمز المصدر وإنشائه.

احرص على اختيار إصدار JDK أعلى من أو يساوي JDK. والإصدارات المستخدمة بواسطة المكونات الإضافية التي تستخدمها في إصدار Gradle الخاص بك. لتحديد بالحد الأدنى المطلوب من إصدار JDK للمكوّن الإضافي لنظام Gradle المتوافق مع Android (AGP)، فاطلع على جدول التوافق في ملاحظات الإصدار.

على سبيل المثال، يتطلب الإصدار 8.x من المكوّن الإضافي لنظام Gradle المتوافق مع Android تثبيت JDK 17. إذا حاولت تشغيل إصدار Gradle الذي يستخدمه مع إصدار سابق من JDK، فستبلغ عن رسالة مثل:

An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.
   > Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
      Your current JDK is located in /usr/local/buildtools/java/jdk11
      You can try some of the following options:
       - changing the IDE settings.
       - changing the JAVA_HOME environment variable.
       - changing `org.gradle.java.home` in `gradle.properties`.

ما هي واجهات برمجة تطبيقات Java التي يمكنني استخدامها في رمز مصدر Java أو Kotlin؟

يمكن لأحد تطبيقات Android استخدام بعض واجهات برمجة التطبيقات المحددة في JDK، لكن ليس جميعها منها. تُحدِّد حزمة تطوير البرامج (SDK) لنظام التشغيل Android عمليات تنفيذ العديد من دوال مكتبة Java. كجزء من واجهات برمجة التطبيقات المتاحة به. تحدّد السمة compileSdk نوع إصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android المُستخدَم عند تجميع رمز المصدر بلغة Kotlin أو Java.

Kotlin

android {
    ...
    compileSdk = 33
}

Groovy

android {
    ...
    compileSdk 33
}

يدعم كل إصدار من Android إصدارًا محددًا من JDK ومجموعة فرعية من لواجهات برمجة تطبيقات Java المتاحة. إذا كنت تستخدم واجهة برمجة تطبيقات Java متاحة في compileSdk غير متاح في القيمة المحدّدة minSdk، قد يكون بإمكانك استخدام واجهة برمجة التطبيقات في الإصدار السابق من Android من خلال عملية تُعرف باسم إزالة المحتوى المكتوب راجِع واجهات برمجة تطبيقات Java 11 والإصدارات الأحدث المتاحة من خلال إزالة التصنيف للاطّلاع على الميزات المتوافقة واجهات برمجة التطبيقات.

استخدِم هذا الجدول لتحديد إصدار Java المتوافق مع كل واجهة برمجة تطبيقات Android، ومكان العثور على تفاصيل حول توفُّر واجهات برمجة تطبيقات Java.

Android Java الميزات المتاحة في واجهة برمجة التطبيقات واللغات
14 (واجهة برمجة التطبيقات 34) 17 المكتبات الأساسية
13 (واجهة برمجة التطبيقات 33) 11 المكتبات الأساسية
12 (واجهة برمجة التطبيقات 32) 11 Java API
11 والإصدارات الأدنى إصدارات Android

أي JDK يجمع رمز مصدر Java؟

تحتوي سلسلة أدوات Java على JDK على المحول البرمجي لـ Java، والذي يُستخدم لتجميع أي Java رمز المصدر. يُشغِّل JDK أيضًا اختبارات javadoc والوحدة أثناء عملية الإنشاء.

يتم ضبط سلسلة الأدوات تلقائيًا على JDK المستخدَم لتشغيل Gradle. إذا كنت تستخدم القيمة التلقائية والعمل على أجهزة مختلفة (على سبيل المثال، جهازك المحلي خادم تكامل متواصل منفصل)، ونتائج إصدارك يمكن أن يختلف في حال استخدام إصدارات JDK مختلفة.

ولإنشاء إصدار أكثر اتساقًا، يمكنك تحديد إصدار سلسلة أدوات Java. تحديد ذلك:

  • تحديد موقع JDK متوافق على النظام الذي يُشغِّل الإصدار
    • في حال عدم توفُّر نظام JDK متوافق (وتم تحديد برنامج حل سلسلة أدوات)، يتم تنزيل ملف واحد.
  • تعرض واجهات برمجة تطبيقات Java لسلسلة الأدوات لتنفيذ الطلبات من رمز المصدر.
  • لتجميع مصدر Java باستخدام إصدار لغة Java.
  • يتم توفير القيم التلقائية لـ sourceCompatibility و targetCompatibility

نقترح عليك أن تحدِّد دائمًا سلسلة أدوات Java، وأن تتأكّد من تثبيت JDK المحدد أو إضافة أداة حل سلسلة الأدوات على التصميم.

يمكنك تحديد سلسلة الأدوات سواء كان رمز المصدر مكتوبًا بلغة Java، لغة Kotlin أو كليهما. حدد سلسلة الأدوات في المستوى العلوي من الوحدة ملف build.gradle(.kts).

حدد إصدار سلسلة أدوات Java على النحو التالي:

Kotlin

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

Groovy

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

ويمكن إجراء ذلك إذا كان المصدر هو Kotlin أو Java أو مزيجًا من الاثنين معًا.

يمكن أن يكون إصدار JDK لسلسلة الأدوات هو نفسه إصدار JDK المستخدم لتشغيل Gradle، ولكن ضع في اعتبارك أنها تخدم أغراضًا مختلفة.

ما هي ميزات مصدر لغة Java التي يمكنني استخدامها في رمز مصدر Java؟

تحدّد السمة sourceCompatibility ميزات لغة Java. أثناء تجميع مصدر Java. ولا يؤثر ذلك في مصدر لغة Kotlin.

إذا لم يتم تحديده، سيتم ضبطه تلقائيًا على سلسلة أدوات Java أو ويُستخدم JDK لتشغيل Gradle. ننصحك بأن تحدّد دائمًا سلسلة أدوات (مفضلة) أو sourceCompatibility.

حدِّد sourceCompatibility في ملف build.gradle(.kts) للوحدة.

Kotlin

android {
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_17
    }
}

Groovy

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
    }
}

ما هي ميزات Java الثنائية التي يمكن استخدامها عند تجميع مصدر Kotlin أو Java؟

يؤدي تحديد targetCompatibility وjvmTarget إلى تحديد Java إصدار بتنسيق الفئة يُستخدم عند إنشاء رمز بايت لـ Java وKotlin المجمّعين المصدر على التوالي.

كانت بعض ميزات Kotlin موجودة قبل إضافة ميزات Java المكافئة. كان على المبرمجين الأوائل لـ Kotlin إنشاء طريقتهم الخاصة لتمثيل هؤلاء الأشخاص الجديدة. تمت إضافة بعض هذه الميزات لاحقًا إلى Java. ومع jvmTarget مستوى لاحق، قد يستخدم المحول البرمجي لـ Kotlin بشكل مباشر ميزة Java، مما قد يؤدي إلى أداء أفضل.

يتم ضبط targetCompatibility تلقائيًا على نفس القيمة مثل sourceCompatibility, ولكن في حال تحديدها، يجب أن تكون أكبر من أو تساوي sourceCompatibility.

يتم ضبط jvmTarget تلقائيًا على إصدار toolchain.

تتوافق إصدارات Android المختلفة مع إصدارات مختلفة من Java. يمكنك يمكنك الاستفادة من ميزات Java الإضافية من خلال زيادة targetCompatibility وjvmTarget، ولكن هذا قد يجبرك أيضًا على زيادة الحد الأدنى لإصدار حزمة تطوير البرامج (SDK) لنظام التشغيل Android توفّر الميزة.

Kotlin

android {
    compileOptions {
        targetCompatibility = JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget = "17"
    }
}

Groovy

android {
    compileOptions {
        targetCompatibility JavaVersion.VERSION_17
    }
    kotlinOptions {
        jvmTarget '17'
    }
}