d8
هي أداة سطر الأوامر التي يستخدمها "استوديو Android" والمكوّن الإضافي لنظام Gradle المتوافق مع Android
استخدامها لتجميع رمز بايت Java لمشروعك إلى رمز بايت DEX يتم تشغيله
على أجهزة Android. يتيح لك d8
استخدام ميزات لغة Java 8 في
رمز التطبيق.
تم تضمين "d8
" أيضًا كأداة مستقلة في إصدار Android
الأدوات 28.0.1 والإصدارات الأحدث:
android_sdk/build-tools/version/
الاستخدام العام
لا يتطلّب d8
سوى مسارًا لرمز بايت Java المجمّع.
الذي تريد تحويله إلى رمز بايت DEX. مثلاً:
d8 MyProject/app/build/intermediates/classes/debug/*/*.class
يمكن أن يكون رمز بايت الإدخال في أي مزيج من ملفات *.class
أو
مثل JAR أو APK أو ZIP. يمكنك أيضًا تضمين
ملفات DEX لـ d8
لدمجها في مخرجات DEX، وهو أمر مفيد
عند تضمين ناتج من إصدار تزايدي.
يجمع d8
تلقائيًا رمز بايت Java إلى ملفات DEX محسَّنة.
كما يمكنك تضمين معلومات تصحيح الأخطاء
استخدامها لتصحيح أخطاء الرمز أثناء وقت التشغيل. ومع ذلك، يمكنك تضمين البيانات
لإجراء إصدار تزايدي، وتحديد الفئات التي
في ملف DEX الرئيسي، وتحديد المسارات إلى
الموارد الإضافية المطلوبة لاستخدام ميزات لغة Java 8.
d8 path-to-input-files [options]
يصف الجدول التالي العلامات الاختيارية التي يمكنك استخدامها مع d8
:
Option | الوصف |
---|---|
--debug
|
تجميع رمز بايت DEX لتضمين معلومات تصحيح الأخطاء، مثل رمز تصحيح الأخطاء الجداول. ويتم تفعيل هذا الخيار تلقائيًا. لتضمين معلومات تصحيح الأخطاء في
رمز بايت DEX، يتوقع عند تجميع ملفات DEX لإصدار الإصدار من تطبيقك
المكتبة، لذا يُرجى استخدام العلامة |
--release
|
جمِّع رمز بايت DEX بدون معلومات تصحيح الأخطاء. ومع ذلك،
يتضمن يمكنك اجتياز هذه العلامة عند تجميع رمز بايت لإصدار متاح للجميع. |
--output path
|
حدِّد المسار المطلوب لإخراج DEX. بشكل افتراضي،
تُخرج
إذا حدَّدت مسارًا واسمًا لملف ZIP أو JAR، |
--lib android_sdk/platforms/api-level/android.jar
|
حدِّد المسار إلى android.jar الخاصة بحزمة تطوير البرامج (SDK) لنظام التشغيل Android.
تكون هذه العلامة مطلوبة عند تجميع رمز بايت يستخدم
ميزات لغة Java 8
|
--classpath path
|
تحديد موارد مسار الفئة التي قد تتطلّب ميزة "d8 " تجميعها
ملفات DEX لمشروعك. وعلى وجه الخصوص، يشترط d8 منك
تحديد موارد معينة عند تجميع رمز بايت يستخدم
ميزات لغة Java 8
|
--min-api number
|
حدِّد الحد الأدنى لمستوى واجهة برمجة التطبيقات الذي تريد أن تتيحه ملفات DEX للمخرجات. |
--intermediate
|
مرِّر هذه العلامة لإعلام d8 بعدم تجميع
مجموعة كاملة من رمز بايت Java لمشروعك. تكون هذه العلامة مفيدة عندما
وتنفيذ عمليات الإنشاء التزايدية. بدلاً من تجميع ملفات DEX المحسَّنة
التي تتوقع تشغيلها على أحد الأجهزة، تنشئ d8 وسيطة
ملفات DEX وتخزّنها في الإخراج المحدّد أو المسار التلقائي
عندما تريد تجميع ملفات DEX التي تنوي تشغيلها على أحد الأجهزة، استبعاد هذه العلامة وتحديد المسار إلى فئات DEX المتوسطة كمدخل. |
--file-per-class
|
قم بتجميع كل فئة في ملفات DEX منفصلة. يتيح لك تفعيل هذه العلامة تنفيذ المزيد من عمليات الإنشاء التزايدية عن طريق إعادة تجميع الفئات التي تغيرت فقط. عند الأداء جديدة باستخدام المكوّن الإضافي لنظام Gradle المتوافق مع Android، فإن هذا التحسين مُفعَّلة تلقائيًا. لا يمكنك استخدام هذه العلامة أثناء تحديد
|
--no-desugaring
|
إيقاف ميزات اللغة في Java 8 لا تستخدِم هذه العلامة إلا إذا كنت لا تقصد ذلك. لتجميع رمز بايت Java يستخدم ميزات لغة Java 8. |
--main-dex-list path
|
عليك تحديد ملف نصي يحتوي على الفئات التي يجب أن تتضمّنها لأنّ نظام Android يحمّل ملف DEX الرئيسي أولاً عند بدء التشغيل في تطبيقك، يمكنك استخدام هذه العلامة لتحديد أولويات فئات معينة عند بدء التشغيل عن طريق تجميعها في ملف DEX الرئيسي. هذا مفيد بشكل خاص عند التوافق مع دالة التحويل القديمة القديمة، نظرًا لأن الفئات في نظام DEX الرئيسي فقط توفّر الملف في وقت التشغيل إلى أن يتم التحميل. تجدر الإشارة إلى أنّ كل ملف من ملفات DEX يجب أن يستوفي متطلبات
الحدّ الأقصى لعدد الملفات المرجعية هو 64 ألف لذا، لا تفعل
تحدد عددًا كبيرًا جدًا من الفئات لملف DEX الرئيسي، أو ستحصل على
خطأ في التجميع. بشكل افتراضي، عند تحديد الصفوف باستخدام
لا يمكنك استخدام هذه العلامة أثناء تحديد
|
--pg-map file
|
استخدام file كملف ربط للتوزيع |
--file-per-class-file
|
يمكنك إنتاج ملف DEX منفصل لكل ملف فئة إدخال. الحفاظ على الصفوف الاصطناعية مع صفها الأصلي |
--desugared-lib file
|
حدِّد إعداد مكتبة تم إلغاء إذن الوصول إليها. file هو ملف إعداد مكتبة تمت إزالته بتنسيق JSON . |
--main-dex-rules file
|
يحتفظ Proguard بقواعد الفصول الدراسية التي يجب وضعها في ملف DEX الأساسي. |
--main-dex-list-output file
|
إخراج قائمة DEX الرئيسية الناتجة في |
|
يتم فرض تفعيل رمز التأكيد الذي تم إنشاؤه من خلال javac .
|
|
يجب إيقاف رمز التأكيد الذي تم إنشاؤه من قِبل javac . هذا النمط
هي المعالجة التلقائية لرمز تأكيد البيانات javac عند
لإنشاء ملفات DEX.
|
|
لا تغيِّر رمز التأكيد الذي تم إنشاؤه من قِبل javac . هذا النمط
هي المعالجة التلقائية لرمز تأكيد البيانات javac عند
جارٍ إنشاء class ملف.
|
|
تغيير التأكيد الذي تم إنشاؤه باستخدام javac وkotlinc
لاستدعاء الطريقة handler method مع كل تأكيد
بشكل خاطئ بدلاً من رميها. تم تحديد handler method.
كاسم فئة متبوعًا بنقطة ثم اسم الطريقة. تشير رسالة الأشكال البيانية
يجب أن تستخدم طريقة المعالج وسيطة واحدة من النوع
تكون java.lang.Throwable ونوع الإرجاع void .
|
--thread-count number of threads
|
حدِّد عدد سلاسل المحادثات المُراد استخدامها في التجميع. إذا لم يتم تحديده، يستند الرقم إلى إشارات إرشادية، آخذًا في الاعتبار النوى في الاعتبار. |
--map-diagnostics[
:type] from-level to-level
|
تم الإبلاغ عن بيانات تشخيص الخريطة لـ type (القيمة التلقائية لأي) على أنه from-level إلى to-level، حيث from-level وto-level هي إحدى "المعلومات" أو "التحذير" أو "الخطأ" و تكون type الاختيارية إما الطريقة البسيطة أو المؤهلة بالكامل اسم نوع Java لأداة التشخيص. في حال عدم تحديد السمة type، يتم ربط جميع بيانات التشخيص في from-level. لاحظ أنه لا يمكن تعيين أخطاء برنامج التحويل البرمجي. |
--version
|
اطبع إصدار d8 الذي تستخدمه حاليًا.
|
--help
|
طباعة نص المساعدة لاستخدام d8 .
|
تنفيذ عمليات إنشاء تدريجي
لتحسين سرعات الإصدار أثناء التطوير، مثل التكامل المستمر
، عليك توجيه d8
لتجميع مجموعة فرعية فقط من لغة Java الخاصة بمشروعك
رمز البايت. على سبيل المثال، في حال تفعيل التصدير لكل فئة، يمكنك إعادة تجميع
الفئات التي تم تعديلها منذ الإصدار السابق.
يؤدي الأمر التالي إلى إنشاء إصدار تزايدي لمجموعة من الفئات وتفعيل الأمر الفهرسة لكل فئة. يحدد الأمر أيضًا دليل إخراج البناء التزايدي.
d8 MainActivity.class R.class --intermediate --file-per-class --output ~/build/intermediate/dex
عندما تُجري d8
عملية إنشاء متزايدة، يتم تخزين معلومات إضافية في
ناتج DEX. يستخدم d8
هذه المعلومات لاحقًا لمعالجة
--main-dex-list
وادمج ملفات DEX خلال إصدار كامل لتطبيقك.
على سبيل المثال، عند معالجة فئات lambda في Java 8، يتتبّع d8
الفئات
يتم إنشاء فئات لامدا لكل فئة إدخال. أثناء عملية الإنشاء الكاملة، عند d8
تتضمن فئة في ملف DEX الرئيسي، فإنها تراجع بيانات التعريف للتأكد من أن جميع
من فئات لامدا التي تم إنشاؤها لهذه الفئة ضمن القسم
DEX.
إذا كنت قد قمت بالفعل بتجميع كل رموز البايت الخاصة بمشروعك في ملفات DEX
عبر العديد من الإصدارات التدريجية، قم بإجراء بناء كامل من خلال تمرير
دليل ملفات DEX الوسيطة إلى d8
، كما هو موضح في الأمر التالي.
بالإضافة إلى ذلك، يمكنك تحديد الفئات التي تريد أن يجمعها d8
ضمن
DEX باستخدام --main-dex-list
. ولأن المدخل هو مجموعة من الملفات التي
التي تم تجميعها بالفعل في رمز بايت DEX، فإن هذا الإصدار سيكتمل بشكل أسرع
من التصميم النظيفة.
d8 ~/build/intermediate/dex --release --main-dex-list ~/build/classes.txt --output ~/build/release/dex
تجميع رمز بايت يستخدم ميزات لغة Java 8
يتيح لك d8
استخدام ميزات لغة Java 8
في التعليمة البرمجية من خلال عملية تجميع تسمى إزالة التعليقات. الإحالات الناجحة من خلال إزالة السكر
ميزات اللغة المفيدة هذه في رمز بايت يمكن تشغيله على نظام
بدون خادم.
"استوديو Android" والمكوّن الإضافي لنظام Gradle المتوافق مع Android يتضمنان classpath
الموارد التي يتطلبها d8
لتفعيل إزالة التصنيف لك. ومع ذلك، عند استخدام
d8
من سطر الأوامر، ستحتاج إلى تضمينها بنفسك.
وأحد هذه الموارد هو "android.jar
" من حزمة تطوير البرامج (SDK) المستهدَفة لنظام التشغيل Android. هذا النمط
مجموعة من واجهات برمجة تطبيقات نظام Android الأساسي. تحديد مساره باستخدام
العلامة --lib
.
وهناك مورد آخر وهو مجموعة من رموز بايت Java التي تم تجميعها في مشروعك لا يتم تجميعها حاليًا في رمز بايت DEX ولكنها تتطلب تجميع الفئات إلى رمز بايت DEX.
على سبيل المثال، إذا كانت التعليمة البرمجية تستخدم
طرق الواجهة الافتراضية والثابتة، وهي لغة Java
8، يجب استخدام هذه العلامة لتحديد المسار إلى كل
رمز بايت Java الخاص بالمشروع، حتى لو لم تكن تعتزم تجميع كل رموز البايت
إلى رمز بايت DEX. هذا لأنّ ميزة "d8
" تتطلّب هذه المعلومات لفهمها
رمز مشروعك وحل الطلبات الخاصة بأساليب الواجهة.
ينفِّذ نموذج الرمز البرمجي التالي عملية إنشاء تدريجي لفئة يمكنها الوصول إلى طريقة واجهة افتراضية:
d8 MainActivity.class --intermediate --file-per-class --output ~/build/intermediate/dex --lib android_sdk/platforms/api-level/android.jar --classpath ~/build/javac/debug