سواء كان رمز المصدر مكتوبًا بلغة Java أو Kotlin أو كليهما، هناك عدة أماكن يجب فيها اختيار إصدار لغة JDK أو Java لتصميمك.
مسرد المصطلحات
- حزمة تطوير Java (JDK)
-
تحتوي حزمة تطوير Java (JDK)
على ما يلي:
- الأدوات، مثل التجميع والمحلل ومنشئ الأرشيف. وتُستخدم هذه المعلومات وراء الكواليس أثناء التصميم لإنشاء التطبيق.
- المكتبات التي تحتوي على واجهات برمجة تطبيقات يمكنك طلبها من رمز المصدر بلغة Kotlin أو Java. يُرجى العلم أنّ بعض الدوال غير متوفرة على Android.
- آلة Java الافتراضية (JVM)، وهي عبارة عن مترجم ينفّذ تطبيقات Java. ويمكنك استخدام JVM لتشغيل بيئة التطوير المتكاملة (IDE) من "استوديو Android" وأداة إنشاء Gradle. ولا يتم استخدام JVM على أجهزة Android أو أدوات المحاكاة.
- وقت تشغيل JetBrains (JBR)
- وقت تشغيل JetBrains (JBR) هو نظام JDK محسّن يتم توزيعه من خلال "استوديو Android". يتضمّن هذا الإصدار العديد من التحسينات لاستخدامها في "استوديو YouTube" ومنتجات JetBrains ذات الصلة، ولكن يمكن استخدامها أيضًا لتشغيل تطبيقات Java أخرى.
كيف أختار JDK لتشغيل "استوديو Android"؟
ننصحك باستخدام JBR لتشغيل "استوديو Android". تم نشر هذه الأداة واستخدامها لاختبار "استوديو Android"، كما أنّها تشمل تحسينات لتعزيز الاستخدام الأمثل لـ "استوديو Android". للتأكد من ذلك، لا تضبط متغيّر البيئة STUDIO_JDK
.
تبحث النصوص البرمجية لبدء التشغيل في "استوديو Android" عن JVM بالترتيب التالي:
- متغيّر بيئة واحد (
STUDIO_JDK
) - دليل
studio.jdk
(في توزيعة "استوديو Android") - دليل
jbr
(وقت تشغيل JetBrains) في توزيع Android Studio. يُنصح به. - متغيّر بيئة واحد (
JDK_HOME
) - متغيّر بيئة واحد (
JAVA_HOME
) java
قابل للتنفيذ في متغيّر البيئةPATH
.
كيف أختار نظام JDK الذي يدير إصدارات Gradle الخاصة بي؟
إذا كنت تشغِّل Gradle باستخدام الأزرار في "استوديو Android"، يُستخدَم ملف 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) > Settings (الإعدادات) > Build, Execution, Deployment > Build Tools > 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".
تُفعِّل وحدات الماكرو اختيار مسار JDK للمشروع الديناميكي:
JAVA_HOME
: يستخدم متغير البيئة الذي يحمل الاسم نفسهGRADLE_LOCAL_JAVA_HOME
: يستخدم السمةjava.home
في ملف.gradle/config.properties
الذي يتم ضبطه تلقائيًا على "وقت تشغيل JetBrains".
يتم استخدام دالة JDK المحدَّدة لتشغيل إصدار Gradle وحل مراجع واجهة برمجة تطبيقات JDK، وذلك عند تعديل النصوص البرمجية للإنشاء ورمز المصدر. يُرجى العِلم أنّ السياسة 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
}
رائع
android {
...
compileSdk 33
}
يتوافق كل إصدار من Android مع إصدار معيّن من ملف JDK ومجموعة فرعية من واجهات برمجة تطبيقات Java المتاحة. إذا كنت تستخدم واجهة برمجة تطبيقات Java API متوفّرة في 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)
}
}
رائع
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
}
}
رائع
android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
}
}
ما هي ميزات Java الثنائية التي يمكن استخدامها عند تجميع مصدر Kotlin أو Java؟
ويؤدي تحديد targetCompatibility
وjvmTarget
إلى تحديد إصدار تنسيق فئة Java المستخدَم عند إنشاء رمز بايت لمصدر Java وKotlin المجمّع، على التوالي.
كانت بعض ميزات Kotlin موجودة قبل إضافة ميزات Java المكافئة.
كان على المبرمجين الأوائل لـ Kotlin إنشاء طريقتهم الخاصة لتمثيل ميزات 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"
}
}
رائع
android {
compileOptions {
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget '17'
}
}