تنسيق Dalvik القابل للتنفيذ

يوضِّح هذا المستند تنسيق .dex ومحتواه. الملفات، والتي تُستخدم للاحتفاظ بمجموعة من تعريفات الفئة البيانات الملحقة.

دليل الأنواع

الاسم الوصف
بايت تسجيل الدخول باستخدام نظام 8 بت
بايت تسجيل دخول بدون تسجيل دخول 8 بت
فيديو قصير إنترنت بتوقيع 16 بت، واجهة صغيرة
قصير 16 بت غير موقعة، بريد إلكتروني صغير
تدخُّل دفاعي اتصال داخلي بتوقيع 32 بت، واجهة صغيرة
مهم اتصال داخلي غير موقع 32 بت، واجهة صغيرة
طويلة إنترنت موقَّع بنظام 64 بت، واجهة صغيرة
أولونغ اتصال داخلي غير موقع 64 بت، واجهة صغيرة
cannot translate علامة LEB128 ذات طول متغيّر (انظر أدناه)
يوليو 128 LEB128 بدون توقيع، متغير الطول (انظر أدناه)
uleb128p1 LEB128 بدون توقيع بالإضافة إلى 1، متغير الطول (انظر أدناه)

128 ليو روماني

LEB128 ("Little-Endian Base 128") هو ترميز متغير الطول الكميات الصحيحة العشوائية الموقعة أو غير الموقّعة. التنسيق كان مستعارة من DWARF3 المواصفات. في ملف .dex، لا يتم استخدام LEB128 إلا ترميز كميات 32 بت.

تتألف كل قيمة LEB128 المشفرة من قيمة واحدة إلى خمس. وحدات البايت، التي تمثل معًا قيمة 32 بت واحدة. على كل للبايت مجموعة البت الأكثر أهمية باستثناء البايت الأخير في والذي يكون أهم شيء واضح بعض الشيء. المتبقي سبعة وحدات بت من كل بايت عبارة عن حمولة، بأقل أهمية سبعة وحدات بت من الكمية في البايت الأول، والسبعة التالية في البايت الثاني بايت وما إلى ذلك. في حال توقيع LEB128 (sleb128): أهم بيانات حمولة البيانات في البايت النهائي في التسلسل علامات مدمَجة لإنتاج القيمة النهائية. في الحالة غير الموقعة (uleb128)، يتم التعامل مع أي وحدات بت لم يتم تمثيلها بشكل صريح تم تفسيرها على أنها 0.

رسم تخطيطي على مستوى البت لقيمة LEB128 ثنائية البايت
البايت الأول البايت الثاني
1 بت6 بت5 بت4 بت3 بت2 بت1 بت0 0 بت13 بت12 بت11 بت10 بت9 بت8 بت7

يتم استخدام الصيغة uleb128p1 لتمثيل علامة موقَّعة. حيث يكون التمثيل بالقيمة plus one المشفرة بصفتك uleb128. سيجعل ذلك ترميز -1 (يمكن اعتبارها قيمة غير موقعة 0xffffffff بدلاً من ذلك) — ولكن لا يوجد رقم سالب آخر — أي بايت واحد يكون مفيدًا في الحالات التي يجب فيها أن يكون الرقم الممثل إما أن تكون غير سالبة أو -1 (أو 0xffffffff)، وحيث لا يُسمح بقيم سلبية أخرى (أو عندما يكون حجم كبير بدون توقيع من غير المحتمل أن تكون هناك حاجة إليها).

في ما يلي بعض الأمثلة على التنسيقات:

تسلسل مشفر باستخدام عنوان البريد الإلكتروني sleb128 باستخدام عنوان البريد الإلكتروني uleb128 باستخدام عنوان البريد الإلكتروني uleb128p1
0000-1
01110
7f-1127126
80 7f-1281625616255

تنسيق الملف

الاسم التنسيق الوصف
عنوان عنصر_رأس الرأس
معرّفات_السلاسل سلسلة_معرّف_السلعة[] قائمة معرفات السلاسل. هذه هي معرّفات لكل السلاسل يستخدمه هذا الملف، إما للتسمية الداخلية (مثل أدوات وصف الأنواع) أو ككائنات ثابتة يشار إليها بالرمز. يجب ترتيب هذه القائمة. حسب محتوى السلسلة، باستخدام قيم نقاط رمز UTF-16 (وليس في الحساسة باللغة المحلية)، ويجب ألا تحتوي على أي إدخالات مكررة.
أرقام تعريف الأنواع type_id_item[] نوع قائمة معرفات المنتجات. وهي معرّفات لجميع الأنواع (الفئات أو الصفائف أو الأنواع الأولية) التي يشير إليها هذا الملف، سواء تم تعريفها في الملف أم لا. يجب ترتيب هذه القائمة حسب string_id. الفهرس، ويجب ألا يحتوي على أي إدخالات مكررة.
معرّفات Proto Proto_id_item[] لمعرفات النماذج الأولية للطريقة. هذه معرّفات لكل والنماذج الأولية المشار إليها بواسطة هذا الملف. يجب ترتيب هذه القائمة في نوع الإرجاع (حسب فهرس type_id) ترتيبًا رئيسيًا، ثم حسب قائمة الوسيطات (الترتيب المعجم، الوسيطات الفردية) مرتبة حسب فهرس type_id). يجب ألّا يتم تضمين القائمة تحتوي على أي إدخالات مكررة.
معرّف_حقل حقل_معرّف_السلعة[] معرفات الحقول. هذه أرقام تعريف لجميع الحقول. الذين يشيرون إليه في هذا الملف، سواء تم تحديده فيه أم لا. هذا النمط يجب ترتيب القائمة، حيث يكون النوع المحدَّد (حسب type_id) الفهرس) هو الترتيب الرئيسي، اسم الحقل (حسب فهرس string_id) تمثّل الترتيب المتوسط والنوع (حسب فهرس type_id) هو الترتيب الثانوي. يجب ألا تحتوي القائمة على أي إدخالات مكررة.
معرفات_الطريقة طريقة_معرّف_السلعة[] معرفات طرق البحث. هذه معرّفات لجميع الطرق الذين يشيرون إليه في هذا الملف، سواء تم تحديده فيه أم لا. هذا النمط يجب ترتيب القائمة، حيث يكون النوع المحدَّد (حسب type_id) الفهرس) هو الترتيب الرئيسي، اسم الطريقة (حسب string_id) الفهرس) هو الترتيب المتوسط، وطريقة النموذج الأوّلي للطريقة (عن طريق proto_id الفهرس) هو الترتيب الثانوي. يجب ألّا يتم تضمين القائمة تحتوي على أي إدخالات مكررة.
تحديد_الفئة class_def_item[] قائمة تعريفات الفئات. ويجب ترتيب الفئات بحيث لا للفئة الفائقة والواجهات المنفذة في قائمة قبل فئة الإحالة. علاوة على ذلك، لا يمكن تعريفًا للفئة التي تحمل الاسم نفسه للظهور أكثر من مرة في من القائمة.
أرقام تعريف_مواقع_الاتصال call_site_id_item[] قائمة معرفات المواقع للاتصال. هذه معرّفات لجميع المواقع الإلكترونية للاتصال الذين يشيرون إليه في هذا الملف، سواء تم تحديده فيه أم لا. هذه القائمة يجب الترتيب تصاعديًا بنسبة call_site_off.
الأسماء المعرِّفة للطرق طريقة_المقبض_لعنصر[] مقابض الطرق. قائمة بجميع الأسماء المعرِّفة للطرق المُشار إليها في هذا الملف، سواء تم تحديدها في الملف أم لا. لم يتم ترتيب هذه القائمة وقد تحتوي على التكرارات التي ستتجاوب منطقيًا مع حالات التعامل مع الطريقة المختلفة.
بيانات أوبايت[] مساحة بيانات تحتوي على جميع بيانات الدعم للجداول الواردة أعلاه. العناصر المختلفة لها متطلبات محاذاة مختلفة، يتم إدراج وحدات البايت الخاصة بالمساحة المتروكة قبل كل عنصر إذا لزم الأمر لتحقيق المحاذاة الصحيحة.
بيانات_الرابط أوبايت[] البيانات المستخدمة في الملفات المرتبطة بشكل ثابت. يُعد تنسيق البيانات في لم يتم تحديد هذا القسم في هذا المستند. هذا القسم فارغ في الملفات غير المرتبطة وعمليات تنفيذ بيئة التشغيل ويمكنهم استخدامه على النحو الذي تراه مناسبًا.

تعريفات حقول Bitfield والسلسلة والثابت

ملف DEX_FILE_MAGIC

تم التضمين في header_item

الصفيفة/السلسلة الثابتة DEX_FILE_MAGIC هي قائمة وحدات البايت التي يجب أن تظهر في بداية الملف .dex حتى يتم الاعتراف بها على أنها كذلك. تشير القيمة عن قصد يحتوي على سطر جديد ("\n" أو 0x0a) بايت خالية ("\0" أو 0x00) للمساعدة في الكشف عن بعض أشكال التلف. تشير القيمة أيضًا بترميز رقم إصدار التنسيق كثلاثة أرقام عشرية، وهي من المتوقع أن يزداد بشكل رتيب بمرور الوقت مع تطور التنسيق.

ubyte[8] DEX_FILE_MAGIC = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 }
                        = "dex\n039\0"

ملاحظة: دعم الإصدار 039 من أُضيفت فيه الصيغة في إصدار Android 9.0، والذي قدّم نسختَين رموز بايت جديدة، const-method-handle و const-method-type (تم وصف كل منها في ملخص مجموعة رموز البايت ). في Android 10، يوسّع الإصدار 039 تنسيق ملف DEX ليشمل الملفات المخفية. معلومات واجهة برمجة التطبيقات التي لا تنطبق إلا على ملفات DEX على مسار فئة التشغيل.

ملاحظة: دعم الإصدار تمت إضافة 038 من التنسيق في الإصدار 8.0 من Android. . أضاف الإصدار 038 رموز بايت جديدة. (invoke-polymorphic وinvoke-custom) بالإضافة إلى بيانات مؤشرات الطرق.

ملاحظة: دعم الإصدار 037 من تمت إضافة التنسيق في إصدار Android 7.0. قبل الإصدار 037 الأكثر استخدمت إصدارات Android الإصدار 035 من التنسيق. الفرق بين الإصدارين 035 و037 هو إضافة الطرق التلقائية وتعديل invoke.

ملاحظة: تحتوي نسختان سابقتان على الأقل من التنسيق على تم استخدامها في إصدارات البرامج العامة المتاحة على نطاق واسع. على سبيل المثال: تم استخدام الإصدار 009 في إصدارات M3 من نظام Android الأساسي (من تشرين الثاني (نوفمبر) إلى كانون الأول (ديسمبر) 2007) وتم استخدام الإصدار 013 في إصدارات M5 من Android المنصة (فبراير - آذار (مارس) 2008). في العديد من الجوانب، كانت هذه تختلف إصدارات التنسيق اختلافًا كبيرًا عن الإصدار الموضح في هذا جلسة المراجعة.

ENDIAN_CONSTANT وREVERSE_ENDIAN_CONSTANT

تم التضمين في header_item

يُستخدم العدد الثابت ENDIAN_CONSTANT للإشارة إلى انتهاء صلاحية الملف الذي تم العثور عليه. وعلى الرغم من أن المعيار تنسيق .dex بسيط، وقد تحتاج عمليات التنفيذ إلى اختيار لإجراء تبديل البايت. إذا صادفت عملية تنفيذ عنوان يكون endian_tag فيه REVERSE_ENDIAN_CONSTANT بدلاً من ENDIAN_CONSTANT، سيعرف أن الملف تم استبداله بالبايت من النموذج المتوقع.

uint ENDIAN_CONSTANT = 0x12345678;
uint REVERSE_ENDIAN_CONSTANT = 0x78563412;

NO_INDEX

تم تضمينها في class_def_item وdebug_info_item

يُستخدم العدد الثابت NO_INDEX للإشارة إلى أنّ عدم وجود قيمة فهرس.

ملاحظة: لم يتم تحديد قيمة هذه القيمة 0، لأنّه في الواقع يكون فهرسًا صالحًا.

القيمة التي تم اختيارها لـ NO_INDEX هي يمكن تمثيلها كبايت واحد في ترميز uleb128p1.

uint NO_INDEX = 0xffffffff;    // == -1 if treated as a signed int

تعريفات Access_flags

وهي مضمّنة في class_def_item ومُستجدّ_حقل ومُشفَّر_method فئة InnerClass

تُستخدم الحقول البتية لهذه العلامات للإشارة إلى سهولة الوصول الخصائص العامة للفصول وأعضاء الفصل.

الاسم القيمة للصفوف (وInnerClass تعليقات توضيحية) للحقول طرق
ACC_public 1 x 0 public: مرئي في كل مكان public: مرئي في كل مكان public: مرئي في كل مكان
ACC_خاص 0×2 * private: مرئي فقط للفئة المحدَّدة private: مرئي فقط للفئة المحدَّدة private: مرئي فقط للفئة المحدَّدة
ACC_PROTECTED 0×4 * protected: مرئية للحزمة والفئات الفرعية protected: مرئية للحزمة والفئات الفرعية protected: مرئية للحزمة والفئات الفرعية
ACC_StatIC 0×8 * static: لم يتم إنشاؤها باستخدام عنصر خارجي مرجع this static: عامة إلى فئة محدّدة static: لا يمكن استخدام الوسيطة this
التنسيق النهائي 0x10 final: غير قابلة للتصنيف الفرعي final: غير قابل للتغيير بعد الإنشاء final: لا يمكن إلغاءه
ACC_SYNCHRONIZED 0x20     synchronized: تم تلقائيًا الحصول على القفل المرتبط حول استدعاء هذه الطريقة.

ملاحظة: لا يصلح هذا إلا لتحديد وقت تم أيضًا ضبط ACC_NATIVE.

ACC_VOLATILE 0x40   volatile: قواعد وصول خاصة للمساعدة في سلسلة المحادثات الأمان  
ACC_BRIDGE 0x40     يتم إضافتها تلقائيًا بواسطة برنامج التحويل البرمجي كأسلوب آمن من حيث النوع جسر
ACC_TRANSIENT 0×80   transient: عدم حفظه كتسلسل تلقائي  
ACC_VARARGS 0×80     يجب التعامل مع الوسيطة الأخيرة على أنها "استراحة" الوسيطة بواسطة برنامج التجميع
محتوى أصلي 0×100     native: تم التنفيذ في الرمز البرمجي الأصلي
ACC_INTERFACE 0×200 interface: فئة مجردة قابلة للتنفيذ    
ACC_ABSTRACT 0×400 abstract: غير قابل لإنشاء مثيل مباشرةً   abstract: لم يتم التنفيذ من قِبل هذا الصف
ACC_STRICT 0×800     strictfp: قواعد صارمة في حساب النقاط العائمة
ترجمة 0×1000 لم يتم تحديده مباشرةً في رمز المصدر لم يتم تحديده مباشرةً في رمز المصدر لم يتم تحديده مباشرةً في رمز المصدر
وصف 0×2000 تعريفها كفئة تعليق توضيحي    
ACC_ENUM 0×4000 تم الإعلان عنه كنوع تعداد. تم الإعلان عنها كقيمة عددية  
(غير مستخدم) 0x8000      
شهادة ACC_CONSTRUCTOR 0×10000     طريقة الدالة الإنشائية (مهيئ الفئة أو المثيل)
ACC_decLARED_
متزامن
0×20000     التي تم الإعلان عنها في synchronized.

ملاحظة: لن يكون لذلك أي تأثير في تنفيذ (بخلاف انعكاس هذه العلامة، في حد ذاتها).

* مسموح بها فقط للتعليقات التوضيحية InnerClass، ويجب ألا يتم تفعيله مطلقًا في class_def_item.

ترميز UTF-8 المعدَّل

لتسهيل الحصول على الدعم القديم، يجب استخدام تنسيق .dex. تعمل على ترميز بيانات سلسلتها بتنسيق UTF-8 القياسي المُعدَّل في الواقع، فيما يلي باسم MUTF-8. هذا النموذج مماثل لمعيار UTF-8 القياسي، باستثناء:

  • يتم استخدام الترميزات الأحادية وثنائية وثلاث بايت فقط.
  • نقاط الرموز في النطاق U+10000 ... تم ترميز U+10ffff كزوج بديل، لكل من والتي يتم تمثيلها كقيمة مشفرة ثلاثية البايت.
  • يتم ترميز نقطة الرمز U+0000 بتنسيق ثنائي البايت.
  • تشير قيمة البايت الفارغة العادي (القيمة 0) إلى نهاية سلسلة، كما هو الحال بالنسبة لتفسير لغة C.

يمكن تلخيص أول عنصرين أعلاه كما يلي: MUTF-8 هو تنسيق ترميز لـ UTF-16، بدلاً من أن يكون تنسيقًا مباشرًا أكثر لأحرف Unicode.

يتيح العنصران الأخيران أعلاه إمكانية تضمين نقطة الرمز U+0000 في سلسلة مع معالجة كسلسلة منتهية بقيمة فارغة على النمط C.

ومع ذلك، يعني الترميز الخاص لـ U+0000 أنه UTF-8 العادي، نتيجة استدعاء الدالة C القياسية السمة strcmp() على زوج من سلاسل MUTF-8 لا تكون دائمًا للإشارة إلى النتيجة الموقعة بشكل صحيح لمقارنة السلاسل غير المتساوية. عندما يكون الطلب (وليس فقط المساواة) مصدر قلق، فإن الطريقة هي الأكثر وضوحًا لمقارنة سلاسل MUTF-8 وهي فك ترميزها حرفًا بحرف، والمقارنة بين القيم التي تم فك ترميزها (ومع ذلك، تتوفر عمليات تنفيذ أكثر ممكن أيضًا).

يُرجى الرجوع إلى يونيكود المعيار لمزيد من المعلومات حول ترميز الأحرف. الترميز MUTF-8 أقرب إلى الترميز (الأقل شهرة نسبيًا) CESU-8 مقارنةً بـ UTF-8 في حد ذاته.

ترميز Encrypt_value

تم تضمينها في annotate_element وcoding_array_item

encoded_value هو جزء مرمّز من (تقريبًا) البيانات العشوائية الهيكلية. يهدف الترميز إلى أن تكون مضغوطة ومباشرة في تحليلها.

الاسم التنسيق الوصف
(value_arg << 5) | نوع_القيمة بايت بايت يشير إلى نوع الحدث التالي مباشرةً value على طول مع وسيطة توضيحية اختيارية في ثلاث وحدات بت عالية الترتيب. انظر أدناه للاطّلاع على تعريفات value المختلفة. في معظم الحالات، تقوم value_arg بترميز طول value التالي مباشرةً بالبايت، مثل (size - 1)، مثال: 0 تعني أن تتطلب القيمة بايت واحد، ويعني 7 أنها تتطلب ثمانية بايت مع ذلك، هناك استثناءات كما هو موضّح أدناه.
القيمة أوبايت[] وحدات بايت تمثل القيمة والمتغير في الطول ويتم تفسيرها بشكل مختلف لمختلف value_type بايت، ومع ذلك صغيرة دائمًا. اطّلِع على تعريفات القيم المختلفة أدناه التفاصيل.

تنسيقات القيم

النوع: الاسم value_type التنسيق value_arg التنسيق value الوصف
قيمة_القيمة_بايت 0×00 (بدون قيمة، يجب أن يكون 0) أوبايت[1] قيمة عدد صحيح أحادي البايت بعلامة
القيمة_SHORT_ 0x02 الحجم - 1 (0...1) أو بايت[size] قيمة عدد صحيح ثنائي البايت بعلامة، موسَّع
قيمة_CHAR 0x03 الحجم - 1 (0...1) أو بايت[size] قيمة عدد صحيح ثنائي البايت غير موقعة، موسعَّة صفرية
قيمة_INT 0×04 الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت بعلامة، موسَّعة
VALUE_long 0×06 الحجم - 1 (0...7) أو بايت[size] قيمة عدد صحيح ثمانية بايت بعلامة، موسَّعة
القيمة_العددية_للعدد 0x10 الحجم - 1 (0...3) أو بايت[size] نمط بتات من أربعة بايت، ممتدًا صفرًا إلى اليمين، يتم تفسيرها على أنها قيمة نقطة عائمة 32 بت لـ IEEE754
قيمة_مضاعفة 0×11 الحجم - 1 (0...7) أو بايت[size] نمط بت من ثمانية بايت، ممتدًا صفرًا لليمين، و يتم تفسيرها على أنها قيمة نقطة عائمة تبلغ 64 بت لـ IEEE754
طريقة_VALUE_method_TYPE 0×15 الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى القسم proto_ids ويمثل قيمة نوع الطريقة
قيمة_طريقة_الاسم_المعرِّف 0×16 الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى القسم method_handles ويمثل قيمة مؤشر الطريقة
قيمة_STRING 0x17 الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى القسم string_ids ويمثل قيمة سلسلة
نوع_القيمة 0×18 الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى قسم type_ids ويمثل تمثيلاً قيمة النوع/الفئة
VALUE_FIELD 0×19 الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى قسم field_ids ويمثل تمثيلاً قيمة الحقل
طريقة_VALUE_method 0x1a الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى قسم method_ids ويمثل تمثيلاً قيمة الطريقة
قيمة_القيمة_ENUM 0x1b الحجم - 1 (0...3) أو بايت[size] قيمة عدد صحيح أربعة بايت غير موقعة (موسَّعة صفرية)، على أنه فهرس إلى القسم field_ids ويمثل قيمة ثابت من نوع العدد
VALUE_ARRAY 0x1c (بدون قيمة، يجب أن يكون 0) مصفوفة_مشفّرة صفيفة من القيم بالتنسيق المحدد بواسطة "تنسيق encoded_array" أدناه. الحجم من value ضمني في الترميز.
قيمة_الشرح 0×1 يوم (بدون قيمة، يجب أن يكون 0) ترميز_مشفّر تعليقًا توضيحيًا فرعيًا، بالتنسيق المحدد "تنسيق encoded_annotation" أدناه. الحجم من value ضمني في الترميز.
قيمة_NULL 0x1e (بدون قيمة، يجب أن يكون 0) (بدون) قيمة مرجعية واحدة (null)
القيمة_المنطقية 0x1f منطقي (0...1) (بدون) قيمة وحدة بت؛ 0 لمدة false 1 مقابل true يتم تمثيل البت في value_arg

تنسيق Encrypt_array

الاسم التنسيق الوصف
الحجم يوليو 128 عدد العناصر في الصفيفة
القيم القيمة_المشفّرة[size] سلسلة من size encoded_value بايت بالتنسيق المحدد في هذا القسم، مسلسل بالتتابع.

تنسيق Encrypt_annotation

الاسم التنسيق الوصف
type_idx يوليو 128 ونوع التعليق التوضيحي. يجب أن تكون هذه فئة (ليست صفيفة أو قيمة أساسية) الكتابة.
الحجم يوليو 128 عدد عمليات ربط الاسم والقيمة في هذا التعليق التوضيحي
العناصر عنصر_التعليق التوضيحي[size] من عناصر التعليق التوضيحي، ويتم تمثيلها بشكل مباشر في سطر (وليس الاعتمادات الرقمية). يجب فرز العناصر بترتيب متزايد حسب فهرس string_id.

تنسيق عنصر_التعليق التوضيحي

الاسم التنسيق الوصف
رقم_تعريف_الاسم يوليو 128 اسم العنصر، ممثلًا كفهرس في قسم "string_ids". ويجب أن تتوافق السلسلة مع لـ MemberName، المحددة أعلاه.
القيمة قيمة_مشفّرة قيمة العنصر

بنية السلسلة

هناك عدة أنواع من العناصر في ملف .dex والتي يشيران في النهاية إلى سلسلة. تعريفات نمط BNF التالية إلى الصيغة المقبولة لهذه السلاسل.

الاسم البسيط

SimpleName هي الأساس لبنية أسماء اللغات الأخرى باستمرار. يسمح التنسيق .dex بقدرٍ معقول من خطوط العرض. هنا (أكثر بكثير من معظم لغات المصدر الشائعة). باختصار، يمكن اعتبار تطبيق أي حرف أبجدي منخفض أو رقم ASCII منخفض، مثل رموز ASCII المحددة المحددة ومعظم نقاط الرموز بخلاف ASCII التي أو التحكم أو المسافة أو الأحرف الخاصة. بدءًا من الإصدار 040 يسمح التنسيق أيضًا باستخدام أحرف المسافات (Unicode Zs) ) تجدر الإشارة إلى أنّ نقاط الرموز البديلة (في النطاق U+d800 ... U+dfff) ليست تُعتبر أحرف اسم صالحة في حد ذاتها، غير أنّ يونيكود تكميلي الأحرف صالحة (التي يتم تمثيلها بالحروف النهائية كبديل لقاعدة SimpleNameChar)، ويجب أن تكون ويتم تمثيلها في ملف على شكل أزواج من نقاط الرموز البديلة في MUTF-8 الترميز.

SimpleName
SimpleNameChar (SimpleNameChar)*
SimpleNameChar
'A' ... 'Z'
| 'a' ... 'z'
| '0' ... '9'
| ' ' منذ الإصدار 040 من DEX
| '$'
| '-'
| '_'
| U+00a0 منذ الإصدار 040 من DEX
| U+00a1 ... U+1fff
| U+2000 ... U+200a منذ الإصدار 040 من DEX
| U+2010 ... U+2027
| U+202f منذ الإصدار 040 من DEX
| U+2030 ... U+d7ff
| U+e000 ... U+ffef
| U+10000 ... U+10ffff

اسم العضو

مُستخدَم بواسطة field_id_item وmethod_id_item

MemberName هو اسم أحد أعضاء الفصل الدراسي، حيث يتم تصنيف الأعضاء والحقول والأساليب والفئات الداخلية.

MemberName
SimpleName
| '<' SimpleName '>'

اسم الصف الكامل

FullClassName هو اسم فئة مؤهل بالكامل، بما في ذلك محدد حزمة اختياري متبوعًا باسم مطلوب.

FullClassName
OptionalPackagePrefix SimpleName
OptionalPackagePrefix
(SimpleName '/')*

واصف النوع

يستخدِمه type_id_item

TypeDescriptor هو تمثيل أي نوع، بما في ذلك الأساسيات والفئات والصفائف وvoid. انظر أدناه معنى الإصدارات المختلفة.

TypeDescriptor
'V'
| FieldTypeDescriptor
FieldTypeDescriptor
NonArrayFieldTypeDescriptor
| ('[' * 1...255) NonArrayFieldTypeDescriptor
NonArrayFieldTypeDescriptor
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L' الاسم بالكامل ';'

الواصف المختصر

يستخدِمه proto_id_item

ShortsyDescriptor هو التمثيل المختصر لطريقة ما الأولية، بما في ذلك أنواع العائد والمعلمات، باستثناء أنه عدم التمييز بين أنواع المراجع المختلفة (الفئة أو الصفائف). بدلاً من ذلك، ويتم تمثيل كل أنواع المراجع بحرف 'L' واحد.

ShortsyDescriptor
shortyReturnType (ShortyFieldType)*
ShortsyReturnType
'V'
| ShortsyFieldType
ShortsyFieldType
'Z'
| 'B'
| 'S'
| 'C'
| 'I'
| 'J'
| 'F'
| 'D'
| 'L'

دلالات TypeDescriptor

وهذا هو معنى كل متغيّر من صيغ TypeDescriptor.

بناء الجملة المعنى
V void؛ صالح فقط لأنواع الإرجاع
Z boolean
B byte
S short
C char
I int
J long
F float
D double
Lfull/eligibility/Name: الفئة fully.qualified.Name
[الوصف مصفوفة descriptor، قابلة للاستخدام بشكل متكرر صفائف المصفوفات، على الرغم من أنه من غير الصالح أن يكون هناك أكثر من 255 صفائف الأبعاد.

العناصر والبُنى ذات الصلة

يتضمن هذا القسم تعريفات لكل عنصر من عناصر المستوى الأعلى التي في ملف .dex.

عنصر_رأس

تظهر في قسم العنوان

المحاذاة: 4 بايت

الاسم التنسيق الوصف
سحر uبايت[8] = DEX_FILE_MAGIC والقيمة السحرية. راجِع المناقشة أعلاه ضمن "DEX_FILE_MAGIC" لمزيد من التفاصيل.
مجموع اختباري مهم المجموع الاختباري adler32 لبقية الملف (كل شيء باستثناء magic وهذا الحقل)؛ يُستخدم لاكتشاف تلف الملفات
التوقيع أوبايت[20] توقيع SHA-1 (تجزئة) لبقية الملف (كل شيء باستثناء magic وchecksum وهذا الحقل) مستخدَمة لتعريف الملفات بشكل فريد
حجم_الملف مهم حجم الملف بالكامل (بما في ذلك العنوان)، بالبايت
حجم_الرأس uint = 0x70 حجم الرأس (هذا القسم بالكامل)، بالبايت. يتيح ذلك قدرًا محدودًا من التوافق مع الأنظمة القديمة/للأمام بدون إلغاء التنسيق.
علامة_نهاية uint = ENDIAN_CONSTANT علامة الانتهاء. راجِع المناقشة أعلاه ضمن "ENDIAN_CONSTANT". وREVERSE_ENDIAN_CONSTANT بوصة لمزيد من التفاصيل.
حجم_الرابط مهم أو حجم قسم الروابط، أو 0 إذا لم يكن هذا الملف مرتبطة بشكل ثابت
link_off مهم إزاحة من بداية الملف إلى قسم الرابط، أو 0 إذا link_size == 0. والمعادلة، إذا لم تكن صفرية، يجب أن يكون إزاحة في القسم link_data. تشير رسالة الأشكال البيانية عدم تحديد تنسيق البيانات المشار إليها في هذا المستند حقل الرأس هذا (والسابق) كعناصر الجذب للاستخدام من خلال عمليات تنفيذ بيئة التشغيل.
إيقاف الخريطة مهم الإزاحة من بداية الملف إلى عنصر الخريطة. الإزاحة التي يجب بقيمة غير صفرية، ويجب أن يكون إزاحة في القسم data، ويجب أن تكون البيانات بالتنسيق المحدد بواسطة "map_list" أدناه.
حجم_أرقام_السلاسل مهم عدد السلاسل في قائمة معرّفات السلاسل
سلسلة_معرّفات_إيقاف مهم إزاحة من بداية الملف إلى قائمة معرفات السلسلة، أو 0 إذا كانت string_ids_size == 0 (من المفترض أن تكون حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية، في بداية القسم string_ids.
type_ids_size (حجم_معرّفات_النوع) مهم عدد العناصر في قائمة معرفات الأنواع، بحد أقصى 65535
type_ids_off مهم إزاحة من بداية الملف إلى قائمة معرفات النوع، أو 0 إذا كانت type_ids_size == 0 (من المفترض أن تكون حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية، يجب أن يبدأ في بداية type_ids .
حجم_رقم تعريف_النموذج_الأوّلي مهم عدد العناصر في قائمة معرفات النموذج الأوّلي، 65535 كحد أقصى
Proto_ids_متوقف مهم الإزاحة من بداية الملف إلى قائمة معرفات النموذج الأوّلي، أو 0 إذا كانت proto_ids_size == 0 (من المفترض أن تكون حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية، يجب أن يبدأ في بداية proto_ids .
حجم_أرقام تعريف_الحقل مهم عدد العناصر في قائمة معرّفات الحقول
إيقاف_بيانات_الحقول مهم معادلة من بداية الملف إلى قائمة معرفات الحقول، أو 0 إذا field_ids_size == 0. الإزاحة، إذا غير صفري، يجب أن تكون في بداية field_ids .
حجم_أرقام_تعريف_الطريقة مهم عدد العناصر في قائمة معرّفات الطريقة
معرّف_إيقاف_الطريقة مهم معادلة من بداية الملف إلى قائمة معرفات الطريقة، أو 0 إذا method_ids_size == 0. الإزاحة، إذا غير صفري، يجب أن تكون في بداية method_ids .
class_defs_size (حجم_تعريف_الفئة) مهم عدد العناصر في قائمة تعريفات الفئة
class_defs_off مهم إزاحة من بداية الملف إلى قائمة تعريفات الفئة، أو 0 إذا كانت class_defs_size == 0 (من المفترض أن تكون حالة هامشية غريبة). والمعادلة، إذا لم تكن صفرية، في بداية القسم class_defs.
حجم_البيانات مهم حجم قسم data بالبايت. يجب أن تكون القيمة زوجية مضاعف sizeof(uint).
إيقاف_البيانات مهم إزاحة من بداية الملف إلى بداية الملف قسم "data".

قائمة_الخريطة

تظهر في قسم البيانات

تمت الإشارة إليه من header_item

المحاذاة: 4 بايت

هذه قائمة بمحتويات الملف الكاملة بالترتيب. أُنشأها جون هنتر، الذي كان متخصصًا يحتوي على بعض التكرار في ما يتعلق بـ header_item ولكنها ستكون نموذجًا سهل الاستخدام للتكرار التحسيني على مستوى كامل الملف. يجب أن يظهر نوع معين على الأكثر مرة واحدة في الخريطة، ولكن لا يوجد المفروضة على أنواع الطلبات التي قد تظهر، بخلاف وقيود متضمنة في بقية التنسيق (على سبيل المثال، يجب أن يظهر القسم header أولاً، متبوعًا قسم "string_ids" وغير ذلك). بالإضافة إلى ذلك، يجب أن تتضمن إدخالات الخريطة مرتبة حسب الإزاحة الأولية ويجب ألا تتداخل.

الاسم التنسيق الوصف
الحجم مهم حجم القائمة في الإدخالات
قائمة حجم_عنصر_الخريطة عناصر القائمة

تنسيق map_item

الاسم التنسيق الوصف
كتابة قصير ونوع العناصر انظر الجدول أدناه
غير مستخدَمة قصير (غير مستخدم)
الحجم مهم عدد العناصر التي يمكن العثور عليها عند الإزاحة المشار إليها
اقتطاع مهم معادلة من بداية الملف إلى العناصر المعنية

رموز الكتابة

نوع العنصر ثابت القيمة حجم العنصر بالبايت
عنصر_رأس TYPE_ROWS_ITEM 0×0000 0×70
سلسلة_معرّف_السلعة TYPE_STRING_ID_ITEM 0×0001 0×04
type_id_item TYPE_TYPE_ID_ITEM 0×0002 0×04
معرّف_السلعة_الأوّلية TYPE_PROTO_ID_ITEM 0×0003 0x0c
حقل_معرّف_السلعة TYPE_FIELD_ID_ITEM 0×0004 0×08
معرّف_السلعة TYPE_Method_ID_ITEM 0×0005 0×08
class_def_item TYPE_Class_DEF_ITEM 0×0006 0x20
call_site_id_item TYPE_CALL_SITE_ID_ITEM 0×0007 0×04
طريقة_تسجيل_السلعة TYPE_method_HANDLE_ITEM 0×0008 0×08
قائمة_الخريطة TYPE_MAP_LIST 0×1000 4 أو أكثر (item.size * 12)
قائمة_النوع TYPE_TYPE_LIST 0×1001 4 أو أكثر (item.size * 2)
تعليقات_مجموعة_ref_list TYPE_تشكيلة/SET_REF_LIST 0×1002 4 أو أكثر (item.size * 4)
عنصر_مجموعة_التعليقات التوضيحية نوع_التعليق 0×1003 4 أو أكثر (item.size * 4)
class_data_item TYPE_Class_DATA_ITEM 0×2000 ضمني "يجب التحليل"
رمز_السلعة TYPE_CODE_ITEM 0×2001 ضمني "يجب التحليل"
سلسلة_البيانات_السلعة TYPE_STRING_DATA_ITEM 0×2002 ضمني "يجب التحليل"
debug_info_item TYPE_DEBUG_INFO_ITEM 0×2003 ضمني "يجب التحليل"
عنصر_التعليق التوضيحي TYPE_تشكيل_ITEM 0×2004 ضمني "يجب التحليل"
عنصر_المصفوفة_المُشفَّرة TYPE_ENCODED_ARRAY_ITEM 0×2005 ضمني "يجب التحليل"
دليل_التعليقات التوضيحية_عنصر TYPE_ لإدارة التعليقات مباشرة 0×2006 ضمني "يجب التحليل"
إخفاء واجهة برمجة تطبيقات الصف البيانات TYPE_HIDDENAPI_Class_DATA_ITEM 0xF000 ضمني "يجب التحليل"

سلسلة_معرّف_السلعة

تظهر في قسم string_ids

المحاذاة: 4 بايت

الاسم التنسيق الوصف
سلسلة_بيانات_إيقاف مهم الإزاحة من بداية الملف إلى بيانات السلسلة لهذا عنصر واحد. يجب أن تكون الإزاحة إلى موقع جغرافي. في القسم data، ويجب أن تكون البيانات في التنسيق المحدد بواسطة "string_data_item" أدناه. ليس هناك متطلبات محاذاة للإزاحة.

سلسلة_البيانات_السلعة

تظهر في قسم البيانات

المحاذاة: لا شيء (محاذاة بالبايت)

الاسم التنسيق الوصف
utf16_size يوليو 128 لهذه السلسلة بوحدات رمز UTF-16 (وهي "سلسلة الطول" في العديد من الأنظمة). أي أن هذا هو الطول الذي تم فك ترميزه السلسلة. (يشير مصطلح الطول المشفر إلى موضع 0 بايت).
بيانات أوبايت[] سلسلة من وحدات الرمز MUTF-8 (المعروفة أيضًا باسم "ثُمانيات"، أي "بايت") متبوعة ببايت من القيمة 0. عرض "ترميز MUTF-8 (المعدَّل UTF-8)" أعلاه للحصول على التفاصيل والمناقشة حول تنسيق البيانات.

ملاحظة: من المقبول أن يكون لديك سلسلة تتضمن (الشكل المشفّر لـ) وحدات الرمز البديل لـ UTF-16 (أي U+d800 ... U+dfff) إما على نحو منفصل أو بشكل غير متوقع فيما يتعلق يونيكود إلى UTF-16. الأمر يتعلق بالاستخدامات ذات المستوى الأعلى لرفض الترميزات غير الصالحة، إذا كان ذلك مناسبًا.

type_id_item

تظهر في قسم type_ids

المحاذاة: 4 بايت

الاسم التنسيق الوصف
المعرّف_idx مهم الفهرس في قائمة "string_ids" للواصف سلسلة من هذا النوع. ويجب أن تتوافق السلسلة مع بناء الجملة TypeDescriptor، المحدّدة أعلاه.

معرّف_السلعة_الأوّلية

تظهر في قسم proto_ids

المحاذاة: 4 بايت

الاسم التنسيق الوصف
معرّف_مختصر مهم الفهرس في قائمة "string_ids" للصيغة القصيرة سلسلة واصف لهذا النموذج الأوّلي. ويجب أن تتوافق السلسلة مع لـ ShortyDescriptor، المحددة أعلاه، ويجب أن تتوافق إلى نوع الإرجاع ومعلَمات هذه السلعة.
return_type_idx مهم الفهرس في القائمة "type_ids" لنوع الإرجاع من هذا النموذج الأولي
المعلمات_off مهم من بداية الملف إلى قائمة أنواع المعلمات لهذا النموذج الأولي، أو 0 إذا كان النموذج الأولي المعلَمات. ويجب أن تكون قيمة الإزاحة هذه، إذا لم تكن صفرية، في data، ويجب أن تكون البيانات في التنسيق المحدد بواسطة "type_list" أدناه. بالإضافة إلى ذلك، هناك يجب ألا يكون أي إشارة إلى النوع void في القائمة.

حقل_معرّف_السلعة

تظهر في قسم field_ids

المحاذاة: 4 بايت

الاسم التنسيق الوصف
الفئة_idx قصير إلى قائمة type_ids لمُحدِّد هذا . ويجب أن يكون نوع فئة، وليس مصفوفة أو نوعًا أساسيًا.
type_idx قصير إلى قائمة type_ids لنوع هذا الحقل
رقم_تعريف_الاسم مهم في قائمة "string_ids" لاسم هذا الجهاز . يجب أن تتوافق السلسلة مع بنية MemberName، المحدد أعلاه.

معرّف_السلعة

تظهر في قسم method_ids

المحاذاة: 4 بايت

الاسم التنسيق الوصف
الفئة_idx قصير إلى قائمة type_ids لمُحدِّد هذا . ويجب أن يكون نوع فئة أو مصفوفة، وليس نوعًا أساسيًا.
Proto_idx قصير إلى قائمة proto_ids للنموذج الأوّلي هذه الطريقة
رقم_تعريف_الاسم مهم في قائمة "string_ids" لاسم هذا الجهاز . يجب أن تتوافق السلسلة مع بنية MemberName، المحدد أعلاه.

class_def_item

يظهر في القسم class_defs

المحاذاة: 4 بايت

الاسم التنسيق الوصف
الفئة_idx مهم إلى قائمة type_ids لهذه الفئة. ويجب أن يكون نوع فئة، وليس مصفوفة أو نوعًا أساسيًا.
علامات_الوصول مهم علامات الوصول للفئة (public، final، وما إلى ذلك). الاطّلاع على "تعريفات access_flags" لمزيد من التفاصيل.
Superclass_idx مهم في القائمة "type_ids" للفئة العليا أو تكون القيمة الثابتة NO_INDEX إذا لم يكن لهذه الفئة أي الفئة الفائقة (أي أنها فئة جذر مثل Object). وفي حال توفّره، يجب أن يكون نوع فئة وليس صفيفًا أو نوعًا أساسيًا.
إيقاف_واجهات مهم إزاحة من بداية الملف إلى قائمة الواجهات، أو 0 إذا لم تكن هناك عناصر. هذه الإزاحة يجب أن يكون في القسم data، وسيتم يجب أن تكون بالتنسيق المحدد "type_list" أدناه. كل عنصر من عناصر القائمة أن يكون نوع فئة (ليس صفيفًا أو نوعًا أساسيًا)، ويوجد يجب ألا يكون أي تكرار.
معرّف_ملف_المصدر_المصدر مهم إلى قائمة string_ids لاسم يحتوي على المصدر الأصلي (على الأقل لمعظم) هذه الفئة، أو القيمة الخاصة NO_INDEX لتمثيل نقص هذه المعلومات. debug_info_item لأي طريقة معيّنة أكثر من ملف المصدر هذا، ولكن يتوقع أن يكون معظم ستأتي من ملف مصدر واحد فقط.
التعليقات التوضيحية_متوقفة مهم الإزاحة من بداية الملف إلى بنية التعليقات التوضيحية لهذا الصف، أو 0 إذا لم تكن هناك تعليقات توضيحية على هذا الفصل الدراسي. ويجب أن تكون قيمة الإزاحة هذه، إذا لم تكن صفرية، في data، والبيانات التي ينبغي أن تكون في التنسيق الذي يحدده "annotations_directory_item" أدناه، مع جميع العناصر التي تشير إلى هذه الفئة باعتبارها المُحدِّد.
class_data_off مهم إزاحة من بداية الملف إلى الملف المرتبط بيانات الفئة لهذا العنصر، أو 0 إذا لم يكن هناك فئة البيانات لهذه الفئة. (قد يكون الأمر كذلك، على سبيل المثال، إذا كانت الفئة هي واجهة علامة). يجب أن تكون الإزاحة، إذا لم تكن صفرية، في data، ويجب أن تكون البيانات في التنسيق المحدد بواسطة "class_data_item" أدناه، مع كل العناصر التي تشير إلى هذه الفئة باعتبارها المُحدِّد.
قيمة_القيم_الثابتة_متوقفة مهم إزاحة من بداية الملف إلى قائمة الملفات الأولية قيمة لحقول static، أو 0 إذا كانت هناك لا شيء (وسيتم إعداد جميع حقول static باستخدام 0 أو null). يجب أن تكون هذه الإزاحة في data، ويجب أن تكون البيانات في القسم التنسيق المحدد بواسطة "encoded_array_item" أدناه. الحجم يجب ألا يكون عدد الصفيف أكبر من عدد static التي تم تعريفها بواسطة هذه الفئة، وتتجاوب العناصر مع static حقلاً بالترتيب نفسه كما هو موضّح في field_list المقابلة. نوع كل صفيف مع النوع المعلَن عنه للحقل المقابل له. إذا كان عدد العناصر في الصفيف أقل من عدد static حقلاً، ثم يتم إعداد الحقول المتبقية مع 0 أو null مناسبَين للنوع

call_site_id_item

يظهر في قسم call_site_ids

المحاذاة: 4 بايت

الاسم التنسيق الوصف
إيقاف_اتصال_الموقع مهم إزاحة من بداية الملف لطلب تعريف الموقع. يجب أن في قسم البيانات، ويجب أن تكون البيانات بالتنسيق المحدد "call_site_item" أدناه.

عنصر_موقع_الاتصال

تظهر في قسم البيانات

المحاذاة: لا شيء (محاذاة البايت)

Call_site_item هو Encrypt_array_item تتوافق عناصره مع الوسيطات المقدمة إلى طريقة رابط التمهيد. الوسيطات الثلاث الأولى هي:

  1. مؤشر طريقة يمثل طريقة ربط التمهيد (VALUE_Method_HANDLE).
  2. اسم طريقة يجب أن يحله رابط التمهيد (VALUE_STRING)
  3. نوع طريقة يتوافق مع نوع اسم الطريقة المطلوب حلها (VALUE_Method_TYPE).

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

يجب أن يكون لمقبض الطريقة الذي يمثّل طريقة رابط التمهيد من نوع الرجوع java.lang.invoke.CallSite. أنواع المَعلمات الثلاثة الأولى هي:

  1. java.lang.invoke.Lookup
  2. java.lang.String
  3. java.lang.invoke.MethodType

يتم تحديد أنواع المعلمات لأي وسيطات إضافية من قيمها الثابتة.

طريقة_تسجيل_السلعة

تظهر في قسم Channel_handles.

المحاذاة: 4 بايت

الاسم التنسيق الوصف
نوع_الاسم_المعرِّف قصير ونوع مؤشر الطريقة انظر الجدول أدناه
غير مستخدَمة قصير (غير مستخدم)
الحقل_أو_method_id قصير يعتمد هذا الحقل أو معرّف الطريقة على ما إذا كان نوع مؤشر الطريقة موصّلًا أو استدعاء طريقة.
غير مستخدَمة قصير (غير مستخدم)

رموز أنواع الأسماء المعرِّفة للطريقة

ثابت القيمة الوصف
طريقة_HANDLE_TYPE_StatIC_PUT 0×00 مؤشر الطريقة هو أداة ضبط الحقول الثابتة (الملحق)
طريقة_HANDLE_TYPE_StatIC_GET 0x01 مؤشر الطريقة هو دالة getter ثابتة للحقل الثابت (ملحق)
طريقة_HANDLE_TYPE_INSTANCE_PUT 0x02 مؤشر الطريقة هو أداة تعيين حقل المثيل (الملحق)
طريقة_HANDLE_TYPE_INSTANCE_GET 0x03 مؤشر الطريقة هو دالة getter لحقل المثيل (الملحق)
طريقة_HANDLE_TYPE_INVOKE_PSTIC 0×04 مؤشر الطريقة هو استدعاء طريقة ثابتة
طريقة_HANDLE_TYPE_INVOKE_INSTANCE 0x05 مؤشر الطريقة هو استدعاء طريقة المثيل
طريقة_HANDLE_TYPE_INVOKE_CONSTRUCTOR 0×06 مؤشر الطريقة هو استدعاء طريقة إنشائية
طريقة_HANDLE_TYPE_INVOKE_DIRECT 0×07 اسم الطريقة هو استدعاء طريقة مباشرة
طريقة_HANDLE_TYPE_INVOKE_INTERFACE 0×08 مؤشر الطريقة هو استدعاء طريقة للواجهة

class_data_item

تمت الإشارة إليه من class_def_item

تظهر في قسم البيانات

المحاذاة: لا شيء (محاذاة بالبايت)

الاسم التنسيق الوصف
حجم_الحقول_الثابتة يوليو 128 عدد الحقول الثابتة المحددة في هذا العنصر
حجم_حقول_المثيل يوليو 128 عدد حقول المثيلات المحددة في هذا العنصر
Direct_methods_size يوليو 128 عدد الطرق المباشرة المحددة في هذا العنصر
Virtual_methods_size يوليو 128 عدد الطرق الافتراضية المحددة في هذا العنصر
الحقول_الثابتة الحقل_المشفّر[static_fields_size] الحقول الثابتة المحددة، ممثلة في تسلسل المشفرة. يجب ترتيب الحقول حسب field_idx بترتيب متزايد.
حقول_المثيلات الحقل_المشفّر[instance_fields_size] حقول المثيل المحددة، ممثلة في تسلسل المشفرة. يجب ترتيب الحقول حسب field_idx بترتيب متزايد.
الطرق_المباشرة Encrypt_method[direct_methods_size] المباشر المحدد (أي من static أو private أو الدالة الإنشائية)، ويتم تمثيلها في صورة تسلسل المشفرة. يجب فرز الطرق حسب method_idx بترتيب متزايد.
الطرق_الافتراضية Encrypt_method[virtual_methods_size] القيمة الافتراضية المحددة (لا شيء من static أو private أو أو الدالة الإنشائية)، ويتم تمثيلها في صورة تسلسل المشفرة. يجب ألا تتضمن هذه القائمة ما لم يتم تجاوزها بواسطة الفئة التي يمثلها هذا العنصر. تشير رسالة الأشكال البيانية يجب ترتيب الطرق حسب method_idx بترتيب متزايد. يجب ألا تكون قيمة method_idx للطريقة الافتراضية متطابقة لأي طريقة مباشرة.

ملاحظة: تظهر جميع العناصر field_id و يجب أن تشير مثيلات method_id إلى الفئة التعريف نفسها.

تنسيق Encrypt_field

الاسم التنسيق الوصف
حقل_idx_الفرق يوليو 128 إلى قائمة field_ids الخاصة بهوية هذه الجهة الخارجية (يشمل الاسم والوصف)، ويتم تمثيله كفرق من فهرس العنصر السابق في القائمة. فهرس يتم تمثيل العنصر الأول في القائمة بشكل مباشر.
علامات_الوصول يوليو 128 علامات الوصول للحقل (public وfinal وما إلى ذلك). الاطّلاع على "تعريفات access_flags" لمزيد من التفاصيل.

تنسيق Encrypt_method

الاسم التنسيق الوصف
طريقة_idx_الفرق يوليو 128 إلى قائمة method_ids الخاصة بهوية هذه الجهة الخارجية (تتضمن الاسم والواصف)، ويتم تمثيلها كفرق من فهرس العنصر السابق في القائمة. فهرس يتم تمثيل العنصر الأول في القائمة بشكل مباشر.
علامات_الوصول يوليو 128 علامات الوصول للطريقة (public، final، وما إلى ذلك). الاطّلاع على "تعريفات access_flags" لمزيد من التفاصيل.
إيقاف الترميز يوليو 128 من بداية الملف إلى هيكل التعليمة البرمجية لهذا أو 0 إذا كانت هذه الطريقة إما abstract أو native. يجب أن تكون الإزاحة في موقع في قسم "data". يتم تحديد تنسيق البيانات من خلال "code_item" أدناه.

قائمة_النوع

تمت الإشارة إليه من class_def_item وproto_id_item

تظهر في قسم البيانات

المحاذاة: 4 بايت

الاسم التنسيق الوصف
الحجم مهم حجم القائمة في الإدخالات
قائمة نوع_السلعة [size] عناصر القائمة

تنسيق type_item

الاسم التنسيق الوصف
type_idx قصير الفهرس في قائمة type_ids

رمز_السلعة

تمت الإشارة إليها من Encrypt_method

تظهر في قسم البيانات

المحاذاة: 4 بايت

الاسم التنسيق الوصف
حجم_التسجيل قصير عدد السجلات التي يستخدمها هذا الرمز
ins_size قصير عدد كلمات الوسيطات الواردة إلى الطريقة التي الرمز لـ
حجم_خارجي قصير عدد كلمات مساحة الوسيطة الصادرة التي يتطلبها هذا رمز لاستدعاء الطريقة
تجربة_الحجم قصير عدد try_item لهذا المثيل. إذا لم تكن صفر، ثم تظهر هذه كمصفوفة tries بعد insns في هذه الحالة.
debug_info_off مهم الإزاحة من بداية الملف إلى معلومات تصحيح الأخطاء (أرقام الأسطر + هذا الرمز، أو 0 إذا ببساطة لا توجد معلومات. ويجب أن تكون الإزاحة، إذا لم تكن صفرية، إلى موقع جغرافي في القسم data. تنسيق يتم تحديد البيانات من خلال "debug_info_item" أدناه.
حجم_الشحن مهم حجم قائمة التعليمات في وحدة رموز 16 بت
استراحة ushort[insns_size] الصفيفة الفعلية لرمز البايت. تنسيق الرمز في insns يتم تحديد الصفيفة من خلال المستند المصاحب رمز بايت Dalvik. ملاحظة على الرغم من تعريفه على أنه مصفوفة ushort، إلا أنه هي بعض الهياكل الداخلية التي تفضل محاذاة أربعة بايت. كذلك، فإذا حدث ذلك في ملف تم تبديله لدى النهاية، فإن عملية التبديل يتم فقط على حالات ushort الفردية وليس على هياكل داخلية أكبر.
padding ushort (اختيارية) = 0 2 بايت من المساحة المتروكة لتتم محاذاة tries إلى أربعة بايت. لا يتوفّر هذا العنصر إلا إذا كانت قيمة tries_size غير صفرية. وinsns_size غريبة.
يحاول test_item[tries_size] (اختيارية) مصفوفة تشير إلى مكان اكتشاف استثناءات التعليمة البرمجية وكيفية التعامل معها. يجب أن تكون عناصر الصفيفة غير متداخلة في والترتيب من عنوان منخفض إلى مرتفع. هذا العنصر هو فقط موجودة إذا كانت قيمة tries_size غير صفرية.
المعالجات Encrypt_catch_handler_list (اختياري). وحدات البايت التي تمثل قائمة بأنواع الصيد والمرتبطة عناوين المعالج. كل try_item له إزاحة من ناحية البايت في هذا الهيكل. لا يتوفّر هذا العنصر إلا إذا قيمة tries_size ليست صفرية.

تنسيق تجربة_السلع

الاسم التنسيق الوصف
بدء_إضافة مهم عنوان بداية مجموعة الرموز التي يشملها هذا الإدخال. العنوان وهو عدد وحدات الرموز المكونة من 16 بت في بداية أول عملية التعليمات.
عدد_ الأنشطة قصير عدد وحدات الرموز 16 بت التي يشملها هذا الإدخال. الرمز الأخير الوحدة المشمولة (شاملة) هي start_addr + insn_count - 1.
معالج_إيقاف قصير إزاحة بالبايت من بداية الملف المرتبط في encoded_catch_hander_list encoded_catch_handler لهذا الإدخال. يجب أن يكون هذا محاذاة إلى بداية encoded_catch_handler.

تنسيق Encrypt_catch_handler_list

الاسم التنسيق الوصف
الحجم يوليو 128 حجم هذه القائمة، في الإدخالات
قائمة Encrypt_catch_handler[handlers_size] قائمة الفعلية لقوائم المعالجات، يتم تمثيلها بشكل مباشر (وليس كإزاحة)، ويتم تجميعها بشكل تسلسلي

تنسيق Encrypt_catch_handler

الاسم التنسيق الوصف
الحجم cannot translate عدد أنواع الصيد في هذه القائمة. إذا لم تكن إيجابية، فهذا يعني يكون ناتج سالب عدد أنواع الصيد، ويتبع هذا الصيد بواسطة معالج شامل. على سبيل المثال: size من 0 يشير ذلك إلى أنّه لا تتوفّر عبارات مكتوبة بأسلوب واضح. تعني size لـ 2 أنّ هناك نوعَين من السلع ما تم رصده بدون اصطيادات من مسافة بعيدة. وsize من -1 يعني أن هناك علامة صيد مكتوبة مع لقطة شاملة.
المعالجات Encrypt_type_addr_pair[abs(size)] مجموعة بث لـ abs(size) من العناصر المرمّزة، عنصر لكل عنصر تم التقاطه نوعها، بالترتيب الذي ينبغي اختبار الأنواع به.
التقاط_الكل_للإضافة uleb128 (اختياري) عنوان رمز البايت لمعالج استقبال الرسائل الخاطئة. هذا العنصر هو فقط موجودة إذا كانت size غير موجبة.

تنسيق Encrypt_type_addr_pair

الاسم التنسيق الوصف
type_idx يوليو 128 إلى القائمة type_ids لنوع استثناء للالتقاط
العنوان يوليو 128 عنوان رمز البايت لمعالِج الاستثناء المرتبط

debug_info_item

تمت الإشارة إليها من code_item

تظهر في قسم البيانات

المحاذاة: لا شيء (محاذاة بالبايت)

تحدّد كل debug_info_item وحدة بايت مستندة إلى DWARF3 آلة محددة عند تفسيرها تنبعث من مواضعها و (يحتمل) معلومات المتغير المحلي لإحدى code_item يبدأ التسلسل بمتغير طول العنوان (يعتمد طوله على عدد الطريقة متبوعة برموز بايت جهاز الدولة، وينتهي بحجم DBG_END_SEQUENCE بايت.

يتكون جهاز الولاية من خمسة سجلات. تشير رسالة الأشكال البيانية يمثّل سجلّ address معادلة التعليمات في المرتبطة insns_item بوحدات رموز 16 بت. تشير رسالة الأشكال البيانية يبدأ تسجيل address في 0 في بداية كل debug_info ويجب أن يزداد بشكل رتيب فقط. يمثّل سجلّ line رقم سطر المصدر مرتبطًا بإدخالات جدول المواضع التالية الصادرة عن جهاز الدولة. ويتم إعداده في عنوان التسلسل، وقد التغيير في الاتجاهات الإيجابية أو السلبية ولكن يجب ألا يكون أقل من 1 يمثّل سجلّ "source_file" ملف المصدر الذي تشير إليه إدخالات أرقام الأسطر. يتم إعداده على قيمة source_file_idx في class_def_item. المتغيرين الآخرين، prologue_end epilogue_begin، هي علامات منطقية (مهيأة إلى false) التي تشير إلى ما إذا كان الموضع التالي قد انطلق أم لا اعتباره مقدمة أو خاتمة طريقة. جهاز الحالة أيضًا تتبع اسم ونوع آخر متغير محلي موجود في كل جهاز تسجيل للرمز DBG_RESTART_LOCAL.

العنوان على النحو التالي:

الاسم التنسيق الوصف
بداية_السطر يوليو 128 القيمة الأولية لسجل line في جهاز الولاية. لا يمثل إدخالاً فعليًا لمواضع الإعلانات.
حجم_المعلمات يوليو 128 عدد أسماء المعلمات المشفرة. ينبغي أن يكون هناك واحدة لكل معلمة طريقة، باستثناء this لطريقة المثيل، إن وجدت.
اسم_المَعلمة uleb128p1[parameters_size] فهرس السلسلة لاسم معلمة الطريقة. قيمة مشفرة يشير NO_INDEX إلى عدم توفّر اسم متاحة للمعلمة المرتبطة. واصف النوع والتوقيع مشمولين من واصف الطريقة والتوقيع.

قيم رمز البايت هي كما يلي:

الاسم القيمة التنسيق الوسيطات الوصف
دالة DBG_END_SEQUENCE 0×00 (بدون) لإنهاء تسلسل معلومات تصحيح الأخطاء لـ code_item
DBG_ADVANCE_PC 0x01 uleb128 addr_diff addr_diff: المبلغ الذي ستتم إضافته إلى سجلّ العناوين حفظ سجل العناوين دون إصدار إدخال للوظائف
خط DBG_ADVANCE_LINE 0x02 sleb128 line_diff line_diff: المبلغ المطلوب تغيير سجل السطر بحلول تقدم سجل الخط دون إصدار إدخال مواضع
DBG_START_LOCAL 0x03 uleb128 register_num
uleb128p1 name_idx
uleb128p1 type_idx
register_num: سجلّ يتضمّن المحتوى المحلي
name_idx: فهرس السلسلة للاسم
type_idx: فهرس النوع من النوع
تقدم متغيرًا محليًا في العنوان الحالي. أيّ منهما قد يكون name_idx أو type_idx NO_INDEX للإشارة إلى أن هذه القيمة غير معروفة.
DBG_START_LOCAL_EXTENDED 0×04 uleb128 register_num
uleb128p1 name_idx
uleb128p1 type_idx
uleb128p1 sig_idx
register_num: سجلّ يتضمّن المحتوى المحلي
name_idx: فهرس السلسلة للاسم
type_idx: فهرس النوع من النوع
sig_idx: فهرس سلسلة لنوع التوقيع
يقدّم محليًّا بتوقيع نوع في العنوان الحالي. أي من name_idx أو type_idx أو قد يكون "sig_idx" NO_INDEX للإشارة إلى أن هذه القيمة غير معروفة. (إذا كانت sig_idx -1، ومع ذلك، يمكن تمثيل نفس البيانات بشكل أكثر بكفاءة باستخدام العملية DBG_START_LOCAL.)

ملاحظة: يمكنك الاطّلاع على المناقشة ضمن "dalvik.annotation.Signature" أدناه لتنبيهات حول التعامل مع التوقيعات.

DBG_END_LOCAL 0x05 uleb128 register_num register_num: السجلّ الذي يحتوي على دليل محلي تضع علامة على متغير محلي نشط حاليًا على أنه خارج النطاق في القيمة الحالية الْعِنْوَانْ
DBG_RESTART_LOCAL 0×06 uleb128 register_num register_num: سجِّل لإعادة التشغيل لإعادة تقديم متغير محلي في العنوان الحالي. الاسم والنوع هما نفسهما لآخر محلي كان موجودًا في النطاق المحدد لتسجيله.
DBG_SET_PROLOGUE_END 0×07 (بدون) لضبط سجل جهاز الحالة prologue_end، مما يشير إلى أن إدخال الموضع التالي الذي تتم إضافته يجب تعتبر نهاية مقدمة الطريقة (مكان مناسب نقطة إيقاف طريقة). ماكينة تسجيل prologue_end هي محوها بأي برنامج تشغيل خاص (>= 0x0a).
DBG_SET_EPILOGUE_BEGIN 0×08 (بدون) لضبط سجل جهاز الحالة epilogue_begin، مما يشير إلى أن إدخال الموضع التالي الذي تتم إضافته يجب تعتبر بداية خاتمة الطريقة (مكان مناسب تعليق التنفيذ قبل الخروج من الطريقة). يتم محو سجلّ epilogue_begin من خلال أي خاص (>= 0x0a).
ملف_DBG_SET 0x09 uleb128p1 name_idx name_idx: فهرس السلسلة لاسم ملف المصدر؛ NO_INDEX إذا كان غير معروف إلى أن جميع إدخالات أرقام الأسطر اللاحقة تشير إلى هذا اسم ملف المصدر، بدلاً من الاسم الافتراضي المحدد في code_item
رموز العمليات الخاصة 0x0a...0xff (بدون) تحقيق تقدمًا في تسجيل line وaddress، وتُصدر إدخال موضع، وتمحو prologue_end epilogue_begin انظر أدناه للاطّلاع على الوصف.

رموز العمليات الخاصة

الرموز البرمجية التي تتضمن قِيَمًا بين 0x0a و0xff (شاملًا) نقل كل من line وaddress بكمية صغيرة ثم يُصدر إدخالاً جديدًا لجدول المواضع. في ما يلي صيغة الزيادات:

DBG_FIRST_SPECIAL = 0x0a  // the smallest special opcode
DBG_LINE_BASE   = -4      // the smallest line number increment
DBG_LINE_RANGE  = 15      // the number of line increments represented

adjusted_opcode = opcode - DBG_FIRST_SPECIAL

line += DBG_LINE_BASE + (adjusted_opcode % DBG_LINE_RANGE)
address += (adjusted_opcode / DBG_LINE_RANGE)

دليل_التعليقات التوضيحية_عنصر

تمت الإشارة إليه من class_def_item

تظهر في قسم البيانات

المحاذاة: 4 بايت

الاسم التنسيق الوصف
class_annotations_off مهم من بداية الملف إلى التعليقات التوضيحية التي تم إنشاؤها مباشرة في الصف، أو 0 إذا لم يكن لدى الصف تعليقات توضيحية مباشرة. إذا كانت الإزاحة غير صفرية، يجب أن تكون في موقع داخل قسم "data". تم تحديد تنسيق البيانات من "annotation_set_item" أدناه.
حجم_الحقول مهم عدد الحقول التي تمت إضافة تعليقات توضيحية إليها بواسطة هذا العنصر
طرق_حجم_التعليقات التوضيحية مهم عدد الطرق التي تمت إضافة تعليقات توضيحية إليها بواسطة هذا العنصر
معلمات_حجم_تعليقات توضيحية مهم عدد قوائم مَعلمات الطريقة التي تمت إضافة تعليقات توضيحية إليها من خلال هذا العنصر
التعليقات التوضيحية للحقل field_annotation[fields_size] (اختياري) قائمة التعليقات التوضيحية للحقول المرتبطة يجب أن تتضمن عناصر القائمة ترتيب تصاعدي حسب field_idx.
طريقة_التعليقات التوضيحية method_annotation[methods_size] (اختيارية) قائمة بالتعليقات التوضيحية للطرق المرتبطة. يجب أن تتضمن عناصر القائمة ترتيب تصاعدي حسب method_idx.
معلمة_annotations معلمة_annotation[parameters_size] (اختيارية) قائمة بالتعليقات التوضيحية لمعلمات الطرق المرتبطة. عناصر يجب ترتيب القائمة بترتيب متزايد، حسب method_idx.

ملاحظة: تظهر جميع العناصر field_id و يجب أن تشير مثيلات method_id إلى الفئة التعريف نفسها.

تنسيق field_annotation

الاسم التنسيق الوصف
معرف_الحقل مهم في القائمة field_ids لهوية الحقل الذي تتم إضافة تعليقات توضيحية إليه
التعليقات التوضيحية_متوقفة مهم من بداية الملف إلى قائمة التعليقات التوضيحية في هذا المجال. يجب أن تكون الإزاحة في موقع جغرافي في data. . يتم تحديد تنسيق البيانات من خلال "annotation_set_item" أدناه.

تنسيق method_annotation

الاسم التنسيق الوصف
معرّف_الطريقة مهم في القائمة method_ids لهوية طريقة لإضافة تعليقات توضيحية
التعليقات التوضيحية_متوقفة مهم من بداية الملف إلى قائمة التعليقات التوضيحية الطريقة. يجب أن تكون الإزاحة في موقع في قسم "data". يتم تحديد تنسيق البيانات من خلال "annotation_set_item" أدناه.

تنسيق المَعلمة_annotation

الاسم التنسيق الوصف
معرّف_الطريقة مهم في القائمة method_ids لهوية طريقة يتم وضع تعليقات توضيحية على معاملاتها
التعليقات التوضيحية_متوقفة مهم من بداية الملف إلى قائمة التعليقات التوضيحية معلمات الطريقة. يجب أن تكون الإزاحة في موقع في قسم "data". يتم تحديد تنسيق البيانات من خلال "annotation_set_ref_list" أدناه.

تعليقات_مجموعة_ref_list

تمت الإشارة إليه من parameters_annotations_item

تظهر في قسم البيانات

المحاذاة: 4 بايت

الاسم التنسيق الوصف
الحجم مهم حجم القائمة في الإدخالات
قائمة Feedback_set_ref_item[size] عناصر القائمة

تنسيق التعليق التوضيحي مجموعة_ref_item

الاسم التنسيق الوصف
التعليقات التوضيحية_متوقفة مهم الإزاحة من بداية الملف إلى مجموعة التعليقات التوضيحية المشار إليها أو 0 إذا لم تتوفّر تعليقات توضيحية لهذا العنصر. إذا كانت الإزاحة غير صفرية، يجب أن تكون في موقع جغرافي في data. . يتم تحديد تنسيق البيانات من خلال "annotation_set_item" أدناه.

عنصر_مجموعة_التعليقات التوضيحية

تمت الإشارة إليها من annotate_directory_item، وfield_annotations_item، method_annotations_item و annotate_set_ref_item

تظهر في قسم البيانات

المحاذاة: 4 بايت

الاسم التنسيق الوصف
الحجم مهم حجم المجموعة في الإدخالات
الإدخالات التعليق التوضيحي_خارج_السلعة[size] وعناصر المجموعة. يجب فرز العناصر بترتيب متزايد، من قناة "type_idx"

تنسيق_التعليقات التوضيحية_خارج_السلع

الاسم التنسيق الوصف
التعليق التوضيحي متوقف مهم الإزاحة من بداية الملف إلى التعليق التوضيحي. يجب أن تكون الإزاحة إلى موقع جغرافي في القسم data، ويتم تحديد تنسيق البيانات في هذا الموقع من خلال "annotation_item" أدناه.

عنصر_التعليق التوضيحي

تمت الإشارة إليها من annotate_set_item

تظهر في قسم البيانات

المحاذاة: لا شيء (محاذاة بالبايت)

الاسم التنسيق الوصف
الظهور بايت مستوى الرؤية المقصود لهذا التعليق التوضيحي (انظر أدناه)
تعليق توضيحي ترميز_مشفّر بترميز محتويات التعليقات التوضيحية المشفرة، بالتنسيق الموضح من خلال "تنسيق encoded_annotation" أقل من "ترميز encoded_value" أعلاه.

قيم مستوى الرؤية

هذه هي الخيارات للحقل visibility في annotation_item:

الاسم القيمة الوصف
VISIBILITY_BUILD 0×00 تكون مرئية فقط في وقت الإنشاء (على سبيل المثال، أثناء استخدام التحويل البرمجي) من التعليمات البرمجية الأخرى)
VISIBILITY_RUNTIME 0x01 يهدف إلى إظهاره في وقت التشغيل
نظام VISIBILITY_SYSTEM 0x02 تكون مرئية في وقت التشغيل، ولكن للنظام الأساسي فقط (وليس لرمز المستخدم العادي)

عنصر_المصفوفة_المُشفَّرة

تمت الإشارة إليه من class_def_item

تظهر في قسم البيانات

المحاذاة: لا شيء (محاذاة بالبايت)

الاسم التنسيق الوصف
القيمة مصفوفة_مشفّرة وحدات بايت تمثل قيمة الصفيفة المشفَّرة بالتنسيق المحدّد بواسطة "تنسيق encoded_array" ضمن "encoded_value" الترميز" أعلاه.

إخفاء واجهة برمجة تطبيقات الصف البيانات

يتضمّن هذا القسم بيانات عن الواجهات المحظورة التي يستخدمها كل فئة.

ملاحظة: تم طرح ميزة واجهة برمجة التطبيقات المخفية في الإصدار 10.0 من نظام التشغيل Android. وينطبق فقط على ملفات DEX للفئات في مسار فئة التمهيد. قد يتم توسيع قائمة العلامات الموضّحة أدناه في الإصدارات المستقبلية. من Android. لمزيد من المعلومات، يُرجى مراجعة القيود المفروضة على الواجهات غير المستندة إلى حزمة تطوير البرامج (SDK):

الاسم التنسيق الوصف
الحجم مهم الحجم الإجمالي للقسم
علامات إزاحة uint[] مصفوفة من إزاحة تمت فهرستها بواسطة class_idx. يعني إدخال الصفيفة صفر في الفهرس class_idx أن ما مِن بيانات لواجهة برمجة التطبيقات class_idx هذه أو كل واجهات برمجة التطبيقات المخفية العلامات صفر. وبخلاف ذلك، يكون إدخال الصفيفة غير صفري ويحتوي على إزاحة من بداية القسم إلى مصفوفة من علامات واجهة برمجة التطبيقات المخفية لهذا class_idx.
العلامة uleb128[] الصفائف المتسلسلة من علامات واجهة برمجة التطبيقات المخفية لكل فئة. ويتم توضيح قيم العلامات المحتملة في الجدول أدناه. يتم ترميز العلامات بنفس ترتيب الحقول والطرق. مُشفّرة في بيانات الفئة.

أنواع علامات التقييد:

الاسم القيمة الوصف
القائمة البيضاء 0 واجهات يمكن استخدامها بحرية ودعمها كجزء من إطار عمل Android الموثَّق رسميًا فهرس الحزم:
القائمة الرمادية 1 الواجهات غير المتوفرة في حزمة SDK التي يمكن استخدامها بغض النظر عن واجهات برمجة التطبيقات لمستوى واجهة برمجة التطبيقات المستهدَف.
وضع في القائمة السوداء 2 الواجهات غير المتوفرة في حزمة SDK التي لا يمكن استخدامها بغض النظر عن وظائف التطبيق لمستوى واجهة برمجة التطبيقات المستهدَف. يؤدي الوصول إلى إحدى هذه الواجهات إلى خطأ في وقت التشغيل.
القائمة الرمادية-max-o 3 الواجهات غير المتوفرة في حزمة تطوير البرامج (SDK) التي يمكن استخدامها لنظام التشغيل Android 8.x والإصدارات الأقدم إلا إذا كانت محظورة.
القائمة الرمادية-max-p 4 واجهات غير متوفرة في حزمة SDK يمكن استخدامها لنظام التشغيل Android 9.x إلا إذا كانت محظورة.
القائمة الرمادية-max-q 5 واجهات غير متوفرة في حزمة SDK يمكن استخدامها لنظام التشغيل Android 10.x إلا إذا كانت محظورة.
القائمة الرمادية-max-r 6 واجهات غير متوفرة في حزمة SDK يمكن استخدامها لنظام التشغيل Android 11.x إلا إذا كانت محظورة.

التعليقات التوضيحية للنظام

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

يتم تمثيل التعليقات التوضيحية للنظام في .dex من الملفات بتنسيق التعليقات التوضيحية التي تم ضبط مستوى الرؤية لها على VISIBILITY_SYSTEM

dalvik.annotation.AnnotationDefault

تظهر على الطرق في واجهات التعليقات التوضيحية

تم إرفاق تعليق توضيحي AnnotationDefault بكلٍّ من هذه الخيارات. للتعليقات التوضيحية التي تريد الإشارة إلى الروابط الافتراضية.

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

Dalvik.annotation.EnclosingClass

يظهر في الصفوف

تم إرفاق تعليق توضيحي بالسمة EnclosingClass بكل صف. الذي يتم تعريفه كعضو في فئة أخرى في حد ذاته أو مجهول ولكن لم يتم تعريفه ضمن نص طريقة (على سبيل المثال، وصف اصطناعي الفئة الداخلية). يجب أن تحتوي كل فئة تتضمن هذا التعليق التوضيحي أيضًا على تعليق توضيحي واحد (InnerClass) بالإضافة إلى ذلك، يجب ألا يكون للفئة كل من EnclosingClass و تعليق توضيحي واحد (EnclosingMethod)

الاسم التنسيق الوصف
القيمة الفئة الفئة التي تتناول هذه الفئة من الناحية المعجمية

dalvik.annotation.EnclosingMethod

يظهر في الصفوف

تم إرفاق تعليق توضيحي بالسمة EnclosingMethod بكل صف. والذي يتم تحديده داخل نص الطريقة. كل صف لديه هذا يجب أن يتضمّن التعليق التوضيحي أيضًا التعليق التوضيحي InnerClass. بالإضافة إلى ذلك، يجب ألا يحتوي الصف على كل من EnclosingClass والتعليق التوضيحي EnclosingMethod.

الاسم التنسيق الوصف
القيمة الطريقة هو الطريقة الأكثر تحديدًا لهذه الفئة من الناحية اللغوية

Dalvik.annotation.InnerClass

يظهر في الصفوف

تم إرفاق تعليق توضيحي بالسمة InnerClass بكل صف. والذي يتم تعريفه في النطاق المعجم لتعريف فئة أخرى. يجب أن تحتوي أي فئة تشتمل على هذا التعليق التوضيحي أيضًا على أي التعليق التوضيحي EnclosingClass أو تعليق توضيحي EnclosingMethod

الاسم التنسيق الوصف
اسم سلسلة الاسم البسيط المُعلَن عنه في الأصل لهذه الفئة (لا يتضمن أي بادئة الحزمة). إذا كانت هذه الفئة مجهولة، فسيكون الاسم null
علامات الوصول تدخُّل دفاعي علامات الوصول المُعلن عنها في الأصل للفئة (والتي قد تختلف من العلامات الفعالة بسبب عدم التطابق بين التنفيذ النماذج للغة المصدر والجهاز الافتراضي المستهدف)

Dalvik.annotation.MemberClasses

يظهر في الصفوف

تم إرفاق تعليق توضيحي بالسمة MemberClasses بكل صف. التي تعلن عن فئات الأعضاء. (فئة الأعضاء هي فئة داخلية مباشرة له اسم).

الاسم التنسيق الوصف
القيمة الصف[] مصفوفة فئات الأعضاء

dalvik.annotation.Methodparams

يظهر مع طرق الدفع

ملاحظة: تمت إضافة هذا التعليق التوضيحي بعد Android 7.1. وسيتم تجاهله في إصدارات Android السابقة.

إنّ التعليق التوضيحي MethodParameters اختياري ويمكن استخدامه توفير البيانات الوصفية للمعلَمات مثل أسماء المعلَمات والمعدِّلات.

ويمكن حذف التعليق التوضيحي من طريقة أو دالة إنشائية بأمان عند البيانات الوصفية للمعلمات ليست مطلوبة في وقت التشغيل. يمكن استخدام java.lang.reflect.Parameter.isNamePresent() للتحقّق من ما إذا كانت البيانات الوصفية موجودة لمعلمة ما والانعكاس المرتبط بها سيتم تطبيق طرق مثل java.lang.reflect.Parameter.getName() الرجوع إلى السلوك التلقائي في وقت التشغيل في حال عدم توفّر المعلومات

عند تضمين البيانات الوصفية للمعلمات، يجب أن تتضمن برامج التحويل البرمجي معلومات للفئات التي تم إنشاؤها مثل التعدادات، نظرًا لأن البيانات الوصفية للمعلمة تتضمّن ما إذا كانت المَعلمة اصطناعية أو إلزامية أم لا.

يصف التعليق التوضيحي MethodParameters طريقة فردية فقط المعلَمات. لذلك، قد تحذف برامج التجميع التعليق التوضيحي تمامًا. للإنشاءات والطرق التي لا تحتوي على معلَمات، لأغراض حجم الرمز البرمجي وكفاءة وقت التشغيل.

يجب أن تكون الصفائف الموثقة أدناه بنفس حجم بنية مؤشر method_id_item المرتبطة بالطريقة سيتم رمي java.lang.reflect.MalformedParametersException وقت التشغيل.

وهي: method_id_item.proto_idx -> proto_id_item.parameters_off -> يجب أن تكون type_list.size هي نفسها names().length accessFlags().length

لأنّ MethodParameters تصف كل الطرق الرسمية والمعلَمات، حتى تلك التي لم يتم تعريفها بشكل صريح أو ضمني في رمز المصدر قد يختلف حجم الصفائف عن التوقيع أو البيانات الوصفية الأخرى المعلومات التي تستند فقط إلى المعلمات الصريحة المعلنة في المصدر الرمز. لن تتضمّن "MethodParameters" أيضًا أي معلومات عن كتابة معلمات مستلم التعليقات التوضيحية غير الموجودة في الطريقة الفعلية التوقيع.

الاسم التنسيق الوصف
الأسماء String[] أسماء المعاملات الرسمية للطريقة المرتبطة. الصفيفة يجب ألا تكون قيمة خالية ولكن يجب أن تكون فارغة إذا لم تكن هناك معلمات رسمية. قيمة في يجب أن تكون الصفيفة خالية إذا كانت المعلمة الرسمية التي تتضمن هذا الفهرس بدون اسم.
إذا كانت سلاسل اسم المَعلمة فارغة أو تحتوي على '.' أو ';' أو '[' أو '/' ثم a سيتم رمي java.lang.reflect.MalformedParametersException وقت التشغيل.
علامات الوصول int[] علامات الوصول للمعلَمات الرسمية للطريقة المرتبطة. تشير رسالة الأشكال البيانية يجب ألا تكون الصفيفة فارغة ولكن يجب أن تكون فارغة إذا لم تكن هناك معلَمات رسمية.
القيمة هي قناع بت بالقيم التالية:
  • 0x0010 : نهائية، تم الإعلان عن المعلمة بشكل نهائي
  • 0x1000 : تم تقديم المعلمة بواسطة برنامج التجميع الاصطناعي
  • 0x8000 : أصبحت المعلمة اصطناعية ولكنها ضمنية اللغة أيضًا المواصفات
إذا تم تعيين أي وحدات بت خارج هذه المجموعة، فعندئذٍ سيتم طرح java.lang.reflect.MalformedParametersException في وقت التشغيل.

dalvik.annotation.Signature

تظهر في الفئات والحقول والطرق

يتم إرفاق تعليق توضيحي بالسمة Signature بكل صف. أو حقل أو طريقة يتم تعريفها من حيث نوع أكثر تعقيدًا عن القيمة التي يمكن تمثيلها باستخدام type_id_item. تشير رسالة الأشكال البيانية لا يحدد التنسيق .dex تنسيق التوقيعات، هو/هي هي القدرة على تمثيل أي توقيع مصدر من أجل تنفيذ ناجح لهذه اللغة الدلالة. وبناءً على ذلك، لا يتم تحليل التوقيعات أو التحقق منها بشكل عام. من خلال عمليات تنفيذ الأجهزة الافتراضية. يتم تسليم التوقيعات ببساطة واجهات برمجة التطبيقات والأدوات ذات المستوى الأعلى (مثل برامج تصحيح الأخطاء). يُعد أي استخدام فينبغي كتابة توقيع حتى لا يحدث أي افتراضات حول تلقي توقيعات صالحة فقط، وحماية صريحة نفسها ضد احتمال المصادفة عبر جملة توقيع غير صالح.

نظرًا لأن سلاسل التوقيع تميل إلى أن تحتوي على الكثير من المحتوى المكرر، يتم تعريف تعليق Signature التوضيحي بأنّه مصفوفة من حيث تشير العناصر المكررة بشكل طبيعي إلى نفس البيانات الأساسية، ويؤخذ التوقيع على أنه سلسلة جميع السلاسل في الصفيفة. لا توجد قواعد حول كيفية سحب وفصل التوقيع إلى سلاسل منفصلة؛ يعود تمامًا إلى الأدوات التي تنشئ ملفات .dex.

الاسم التنسيق الوصف
القيمة String[] توقيع هذه الفئة أو العضو، كمصفوفة من السلاسل التي هو أن يتم تسلسله معًا

دالفيك.annotation.Throws

يظهر مع طرق الدفع

يتم إرفاق تعليق توضيحي Throws بكل طريقة الإعلان عن طرح نوع أو أكثر من أنواع الاستثناءات.

الاسم التنسيق الوصف
القيمة الصف[] طرح صفيفة أنواع الاستثناءات