d8
هي أداة سطر أوامر يستخدمها "استوديو Android" ومكوّن Android Gradle الإضافي
لتجميع رمز بايت Java لمشروعك في رمز بايت DEX يتم تشغيله
على أجهزة Android. يتيح لك d8
استخدام ميزات لغة Java 8 في
التعليمات البرمجية للتطبيق.
يتم أيضًا تضمين d8
كأداة مستقلة في الإصدار 28.0.1 من "أدوات إصدار Android" والإصدارات الأحدث:
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
|
حدِّد موارد classpath التي قد يتطلبها 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 منفصلاً لكل ملف .class للإدخال. احتفِظ بالصفوف الاصطناعية مع فئتها الأصلية. |
--desugared-lib file
|
حدِّد إعدادات مكتبة مُلغاة. file هو ملف إعداد مكتبة معدّل بتنسيق JSON. |
--main-dex-rules file
|
احتفِظ بقواعد الفئات التي يجب وضعها في ملف 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 بشكل صحيح أثناء إنشاء إصدار كامل لتطبيقك.
على سبيل المثال، عند معالجة فئات Java 8 lambda، يتتبّع d8
فئات lambda التي تم إنشاؤها لكل فئة إدخال. خلال عملية الإنشاء الكاملة، عندما يدرج d8
فئة في ملف DEX الرئيسي، فإنّه يرجع إلى البيانات الوصفية للتأكّد من أنّ جميع فئات lambda التي تم إنشاؤها لهذه الفئة يتم تضمينها أيضًا في ملف 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 الأساسي.
يتضمّن "استوديو Android" ومكوّن Android Gradle الإضافي موارد مسار
الفصل التي تتطلّبها ميزة 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