این سند طرح و محتویات فایلهای .dex را توصیف میکند که برای نگهداری مجموعهای از تعاریف کلاس و دادههای کمکی مرتبط با آنها استفاده میشوند.
| نام | توضیحات | 
|---|---|
| بایت | 8 بیتی امضا شده | 
| یوبایت | 8 بیتی بدون علامت | 
| کوتاه | 16 بیتی امضا شده، کمی اندین | 
| کوتاه | 16 بیتی بدون علامت، کمی اندین | 
| بین المللی | 32 بیتی امضا شده، کمی اندین | 
| unint | 32 بیتی بدون علامت، کمی اندین | 
| طولانی | 64 بیتی امضا شده، کمی اندین | 
| طولانی | 64 بیتی بدون علامت، کمی اندین | 
| sleb128 | امضا شده LEB128، با طول متغیر (به زیر مراجعه کنید) | 
| uleb128 | LEB128 بدون امضا، با طول متغیر (به زیر مراجعه کنید) | 
| uleb128p1 | بدون علامت LEB128 به علاوه 1، با طول متغیر (به زیر مراجعه کنید) | 
 LEB128 (" L ittle- Endian B ase 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 برای نشان دادن یک مقدار علامتدار استفاده میشود، جایی که نمایش مقدار به اضافه یک بهعنوان uleb128 کدگذاری شده است. این باعث میشود رمزگذاری -1 (که بهعنوان مقدار بدون علامت 0xffffffff در نظر گرفته میشود) - اما هیچ عدد منفی دیگری - یک بایت واحد نیست، و دقیقاً در مواردی مفید است که عدد ارائهشده باید غیر منفی یا -1 (یا 0xffffffff ) باشد، و در جایی که مقادیر منفی دیگری مجاز نیستند (یا جایی که مقادیر بزرگ بدون علامت لازم است).
در اینجا چند نمونه از فرمت ها آورده شده است:
| دنباله کدگذاری شده | به عنوان sleb128 | به عنوان uleb128 | به عنوان uleb128p1 | 
|---|---|---|---|
| 00 | 0 | 0 | -1 | 
| 01 | 1 | 1 | 0 | 
| 7f | -1 | 127 | 126 | 
| 80 7f | -128 | 16256 | 16255 | 
| نام | قالب | توضیحات | 
|---|---|---|
| هدر | header_item | هدر | 
| string_ids | string_id_item[] | لیست شناسه رشته ها اینها شناسههایی برای تمام رشتههایی هستند که توسط این فایل استفاده میشوند، یا برای نامگذاری داخلی (مثلاً توصیفکنندههای نوع) یا بهعنوان اشیاء ثابت که با کد ارجاع میشوند. این فهرست باید بر اساس محتویات رشته، با استفاده از مقادیر نقطه کد UTF-16 (نه به روشی حساس به محلی)، و نباید حاوی هیچ ورودی تکراری باشد. | 
| type_ids | type_id_item[] | لیست شناسه های نوع اینها شناسههایی برای همه انواع (کلاسها، آرایهها یا انواع اولیه) هستند که توسط این فایل به آنها اشاره میشود، چه در فایل تعریف شده باشند یا نه. این لیست باید بر اساس فهرست string_idمرتب شود و نباید حاوی هیچ ورودی تکراری باشد. | 
| proto_ids | proto_id_item[] | لیست شناسه های نمونه اولیه روش. اینها شناسههای همه نمونههای اولیه هستند که توسط این فایل به آنها ارجاع شده است. این فهرست باید به ترتیب اصلی نوع بازگشتی (براساس نمایه type_id) و سپس بر اساس فهرست آرگومان (ترتیب واژگان نگاری، آرگومان های فردی مرتب شده بر اساس نمایهtype_id) مرتب شود. لیست نباید حاوی هیچ ورودی تکراری باشد. | 
| field_ids | field_id_item[] | لیست شناسه های فیلد اینها شناسههایی برای تمام فیلدهای ارجاع شده توسط این فایل هستند، خواه در فایل تعریف شده باشند یا نه. این لیست باید مرتب شود، که در آن نوع تعیین کننده (براساس شاخص type_id) ترتیب اصلی، نام فیلد (براساس فهرستstring_id) ترتیب میانی و نوع (بر اساس شاخصtype_id) ترتیب فرعی است. لیست نباید حاوی هیچ ورودی تکراری باشد. | 
| روش_ids | method_id_item[] | لیست شناسه های روش اینها شناسههایی برای همه روشهای ارجاعشده توسط این فایل هستند، خواه در فایل تعریف شده باشند یا نه. این لیست باید مرتب شود، که در آن نوع تعریف کننده (براساس شاخص type_id) ترتیب اصلی، نام روش (براساس شاخصstring_id) ترتیب میانی و نمونه اولیه روش (بر اساس شاخصproto_id) ترتیب فرعی است. لیست نباید حاوی هیچ ورودی تکراری باشد. | 
| class_defs | class_def_item[] | لیست تعاریف کلاس کلاس ها باید به گونه ای مرتب شوند که سوپرکلاس کلاس معین و رابط های پیاده سازی شده زودتر از کلاس ارجاع دهنده در لیست ظاهر شوند. علاوه بر این، برای یک تعریف برای یک کلاس با همان نام که بیش از یک بار در لیست ظاهر شود نامعتبر است. | 
| call_site_ids | call_site_id_item[] | تماس با لیست شناسه های سایت اینها شناسههایی برای همه سایتهای تماسی هستند که توسط این فایل به آنها اشاره میشود، چه در فایل تعریف شده باشند یا نه. این لیست باید به ترتیب صعودی call_site_offمرتب شود. | 
| روش_دسته ها | method_handle_item[] | لیست دسته های روش فهرستی از تمام دستههای متد که توسط این فایل به آنها ارجاع شده است، خواه در فایل تعریف شده باشند یا نه. این لیست مرتب نشده است و ممکن است حاوی موارد تکراری باشد که به طور منطقی با نمونه های دسته روش های مختلف مطابقت دارند. | 
| داده ها | یوبایت[] | ناحیه داده، حاوی تمام داده های پشتیبانی برای جداول فهرست شده در بالا. آیتم های مختلف نیازهای تراز متفاوتی دارند و در صورت لزوم برای دستیابی به تراز مناسب، بایت های padding قبل از هر آیتم درج می شوند. | 
| پیوند_داده | یوبایت[] | دادههای مورد استفاده در فایلهای مرتبط استاتیک فرمت داده های این بخش توسط این سند مشخص نشده است. این بخش در فایلهای بدون پیوند خالی است و پیادهسازیهای زمان اجرا ممکن است آنطور که صلاح میدانند از آن استفاده کنند. | 
نسخه 41 فرمت کانتینری جدیدی را برای داده های DEX با هدف صرفه جویی در فضا معرفی می کند. این فرمت کانتینری اجازه می دهد تا چندین فایل DEX منطقی در یک فایل فیزیکی واحد ترکیب شوند. فرمت جدید عمدتاً فقط الحاق ساده فایل ها در قالب قبلی است، با برخی تفاوت ها:
-  file_sizeاندازه فایل منطقی است، نه فایل فیزیکی. می توان از آن برای تکرار روی تمام فایل های منطقی موجود در کانتینر استفاده کرد.
- فایل های منطقی dex ممکن است به هر داده بعدی در ظرف (اما نه قبل از آن) اشاره کنند. این به فایلهای dex اجازه میدهد تا دادههایی مانند رشتهها را بین خود به اشتراک بگذارند.
- همه افست ها نسبت به فایل فیزیکی هستند. هیچ افست نسبت به هدر نیست. این تضمین می کند که بخش هایی با افست می توانند بین فایل های منطقی به اشتراک گذاشته شوند.
- هدر دو فیلد جدید برای توصیف محدوده های ظرف اضافه می کند. این یک بررسی سازگاری اضافی است و انتقال کد به قالب جدید را آسانتر میکند.
-  data_sizeوdata_offاکنون استفاده نشده است. داده ها می توانند در چندین فایل منطقی پخش شوند و لازم نیست به هم پیوسته باشند.
 آرایه/رشته ثابت DEX_FILE_MAGIC لیست بایت هایی است که باید در ابتدای یک فایل .dex ظاهر شود تا بتوان آن را به عنوان آن تشخیص داد. این مقدار عمداً حاوی یک خط جدید ( "\n" یا 0x0a ) و یک بایت تهی ( "\0" یا 0x00 ) است تا به شناسایی اشکال خاصی از فساد کمک کند. این مقدار همچنین یک شماره نسخه قالب را به صورت سه رقم اعشاری رمزگذاری میکند، که انتظار میرود در طول زمان و با تکامل قالب به طور یکنواخت افزایش یابد.
ubyte[8] DEX_FILE_MAGIC = { 0x64 0x65 0x78 0x0a 0x30 0x33 0x39 0x00 }
                        = "dex\n039\0"
 توجه: پشتیبانی از نسخه 041 قالب در نسخه اندروید 16 آزمایشی برای آزمایش قالب ظرف است. با این حال، نسخه 041 نباید برای کد تولید استفاده شود.
 توجه: پشتیبانی از نسخه 040 فرمت در نسخه Android 10.0 اضافه شد که مجموعه کاراکترهای مجاز را در SimpleNames گسترش داد.
 توجه: پشتیبانی از فرمت 039 در نسخه اندروید 9.0 اضافه شد که دو بایت کد جدید const-method-handle و const-method-type معرفی کرد. (اینها هر کدام در جدول خلاصه مجموعه بایت کد توضیح داده شده اند.) در اندروید 10، نسخه 039 فرمت فایل DEX را به گونه ای گسترش می دهد که اطلاعات API مخفی را شامل شود که فقط برای فایل های DEX در مسیر کلاس بوت قابل استفاده است.
 توجه: پشتیبانی از فرمت 038 در نسخه اندروید 8.0 اضافه شده است. نسخه 038 کدهای بایت جدیدی ( invoke-polymorphic و invoke-custom ) و داده ها را برای دسته های متد اضافه کرد.
 توجه: پشتیبانی از فرمت 037 در نسخه اندروید 7.0 اضافه شده است. قبل از نسخه 037 اکثر نسخه های اندروید از نسخه 035 فرمت استفاده می کردند. تنها تفاوت بین نسخه های 035 و 037 اضافه کردن روش های پیش فرض و تنظیم invoke است.
 توجه: حداقل چند نسخه قبلی این قالب در نسخههای نرمافزاری عمومی در دسترس استفاده شده است. برای مثال، نسخه 009 برای نسخه های M3 پلتفرم اندروید (نوامبر تا دسامبر 2007) و نسخه 013 برای نسخه های M5 پلتفرم اندروید (فوریه تا مارس 2008) استفاده شد. از چند جهت، این نسخههای قبلی فرمت به طور قابل توجهی با نسخه توصیفشده در این سند متفاوت است.
 ثابت ENDIAN_CONSTANT برای نشان دادن endianness فایلی که در آن یافت می شود استفاده می شود. اگرچه فرمت استاندارد .dex بسیار کم است، اما ممکن است پیاده سازی ها مبادله بایت را انتخاب کنند. اگر پیادهسازی به سرآیندی برخورد کند که endian_tag آن به جای ENDIAN_CONSTANT REVERSE_ENDIAN_CONSTANT باشد، متوجه میشود که فایل از فرم مورد انتظار بایت تعویض شده است.
uint ENDIAN_CONSTANT = 0x12345678; uint REVERSE_ENDIAN_CONSTANT = 0x78563412;
 ثابت NO_INDEX برای نشان دادن عدم وجود مقدار شاخص استفاده می شود.
 توجه: این مقدار 0 تعریف نشده است، زیرا در واقع یک شاخص معتبر است.
 مقدار انتخاب شده برای NO_INDEX به صورت یک بایت در رمزگذاری uleb128p1 قابل نمایش است.
uint NO_INDEX = 0xffffffff; // == -1 if treated as a signed int
فیلدهای بیتی این پرچم ها برای نشان دادن قابلیت دسترسی و ویژگی های کلی کلاس ها و اعضای کلاس استفاده می شوند.
| نام | ارزش | برای کلاس ها (و حاشیه نویسی InnerClass) | برای فیلدها | برای روش ها | 
|---|---|---|---|---|
| ACC_PUBLIC | 0x1 | public: در همه جا قابل مشاهده است | public: در همه جا قابل مشاهده است | public: در همه جا قابل مشاهده است | 
| ACC_PRIVATE | 0x2 | private: فقط برای تعریف کلاس قابل مشاهده است | private: فقط برای تعریف کلاس قابل مشاهده است | private: فقط برای تعریف کلاس قابل مشاهده است | 
| ACC_PROTECTED | 0x4 | protected: قابل مشاهده برای بسته و زیر کلاس ها | protected: قابل مشاهده برای بسته و زیر کلاس ها | protected: قابل مشاهده برای بسته و زیر کلاس ها | 
| ACC_STATIC | 0x8 | static: با یک مرجعthisساخته نشده است | static: جهانی برای تعریف کلاس | static:thisاستدلال را نمی پذیرد | 
| ACC_FINAL | 0x10 | final: زیر طبقه بندی نمی شود | final: تغییر ناپذیر پس از ساخت | final: غیر قابل رد شدن | 
| ACC_SYNCHRONIZED | 0x20 | synchronized: قفل مرتبط به طور خودکار حول تماس با این روش به دست می آید. توجه: این فقط زمانی معتبر است که  | ||
| ACC_VOLATILE | 0x40 | volatile: قوانین دسترسی ویژه برای کمک به ایمنی نخ | ||
| ACC_BRIDGE | 0x40 | روش bridge که به صورت خودکار توسط کامپایلر به عنوان پل ایمن نوع اضافه می شود | ||
| ACC_TRANSIENT | 0x80 | transient: با سریال سازی پیش فرض ذخیره نمی شود | ||
| ACC_VARARGS | 0x80 | آخرین آرگومان باید توسط کامپایلر به عنوان آرگومان "استراحت" در نظر گرفته شود | ||
| ACC_NATIVE | 0x100 | native: در کد بومی پیاده سازی شده است | ||
| ACC_INTERFACE | 0x200 | interface: کلاس انتزاعی قابل پیاده سازی چند برابری | ||
| ACC_ABSTRACT | 0x400 | abstract: مستقیماً قابل اثبات نیست | abstract: توسط این کلاس اجرا نشده است | |
| ACC_STRICT | 0x800 | strictfp: قوانین سختگیرانه برای محاسبات ممیز شناور | ||
| ACC_SYNTHETIC | 0x1000 | به طور مستقیم در کد منبع تعریف نشده است | به طور مستقیم در کد منبع تعریف نشده است | به طور مستقیم در کد منبع تعریف نشده است | 
| ACC_ANNOTATION | 0x2000 | به عنوان یک کلاس حاشیه نویسی اعلام شد | ||
| ACC_ENUM | 0x4000 | به عنوان یک نوع برشماری اعلام شد | به عنوان یک مقدار شمارش شده اعلام شد | |
| (استفاده نشده) | 0x8000 | |||
| ACC_CONSTRUCTOR | 0x10000 | روش سازنده (کلاس یا نمونه اولیه) | ||
| ACC_DECLARED_ همگام | 0x20000 | synchronizedاعلام شد .توجه: این هیچ تأثیری در اجرا ندارد (به غیر از انعکاس این پرچم، فی نفسه). | 
InnerClass مجاز است و هرگز نباید در یک class_def_item روشن باشد.
 به عنوان امتیازی برای پشتیبانی آسان تر قدیمی، فرمت .dex داده های رشته ای خود را در یک فرم استاندارد تغییر یافته UTF-8 که از این به بعد MUTF-8 نامیده می شود، رمزگذاری می کند. این فرم با استاندارد UTF-8 یکسان است، به جز:
- فقط از کدهای یک، دو و سه بایتی استفاده می شود.
-  نقاط کد در محدوده U+10000…U+10ffffبه عنوان یک جفت جایگزین رمزگذاری میشوند که هر کدام به صورت یک مقدار رمزگذاری شده سه بایتی نمایش داده میشوند.
-  نقطه کد U+0000به صورت دو بایتی کدگذاری شده است.
-  یک بایت تهی ساده (مقدار 0) پایان یک رشته را نشان می دهد، همانطور که تفسیر زبان استاندارد C است.
دو مورد اول در بالا را می توان به این صورت خلاصه کرد: MUTF-8 یک فرمت رمزگذاری برای UTF-16 است، به جای اینکه یک فرمت رمزگذاری مستقیم تر برای کاراکترهای یونیکد باشد.
 دو مورد آخر بالا به طور همزمان امکان گنجاندن نقطه کد U+0000 را در یک رشته و همچنان آن را به عنوان یک رشته تهی به سبک C دستکاری می کنند.
 با این حال، رمزگذاری ویژه U+0000 به این معنی است که بر خلاف UTF-8 معمولی، نتیجه فراخوانی تابع استاندارد C strcmp() روی یک جفت رشته MUTF-8 همیشه نشان دهنده نتیجه امضا شده مناسب از مقایسه رشته های نابرابر نیست. هنگامی که مرتب سازی (نه فقط برابری) یک نگرانی است، ساده ترین راه برای مقایسه رشته های MUTF-8 رمزگشایی آنها کاراکتر به کاراکتر و مقایسه مقادیر رمزگشایی شده است. (با این حال، پیاده سازی های هوشمندانه تری نیز امکان پذیر است.)
لطفاً برای اطلاعات بیشتر در مورد رمزگذاری کاراکتر به استاندارد یونیکد مراجعه کنید. MUTF-8 در واقع به رمزگذاری (نسبتا کمتر شناخته شده) CESU-8 نزدیکتر از UTF-8 فی نفسه است.
 encoded_value قطعه ای رمزگذاری شده از داده های (تقریباً) دلخواه با ساختار سلسله مراتبی است. رمزگذاری قرار است هم فشرده و هم ساده برای تجزیه باشد.
| نام | قالب | توضیحات | 
|---|---|---|
| (value_arg << 5) | value_type | یوبایت | بایت که نوع valueبلافاصله بعدی را به همراه یک آرگومان شفاف کننده اختیاری در سه بیت مرتبه بالا نشان می دهد. برای تعاریف مختلفvalueبه زیر مراجعه کنید. در بیشتر موارد،value_argطولvalueبلافاصله پس از آن را در بایت رمزگذاری می کند، به عنوان(size - 1)، به عنوان مثال،0به این معنی است که مقدار به یک بایت نیاز دارد، و7به این معنی است که به هشت بایت نیاز دارد. با این حال، استثناهایی وجود دارد که در زیر ذکر شده است. | 
| ارزش | یوبایت[] | بایت ها نشان دهنده مقدار، متغیر در طول و تفسیر متفاوت برای بایت های مختلف value_type، هر چند همیشه اندکی اند. برای جزئیات بیشتر به تعاریف مختلف مقادیر زیر مراجعه کنید. | 
| نام را تایپ کنید | value_type | فرمت value_arg | فرمت value | توضیحات | 
|---|---|---|---|---|
| VALUE_BYTE | 0x00 | (هیچ کدام؛ باید 0باشد) | یوبایت[1] | مقدار عدد صحیح یک بایتی امضا شده | 
| VALUE_SHORT | 0x02 | اندازه - 1 (0…1) | یوبایت[اندازه] | مقدار عدد صحیح دو بایتی امضا شده، علامت گسترش یافته | 
| VALUE_CHAR | 0x03 | اندازه - 1 (0…1) | یوبایت[اندازه] | مقدار عدد صحیح دو بایتی بدون علامت، صفر بسط داده شده | 
| VALUE_INT | 0x04 | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار عدد صحیح چهار بایت امضا شده، علامت گسترش یافته | 
| VALUE_LONG | 0x06 | اندازه - 1 (0…7) | یوبایت[اندازه] | مقدار عدد صحیح هشت بایتی امضا شده، علامت گسترش یافته | 
| VALUE_FLOAT | 0x10 | اندازه - 1 (0…3) | یوبایت[اندازه] | الگوی بیت چهار بایتی، به سمت راست با صفر گسترش یافته و به عنوان یک مقدار ممیز شناور 32 بیتی IEEE754 تفسیر می شود. | 
| VALUE_DOUBLE | 0x11 | اندازه - 1 (0…7) | یوبایت[اندازه] | الگوی بیت هشت بایتی، به سمت راست با صفر گسترش یافته و به عنوان یک مقدار ممیز شناور 64 بیتی IEEE754 تفسیر می شود. | 
| VALUE_METHOD_TYPE | 0x15 | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایت بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش proto_idsتفسیر شده و یک مقدار نوع روش را نشان می دهد. | 
| VALUE_METHOD_HANDLE | 0x16 | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایتی بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش method_handlesتفسیر می شود و یک مقدار دسته متد را نشان می دهد | 
| VALUE_STRING | 0x17 | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایت بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش string_idsتفسیر می شود و یک مقدار رشته را نشان می دهد | 
| VALUE_TYPE | 0x18 | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایت بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش type_idsتفسیر می شود و یک مقدار نوع/کلاس بازتابی را نشان می دهد. | 
| VALUE_FIELD | 0x19 | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایت بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش field_idsتفسیر می شود و یک مقدار میدان بازتابی را نشان می دهد | 
| VALUE_METHOD | 0x1a | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایتی بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش method_idsتفسیر می شود و یک مقدار متد بازتابنده را نشان می دهد. | 
| VALUE_ENUM | 0x1b | اندازه - 1 (0…3) | یوبایت[اندازه] | مقدار صحیح چهار بایت بدون علامت (صفر توسعه یافته) که به عنوان یک شاخص در بخش field_idsتفسیر می شود و مقدار یک نوع ثابت برشماری شده را نشان می دهد. | 
| VALUE_ARRAY | 0x1c | (هیچ کدام؛ باید 0باشد) | encoded_array | آرایه ای از مقادیر، در قالب مشخص شده توسط "فرمت encoded_array" در زیر. اندازهvalueدر رمزگذاری ضمنی است. | 
| VALUE_ANNOTATION | 0x1d | (هیچ کدام؛ باید 0باشد) | encoded_annotation | یک حاشیه نویسی فرعی، در قالب مشخص شده توسط "فرمت encoded_annotation" در زیر. اندازهvalueدر رمزگذاری ضمنی است. | 
| VALUE_NULL | 0x1e | (هیچ کدام؛ باید 0باشد) | (هیچ کدام) | مقدار مرجع null | 
| VALUE_BOOLEAN | 0x1f | بولی (0…1) | (هیچ کدام) | مقدار یک بیتی؛ 0برایfalseو1برایtrue. بیت درvalue_argنشان داده می شود. | 
| نام | قالب | توضیحات | 
|---|---|---|
| اندازه | uleb128 | تعداد عناصر در آرایه | 
| ارزش ها | encoded_value[اندازه] | یک سری توالی بایت sizeencoded_valueدر قالب مشخص شده توسط این بخش، به صورت متوالی به هم پیوسته اند. | 
| نام | قالب | توضیحات | 
|---|---|---|
| type_idx | uleb128 | نوع حاشیه نویسی این باید یک نوع کلاس (نه آرایه یا ابتدایی) باشد. | 
| اندازه | uleb128 | تعداد نگاشت نام-مقدار در این حاشیه نویسی | 
| عناصر | annotation_element[اندازه] | عناصر حاشیه نویسی که مستقیماً در خط نشان داده می شوند (نه به صورت افست). عناصر باید به ترتیب افزایش با شاخص string_idمرتب شوند. | 
| نام | قالب | توضیحات | 
|---|---|---|
| name_idx | uleb128 | نام عنصر، به عنوان یک شاخص در بخش string_idsنمایش داده می شود. رشته باید با دستور MemberName که در بالا تعریف شده است مطابقت داشته باشد. | 
| ارزش | encoded_value | مقدار عنصر | 
 انواع مختلفی از آیتم در یک فایل .dex وجود دارد که در نهایت به یک رشته اشاره دارد. تعاریف زیر به سبک BNF بیانگر نحو قابل قبول برای این رشته ها است.
 یک SimpleName مبنایی برای نحو نام چیزهای دیگر است. قالب .dex در اینجا اجازه می دهد تا عرض جغرافیایی مناسبی داشته باشید (بسیار بیشتر از اکثر زبان های مبدأ رایج). به طور خلاصه، یک نام ساده شامل هر کاراکتر یا رقم الفبایی کم ASCII، چند نماد خاص با ASCII پایین، و اکثر نقاط کد غیر ASCII است که کنترل، فاصله یا کاراکترهای خاص نیستند. با شروع از نسخه 040 فرمت علاوه بر این به کاراکترهای فاصله (دسته یونیکد Zs ) اجازه می دهد. توجه داشته باشید که نقاط کد جایگزین (در محدوده U+d800 … U+dfff ) به خودی خود کاراکترهای نام معتبر در نظر گرفته نمیشوند، اما نویسههای تکمیلی یونیکد معتبر هستند (که با جایگزین نهایی قانون برای SimpleNameChar نشان داده میشوند)، و باید در یک فایل بهعنوان جفت نقاط کد جایگزین8 در MUTF- نمایش داده شوند.
| SimpleName → | ||
| SimpleNameChar ( SimpleNameChar )* | ||
| SimpleNameChar → | ||
| 'A'...'Z' | ||
| | | 'a'...'z' | |
| | | '0'…'9' | |
| | | ' ' | از نسخه DEX 040 | 
| | | '$' | |
| | | '-' | |
| | | '_' | |
| | | U+00a0 | از نسخه DEX 040 | 
| | | U+00a1…U+1fff | |
| | | U+2000…U+200a | از نسخه DEX 040 | 
| | | U+2010…U+2027 | |
| | | U+202f | از نسخه DEX 040 | 
| | | U+2030…U+d7ff | |
| | | U+e000…U+ffef | |
| | | U+10000…U+10ffff | |
MemberName نام یکی از اعضای یک کلاس است که اعضای آن فیلدها، متدها و کلاس های داخلی هستند.
| نام عضو → | |
| SimpleName | |
| | | '<'SimpleName'>' | 
FullClassName یک نام کلاس کاملاً واجد شرایط است، شامل یک مشخص کننده بسته اختیاری و به دنبال آن یک نام ضروری است.
| FullClassName → | |
| OptionalPackagePrefix SimpleName | |
| OptionalPackagePrefix → | |
| ( SimpleName '/')* | |
 TypeDescriptor نمایش هر نوع از جمله اولیه، کلاس ها، آرایه ها و void است. برای معنی نسخه های مختلف به زیر مراجعه کنید.
| TypeDescriptor → | |
| 'V' | |
| | | FieldTypeDescriptor | 
| FieldTypeDescriptor → | |
| NonArrayFieldTypeDescriptor | |
| | | ( '['* 1…255) NonArrayFieldTypeDescriptor | 
| NonArrayFieldTypeDescriptor → | |
| 'Z' | |
| | | 'B' | 
| | | 'S' | 
| | | 'C' | 
| | | 'I' | 
| | | 'J' | 
| | | 'F' | 
| | | 'D' | 
| | | 'L'FullClassName';' | 
 ShortyDescriptor نمایش فرم کوتاه نمونه اولیه متد، شامل انواع برگشتی و پارامتر است، با این تفاوت که بین انواع مرجع (کلاس یا آرایه) تفاوتی وجود ندارد. در عوض، همه انواع مرجع با یک کاراکتر 'L' نشان داده می شوند.
| ShortyDescriptor → | |
| ShortyReturnType ( ShortyFieldType )* | |
| ShortyReturnType → | |
| 'V' | |
| | | ShortyFieldType | 
| ShortyFieldType → | |
| 'Z' | |
| | | 'B' | 
| | | 'S' | 
| | | 'C' | 
| | | 'I' | 
| | | 'J' | 
| | | 'F' | 
| | | 'D' | 
| | | 'L' | 
این معنای هر یک از انواع TypeDescriptor است.
| نحو | معنی | 
|---|---|
| V | voidفقط برای انواع بازگشت معتبر است | 
| ز | boolean | 
| ب | byte | 
| اس | short | 
| سی | char | 
| من | int | 
| جی | long | 
| اف | float | 
| D | double | 
| L به طور کامل / واجد شرایط / نام ; | کلاس fully.qualified.Name | 
| [ توصیفگر | آرایه descriptor، قابل استفاده به صورت بازگشتی برای آرایههای آرایهها، اگرچه داشتن بیش از 255 بعد نامعتبر است. | 
 این بخش شامل تعاریفی برای هر یک از موارد سطح بالایی است که ممکن است در یک فایل   اندازه کل فایل (از جمله هدر)، بر حسب بایت (نسخه 40 یا قبل از آن)  فاصله بر حسب بایت از ابتدای این هدر تا هدر بعدی یا تا انتهای کل فایل (کانتینر). (نسخه 41 یا بالاتر)  اندازه هدر (کل این بخش)، بر حسب بایت. این اجازه می دهد تا حداقل مقدار محدودی از سازگاری به عقب و جلو بدون نامعتبر کردن قالب.  باید 0x70 (112) بایت (v40 یا قبل از آن) باشد  باید 0x78 (120) بایت (نسخه 41 یا بالاتر) باشد  اندازه بخش   استفاده نشده (نسخه 41 یا جدیدتر)  افست از ابتدای فایل تا شروع بخش   استفاده نشده (نسخه 41 یا جدیدتر)  این زمینه وجود ندارد می توان آن را برابر با   اندازه کل فایل (شامل سرصفحه های دیگر dex و داده های آنها). (نسخه 41 یا بالاتر)  این زمینه وجود ندارد می توان آن را برابر با   از ابتدای فایل تا ابتدای این هدر افست شود. (نسخه 41 یا بالاتر)  این لیستی از کل محتویات یک فایل به ترتیب است. این شامل مقداری افزونگی با توجه به   توجه: وجود رشته ای که شامل (شکل رمزگذاری شده) واحدهای کد جایگزین UTF-16 (یعنی   call_site_item یک encoded_array_item است که عناصر آن با آرگومان های ارائه شده به یک روش پیوند دهنده بوت استرپ مطابقت دارد. سه استدلال اول عبارتند از:  هرگونه آرگومان اضافی مقادیر ثابت است که به روش پیوند Bootstrap منتقل می شوند. این استدلال ها به ترتیب و بدون هیچ نوع تبدیل منتقل می شوند.  دسته روش که نشان دهنده روش اتصال دهنده bootstrap است باید دارای نوع برگشتی   انواع پارامتر هر آرگومان اضافی از مقادیر ثابت آنها تعیین می شود.  توجه: همه موارد   هر   دستگاه دولتی از پنج ثبت نام تشکیل شده است. ثبت   هدر به شرح زیر است:  مقادیر کد بایت به شرح زیر است:  توجه: بحث در زیر "   Opcodes با مقادیر بین   توجه: همه موارد   این گزینه ها برای قسمت .dex ظاهر شوند. نام  قالب  توضیحات  سحر و جادو  ubyte[8] = DEX_FILE_MAGIC  ارزش جادویی برای جزئیات بیشتر به بحث بالا در "  DEX_FILE_MAGIC " مراجعه کنید. چک جمع  unint  adler32 checksum بقیه فایل (همه چیز به جز  magic و این فیلد)؛ برای تشخیص خرابی فایل استفاده می شود امضا  یوبایت[20]  امضای SHA-1 (هش) بقیه فایل (همه چیز به جز  magic ، checksum و این فیلد). برای شناسایی منحصر به فرد فایل ها استفاده می شود فایل_اندازه  unint  سربرگ_اندازه  unint  endian_tag  واحد = ENDIAN_CONSTANT  برچسب endianness برای جزئیات بیشتر به بحث بالا در زیر "  ENDIAN_CONSTANT و REVERSE_ENDIAN_CONSTANT " مراجعه کنید. پیوند_اندازه  unint  اندازه بخش پیوند یا  0 اگر این فایل به صورت ایستا پیوند داده نشده باشد link_off  unint  از ابتدای فایل به قسمت پیوند یا  0 اگر link_size == 0 . افست، اگر غیر صفر باشد، باید به یک افست در بخش link_data باشد. قالب داده های اشاره شده توسط این سند مشخص نشده است. این فیلد هدر (و قسمت قبلی) به عنوان قلاب برای استفاده توسط پیادهسازی زمان اجرا باقی میماند. map_off  unint  از ابتدای فایل تا آیتم نقشه افست شود. آفست، که باید غیر صفر باشد، باید به یک افست در بخش  data باشد، و داده ها باید در قالب مشخص شده توسط " map_list " در زیر باشد. string_ids_size  unint  تعداد رشته ها در لیست شناسه رشته ها  string_ids_off  unint  از ابتدای فایل به لیست شناسههای رشته یا  0 اگر string_ids_size == 0 (البته یک مورد لبه عجیب است). افست، اگر غیر صفر باشد، باید در ابتدای بخش string_ids باشد. type_ids_size  unint  تعداد عناصر موجود در لیست شناسه نوع، حداکثر 65535  type_ids_off  unint  از ابتدای فایل به لیست شناسههای نوع یا  0 اگر type_ids_size == 0 (البته یک مورد لبه عجیب است). افست، اگر غیر صفر باشد، باید در ابتدای بخش type_ids باشد. proto_ids_size  unint  تعداد عناصر موجود در لیست شناسه های نمونه اولیه، حداکثر 65535  proto_ids_off  unint  از ابتدای فایل به لیست شناسههای نمونه اولیه یا  0 اگر proto_ids_size == 0 (البته یک مورد لبه عجیب است). افست، اگر غیر صفر باشد، باید در ابتدای بخش proto_ids باشد. field_ids_size  unint  تعداد عناصر در لیست شناسه های فیلد  field_ids_off  unint  از ابتدای فایل به لیست شناسههای فیلد یا  0 اگر field_ids_size == 0 . افست، اگر غیر صفر باشد، باید به ابتدای بخش field_ids باشد. method_ids_size  unint  تعداد عناصر در لیست شناسه های متد  method_ids_off  unint  از ابتدای فایل به لیست شناسه های متد یا  0 اگر method_ids_size == 0 تغییر می کند. افست، اگر غیر صفر باشد، باید در ابتدای بخش method_ids باشد. class_defs_size  unint  تعداد عناصر در لیست تعاریف کلاس  class_defs_off  unint  از ابتدای فایل به لیست تعاریف کلاس، یا  0 اگر class_defs_size == 0 (البته یک مورد لبه عجیب است). افست، اگر غیر صفر باشد، باید در ابتدای بخش class_defs باشد. داده_اندازه  unint data بر حسب بایت باید مضربی زوج از sizeof(uint) باشد. (نسخه 40 یا قبل از آن) داده_خاموش  unint data (نسخه 40 یا قبل از آن) ظرف_اندازه  unint file_size فرض کرد. (نسخه 40 یا قبل از آن) header_offset  unint 0 فرض کرد. (نسخه 40 یا قبل از آن)header_item است، اما در نظر گرفته شده است که فرمی آسان برای استفاده برای تکرار در کل فایل باشد. یک نوع معین باید حداکثر یک بار در نقشه ظاهر شود، اما هیچ محدودیتی برای اینکه انواع ترتیب ممکن است در آن ظاهر شوند وجود ندارد، به غیر از محدودیتهایی که در بقیه قالبها وجود دارد (مثلاً یک بخش header باید ابتدا ظاهر شود، سپس یک بخش string_ids و غیره). علاوه بر این، ورودی های نقشه باید بر اساس افست اولیه مرتب شوند و نباید با هم تداخل داشته باشند. نام  قالب  توضیحات  اندازه  unint  اندازه لیست، در ورودی ها  فهرست  نقشه_آیتم[اندازه]  عناصر لیست  نام  قالب  توضیحات  نوع  کوتاه  نوع اقلام؛ جدول زیر را ببینید  استفاده نشده  کوتاه  (استفاده نشده)  اندازه  unint  شمارش تعداد آیتم هایی که در افست مشخص شده یافت می شوند  جبران  unint  از ابتدای فایل تا موارد مورد نظر جبران شود  نوع مورد  ثابت  ارزش  اندازه مورد بر حسب بایت  header_item  TYPE_HEADER_ITEM  0x0000  0x70  string_id_item  TYPE_STRING_ID_ITEM  0x0001  0x04  type_id_item  TYPE_TYPE_ID_ITEM  0x0002  0x04  proto_id_item  TYPE_PROTO_ID_ITEM  0x0003  0x0c  field_id_item  TYPE_FIELD_ID_ITEM  0x0004  0x08  method_id_item  TYPE_METHOD_ID_ITEM  0x0005  0x08  class_def_item  TYPE_CLASS_DEF_ITEM  0x0006  0x20  call_site_id_item  TYPE_CALL_SITE_ID_ITEM  0x0007  0x04  method_handle_item  TYPE_METHOD_HANDLE_ITEM  0x0008  0x08  map_list  TYPE_MAP_LIST  0x1000  4 + (اندازه مورد * 12)  type_list  TYPE_TYPE_LIST  0x1001  4 + (اندازه مورد * 2)  annotation_set_ref_list  TYPE_ANNOTATION_SET_REF_LIST  0x1002  4 + (اندازه مورد * 4)  annotation_set_item  TYPE_ANNOTATION_SET_ITEM  0x1003  4 + (اندازه مورد * 4)  class_data_item  TYPE_CLASS_DATA_ITEM  0x2000  ضمنی باید تجزیه شود  code_item  TYPE_CODE_ITEM  0x2001  ضمنی باید تجزیه شود  string_data_item  TYPE_STRING_DATA_ITEM  0x2002  ضمنی باید تجزیه شود  debug_info_item  TYPE_DEBUG_INFO_ITEM  0x2003  ضمنی باید تجزیه شود  annotation_item  TYPE_ANNOTATION_ITEM  0x2004  ضمنی باید تجزیه شود  encoded_array_item  TYPE_ENCODED_ARRAY_ITEM  0x2005  ضمنی باید تجزیه شود  annotations_directory_item  TYPE_ANNOTATIONS_DIRECTORY_ITEM  0x2006  ضمنی باید تجزیه شود  hiddenapi_class_data_item  TYPE_HIDDENAPI_CLASS_DATA_ITEM  0xF000  ضمنی باید تجزیه شود  نام  قالب  توضیحات  string_data_off  unint  از ابتدای فایل به داده های رشته ای برای این آیتم افست شود. افست باید در مکانی در بخش  data باشد و داده ها باید در قالب مشخص شده توسط " string_data_item " در زیر باشد. هیچ نیازی به تراز برای افست وجود ندارد. نام  قالب  توضیحات  utf16_size  uleb128  اندازه این رشته، در واحدهای کد UTF-16 (که در بسیاری از سیستم ها "طول رشته" است). یعنی این طول رمزگشایی شده رشته است. (طول رمزگذاری شده با موقعیت  0 بایت مشخص می شود.) داده ها  یوبایت[]  یک سری از واحدهای کد MUTF-8 (با نام مستعار octets، aka bytes) به دنبال آن یک بایت با مقدار  0 . برای جزئیات و بحث در مورد قالب داده، به "رمزگذاری MUTF-8 (تغییر یافته UTF-8)" در بالا مراجعه کنید.U+d800 … U+dfff ) باشد، به صورت مجزا یا خارج از نظم با توجه به رمزگذاری معمول یونیکد در UTF-16 قابل قبول است. رد کردن چنین رمزگذاریهای نامعتبر، در صورت لزوم، بستگی به استفادههای سطح بالاتر از رشتهها دارد. نام  قالب  توضیحات  descriptor_idx  unint  در لیست  string_ids برای رشته توصیفگر از این نوع فهرست کنید. رشته باید با نحو برای TypeDescriptor که در بالا تعریف شده است مطابقت داشته باشد. نام  قالب  توضیحات  shorty_idx  unint  در لیست  string_ids برای رشته توصیفگر فرم کوتاه این نمونه اولیه فهرست کنید. رشته باید با نحو برای ShortyDescriptor که در بالا تعریف شده است مطابقت داشته باشد و باید با نوع بازگشتی و پارامترهای این مورد مطابقت داشته باشد. return_type_idx  unint  در لیست  type_ids برای نوع برگشتی این نمونه اولیه فهرست کنید parameters_off  unint  از ابتدای فایل به لیست انواع پارامترهای این نمونه اولیه یا  0 در صورتی که این نمونه اولیه هیچ پارامتری نداشته باشد، افست شود. این افست، اگر غیر صفر باشد، باید در بخش data باشد، و دادهها باید در قالبی باشند که توسط "type_list" در زیر مشخص شده است. علاوه بر این، نباید هیچ اشاره ای به نوع void در لیست وجود داشته باشد. نام  قالب  توضیحات  class_idx  کوتاه  در لیست  type_ids برای تعریف کننده این فیلد فهرست کنید. این باید یک نوع کلاس باشد و نه یک آرایه یا نوع اولیه. type_idx  کوتاه  در لیست  type_ids برای نوع این فیلد فهرست کنید name_idx  unint  در لیست  string_ids برای نام این فیلد فهرست کنید. رشته باید با دستور MemberName که در بالا تعریف شده است مطابقت داشته باشد. نام  قالب  توضیحات  class_idx  کوتاه  در لیست  type_ids برای تعریف کننده این روش فهرست کنید. این باید یک نوع کلاس یا آرایه باشد و نه یک نوع اولیه. proto_idx  کوتاه  برای نمونه اولیه این روش در لیست  proto_ids فهرست کنید name_idx  unint  نام این روش را در لیست  string_ids قرار دهید. رشته باید با دستور MemberName که در بالا تعریف شده است مطابقت داشته باشد. نام  قالب  توضیحات  class_idx  unint  در لیست  type_ids برای این کلاس فهرست کنید. این باید یک نوع کلاس باشد و نه یک آرایه یا نوع اولیه. access_flags  unint  پرچم های دسترسی برای کلاس (  public ، final ، و غیره). برای جزئیات بیشتر به "تعاریف access_flags " مراجعه کنید. superclass_idx  unint  در لیست  type_ids برای سوپرکلاس، یا مقدار ثابت NO_INDEX اگر این کلاس فاقد سوپرکلاس باشد (یعنی یک کلاس ریشه مانند Object باشد) فهرست کنید. در صورت وجود، این باید یک نوع کلاس باشد، نه یک آرایه یا نوع اولیه. interfaces_off  unint  از ابتدای فایل به لیست اینترفیس ها یا  0 در صورتی که هیچ کدام وجود ندارد، افست شود. این افست باید در بخش data باشد، و دادههای موجود در آن باید در قالبی باشد که توسط " type_list " در زیر مشخص شده است. هر یک از عناصر لیست باید یک نوع کلاس باشد (نه یک آرایه یا نوع اولیه)، و نباید هیچ تکراری وجود داشته باشد. source_file_idx  unint  در لیست  string_ids برای نام فایل حاوی منبع اصلی (حداقل اکثر) این کلاس، یا مقدار ویژه NO_INDEX برای نشان دادن کمبود این اطلاعات، فهرست کنید. debug_info_item هر روشی ممکن است این فایل منبع را لغو کند، اما انتظار این است که بیشتر کلاسها فقط از یک فایل منبع آمده باشند. annotations_off  unint  از ابتدای فایل به ساختار حاشیه نویسی برای این کلاس، یا  0 در صورتی که حاشیه نویسی در این کلاس وجود نداشته باشد، جبران شود. این افست، اگر غیر صفر باشد، باید در بخش data باشد، و دادهها باید در قالبی باشد که توسط " annotations_directory_item " در زیر مشخص شده است و همه موارد به این کلاس به عنوان تعریف کننده اشاره میکنند. class_data_off  unint  از ابتدای فایل به داده های کلاس مرتبط برای این آیتم یا  0 در صورتی که داده کلاسی برای این کلاس وجود نداشته باشد، جبران شود. (ممکن است به عنوان مثال، اگر این کلاس یک رابط نشانگر باشد.) افست، اگر غیر صفر باشد، باید در بخش data باشد، و داده های موجود باید در قالب مشخص شده توسط " class_data_item " در زیر باشد، و همه موارد به این کلاس به عنوان تعریف کننده اشاره می کنند. static_values_off  unint  از ابتدای فایل به لیست مقادیر اولیه برای فیلدهای  static ، یا 0 در صورت وجود هیچ (و همه فیلدهای static باید با 0 یا null مقداردهی اولیه شوند). این افست باید در بخش data باشد و داده ها باید در قالب مشخص شده توسط " encoded_array_item " در زیر باشد. اندازه آرایه نباید بزرگتر از تعداد زمینه های static اعلام شده توسط این کلاس باشد و عناصر با همان ترتیب مطابق با field_list static مطابقت دارند. نوع هر عنصر آرایه باید با نوع اعلام شده از قسمت مربوطه آن مطابقت داشته باشد. اگر عناصر کمتری در آرایه وجود داشته باشد تا زمینه های static وجود داشته باشد ، قسمت های باقیمانده با یک نوع مناسب 0 یا null تنظیم می شوند. نام  قالب  توضیحات  call_site_off  unint  از شروع پرونده برای تماس با سایت تماس بگیرید. افست باید در بخش داده باشد و داده های موجود در قالب مشخص شده توسط "call_site_item" در زیر وجود دارد. java.lang.invoke.CallSite باشد. سه نوع پارامتر اول عبارتند از:java.lang.invoke.Lookupjava.lang.Stringjava.lang.invoke.MethodType نام  قالب  توضیحات  method_handle_type  اوشورت  نوع دسته روش ؛ جدول زیر را ببینید  استفاده نشده  اوشورت  (استفاده نشده)  field_or_method_id  اوشورت  شناسه فیلد یا روش بسته به اینکه آیا نوع دسته روش یک دسترسی یا یک روش فراخوانی است  استفاده نشده  اوشورت  (استفاده نشده)   ثابت  ارزش  توضیحات  method_handle_type_static_put  0x00  Method Hode یک تنظیم کننده فیلد استاتیک (Accessor) است  method_handle_type_static_get  0x01  Method Handle یک Field Static (Accessor) است  method_handle_type_instance_put  0x02  Method Handle یک قسمت نمونه (Accessor) است  method_handle_type_instance_get  0x03  Method Handle یک Field Field (Accessor) است  method_handle_type_invoke_static  0x04  Method Handle یک روش استاتیک است  method_handle_type_invoke_instance  0x05  Method Handle یک روش نمونه است  method_handle_type_invoke_constructor  0x06  Method Handle یک روش سازنده است  method_handle_type_invoke_direct  0x07  Method Handle یک روش مستقیم است  method_handle_type_invoke_interface  0x08  Method Handle یک روش رابط است  نام  قالب  توضیحات  static_fields_size  uleb128  تعداد زمینه های استاتیک تعریف شده در این مورد  sustance_fields_size  uleb128  تعداد قسمتهای نمونه تعریف شده در این مورد  direct_methods_size  uleb128  تعداد روشهای مستقیم تعریف شده در این مورد  virtual_methods_size  uleb128  تعداد روشهای مجازی تعریف شده در این مورد  static_fields  ended_field [static_fields_size]  زمینه های استاتیک تعریف شده ، به عنوان دنباله ای از عناصر رمزگذاری شده نشان داده شده است. زمینه ها باید توسط  field_idx به منظور افزایش نظم طبقه بندی شوند. fields_fields  ended_field [sustance_fields_size]  زمینه های نمونه تعریف شده ، به عنوان دنباله ای از عناصر رمزگذاری شده نشان داده شده است. زمینه ها باید توسط  field_idx به منظور افزایش نظم طبقه بندی شوند. Direct_Methods  ended_method [Direct_Methods_Size]  تعریف مستقیم (هر یک از روشهای  static ، private یا سازنده) ، به عنوان دنباله ای از عناصر رمزگذاری شده نشان داده شده است. روشها باید با افزایش نظم توسط method_idx طبقه بندی شوند. virtual_methods  ended_method [virtual_methods_size]  روشهای مجازی تعریف شده (هیچ یک از  static ، private یا سازنده) ، به عنوان دنباله ای از عناصر رمزگذاری شده نشان داده شده است. این لیست نباید شامل روشهای ارثی باشد ، مگر اینکه توسط کلاس که این مورد نشان می دهد ، نادیده گرفته شود. روشها باید با افزایش نظم توسط method_idx طبقه بندی شوند. method_idx یک روش مجازی نباید مانند هر روش مستقیم باشد.field_id و method_id همه عناصر باید به همان کلاس تعریف کننده مراجعه کنند. نام  قالب  توضیحات  field_idx_diff  uleb128  برای شناسایی هویت این قسمت (شامل نام و توصیف کننده) به لیست  field_ids (شامل نام و توصیف کننده) است که به عنوان تفاوت از شاخص عنصر قبلی در لیست نشان داده شده است. شاخص عنصر اول در یک لیست به طور مستقیم نشان داده شده است. دسترسی به_فرها  uleb128  دسترسی به پرچم ها برای این زمینه (  public ، final و غیره). برای جزئیات بیشتر به "تعاریف access_flags " مراجعه کنید. نام  قالب  توضیحات  method_idx_diff  uleb128  برای هویت این روش به لیست  method_ids فهرست کنید (شامل نام و توصیف کننده) است که به عنوان تفاوت از شاخص عنصر قبلی در لیست نشان داده شده است. شاخص عنصر اول در یک لیست به طور مستقیم نشان داده شده است. دسترسی به_فرها  uleb128  برای روش (  public ، final و غیره) به پرچم ها دسترسی پیدا کنید. برای جزئیات بیشتر به "تعاریف access_flags " مراجعه کنید. code_off  uleb128  از شروع پرونده به ساختار کد برای این روش جبران کنید ،  0 اگر این روش abstract یا native باشد. افست باید به مکانی در بخش data باشد. قالب داده ها توسط " code_item " در زیر مشخص شده است. نام  قالب  توضیحات  اندازه  unint  اندازه لیست ، در ورودی ها  فهرست  Type_item [اندازه]  عناصر لیست  نام  قالب  توضیحات  type_idx  اوشورت  فهرست در لیست  type_ids نام  قالب  توضیحات  Registrs_Size  اوشورت  تعداد ثبت های مورد استفاده در این کد  ins_size  اوشورت  تعداد کلمات آرگومان های دریافتی به روشی که این کد برای آن وجود دارد  outs_size  اوشورت  تعداد کلمات فضای آرگومان خروجی مورد نیاز این کد برای دعوت روش  سعی کنید_  اوشورت  تعداد  try_item S برای این مثال. اگر غیر صفر باشد ، پس از آن به عنوان آرایه tries درست بعد از این insns ظاهر می شوند. debug_info_off  unint  دنباله از شروع پرونده به اطلاعات اشکال زدایی (شماره خط + اطلاعات متغیر محلی) برای این کد ، یا  0 اگر اطلاعاتی وجود ندارد. در صورت غیر صفر ، افست باید به مکانی در بخش data باشد. قالب داده ها توسط " debug_info_item " در زیر مشخص شده است. insns_size  unint  اندازه لیست دستورالعمل ها ، در واحدهای کد 16 بیتی  بدنام  ushort [insns_size]  آرایه واقعی بایت کد. قالب کد در یک آرایه  insns توسط سند همراه Dalvik Bytecode مشخص شده است. توجه داشته باشید که اگرچه این به عنوان مجموعه ای از ushort تعریف شده است ، اما برخی از ساختارهای داخلی وجود دارند که تراز چهار بایت را ترجیح می دهند. همچنین ، اگر این اتفاق در یک فایل تغییر یافته Endian باشد ، مبادله فقط در نمونه های ushort فردی انجام می شود و نه در ساختارهای داخلی بزرگتر. بالشتک  ushort (اختیاری) = 0  دو بایت بالشتک برای  tries چهار بایت هم تراز شده است. این عنصر فقط در صورتی وجود دارد که tries_size غیر صفر باشد و insns_size عجیب است. تلاش می کند  try_item [tries_size] (اختیاری)  آرایه ای که نشان می دهد استثنائات کد در کجا گرفتار شده و نحوه رسیدگی به آنها را نشان می دهد. عناصر آرایه باید در محدوده و به ترتیب از آدرس کم به بالا ، غیر همپوشانی باشند. این عنصر فقط در صورتی وجود دارد که  tries_size غیر صفر باشد. کنترل کننده ها  ended_catch_handler_list (اختیاری)  بایت هایی که لیستی از لیست های انواع صید و آدرس های کنترل کننده مرتبط را نشان می دهد. هر  try_item یک جبران بایت در این ساختار دارد. این عنصر فقط در صورتی وجود دارد که tries_size غیر صفر باشد. نام  قالب  توضیحات  start_addr  unint  آدرس بلوک کد تحت پوشش این ورودی را شروع کنید. آدرس تعداد واحدهای کد 16 بیتی برای شروع اولین دستورالعمل تحت پوشش است.  insn_count  اوشورت  تعداد واحدهای کد 16 بیتی تحت پوشش این ورودی. آخرین واحد کد تحت پوشش (شامل)  start_addr + insn_count - 1 است. handler_off  اوشورت  از ابتدای برنامه  encoded_catch_hander_list به encoded_catch_handler برای این ورودی ، بایت را جبران کنید. این باید یک جبران برای شروع یک encoded_catch_handler باشد.  نام  قالب  توضیحات  اندازه  uleb128  اندازه این لیست ، در ورودی ها  فهرست  ended_catch_handler [handlers_size]  لیست واقعی لیست های کنترل کننده ، که مستقیماً (نه به عنوان جبران) ارائه می شود ، و به صورت متوالی هماهنگ می شوند   نام  قالب  توضیحات  اندازه  Sleb128  تعداد انواع صید در این لیست. اگر غیر مثبت باشد ، این منفی از تعداد انواع صید است و صید ها توسط یک کنترل کننده همه گیر دنبال می شوند. به عنوان مثال:  size 0 به این معنی است که همه چیز صید وجود دارد اما صید صریح تایپ شده وجود ندارد. size 2 به این معنی است که دو صید صریح تایپ شده و بدون همه وجود دارد. و size -1 به این معنی است که یک گرفتن تایپ شده به همراه همه چیز وجود دارد. کنترل کننده ها  ended_type_addr_pair [abs (اندازه)]  جریان  abs(size) موارد رمزگذاری شده ، یکی برای هر نوع گرفتار ، به این ترتیب که انواع باید آزمایش شوند. CATCH_ALL_ADDR  uleb128 (اختیاری)  آدرس bytecode از کنترل کننده همه گیر. این عنصر فقط در صورتی وجود دارد که  size مثبت باشد.  نام  قالب  توضیحات  type_idx  uleb128  برای نوع استثناء در لیست  type_ids فهرست کنید آدرس  uleb128  آدرس bytecode از کنترل کننده استثنا مرتبط debug_info_item یک دستگاه حالت کدگذاری شده با کادوی با الهام از DWARF3 را تعریف می کند که در صورت تفسیر ، جدول موقعیت ها و (به طور بالقوه) اطلاعات متغیر محلی را برای یک code_item منتشر می کند. دنباله با یک هدر با طول متغیر شروع می شود (طول آن به تعداد پارامترهای روش بستگی دارد) ، توسط دستگاه های دستگاه BYTECODES دنبال می شود و با یک بایت DBG_END_SEQUENCE به پایان می رسد.address نشان دهنده جبران دستورالعمل در insns_item مرتبط در واحدهای کد 16 بیتی است. ثبت address در ابتدای هر دنباله debug_info از 0 شروع می شود و فقط باید یکنواخت افزایش یابد. ثبت line نشان دهنده آنچه شماره خط منبع باید با ورودی جدول موقعیت های بعدی ساطع شده توسط دستگاه دولتی همراه باشد. این در هدر دنباله آغاز می شود و ممکن است در جهت های مثبت یا منفی تغییر کند اما هرگز نباید کمتر از 1 باشد. رجیستری source_file فایل منبع را نشان می دهد که ورودی های شماره خط به آن مراجعه می کنند. این به مقدار source_file_idx در class_def_item اولیه می شود. دو متغیر دیگر ، prologue_end و epilogue_begin ، پرچم های بولی هستند (به صورت false ) که نشان می دهد موقعیت بعدی ساطع شده باید یک روش پیشرو یا اپیولوژ در نظر گرفته شود. دستگاه دولتی همچنین باید نام و نوع آخرین متغیر محلی را در هر ثبت برای کد DBG_RESTART_LOCAL ردیابی کند. نام  قالب  توضیحات  خط_  uleb128  مقدار اولیه برای ثبت  line دستگاه حالت. ورود به موقعیت های واقعی را نشان نمی دهد. parameters_size  uleb128  تعداد نام پارامترهای رمزگذاری شده. در صورت  this ، باید یک پارامتر در هر روش وجود داشته باشد. parameter_names  ULEB128P1 [PARATERS_SIZE]  شاخص رشته نام پارامتر روش. مقدار رمزگذاری شده  NO_INDEX نشان می دهد که هیچ نامی برای پارامتر مرتبط در دسترس نیست. توصیف کننده و امضای نوع از توصیف کننده روش و امضای آن دلالت دارد. نام  ارزش  قالب  استدلال ها  توضیحات  DBG_END_SEQUENCE  0x00  (هیچ کدام)  یک دنباله اطلاعات اشکال زدایی را برای یک  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  0x04  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 باشد ، هرچند ، داده های مشابه می توانند با استفاده از Opcode DBG_START_LOCAL با کارآمدتر نشان داده شوند.)dalvik.annotation.Signature " را در زیر برای احتیاط در مورد رسیدگی به امضاها مشاهده کنید. dbg_end_local  0x05  ULEB128 Register_num   register_num : ثبت نام کنید محلی یک متغیر محلی در حال حاضر زندگی را به عنوان خارج از محدوده در آدرس فعلی نشان می دهد  dbg_restart_local  0x06  ULEB128 Register_num   register_num : برای راه اندازی مجدد ثبت نام کنید دوباره یک متغیر محلی را در آدرس فعلی معرفی می کند. نام و نوع همان آخرین محلی است که در ثبت نام مشخص شده است.  dbg_set_prologue_end  0x07  (هیچ کدام)  ثبت دستگاه  prologue_end حالت را تنظیم می کند ، نشان می دهد که ورودی موقعیت بعدی که اضافه می شود باید پایان یک روش پیش نویس در نظر گرفته شود (یک مکان مناسب برای یک نقطه شکست روش). ثبت نام prologue_end توسط هر opcode خاص ( >= 0x0a ) پاک می شود. dbg_set_epilogue_begin  0x08  (هیچ کدام)  ثبت دستگاه حالت  epilogue_begin را تنظیم می کند ، نشان می دهد که ورود موقعیت بعدی که اضافه می شود باید آغاز یک روش Epilogue (مکانی مناسب برای تعلیق اجرای قبل از خروج روش) در نظر گرفته شود. رجیستری epilogue_begin توسط هر opcode خاص ( >= 0x0a ) پاک می شود. dbg_set_file  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_annotations_off  unint  از ابتدای پرونده به حاشیه نویسی های ساخته شده به طور مستقیم در کلاس ، یا  0 اگر کلاس حاشیه ای مستقیم نداشته باشد ، جبران کنید. در صورت غیر صفر ، افست باید به مکانی در بخش data باشد. قالب داده ها توسط " annotation_set_item " در زیر مشخص شده است. fields_size  unint  تعداد زمینه های حاشیه نویسی شده توسط این مورد  Annotated_Methods_Size  unint  تعداد روشهای حاشیه نویسی شده توسط این مورد  Annotated_Parameters_Size  unint  تعداد پارامتر متد لیستی که توسط این مورد حاشیه نویسی شده است  Annotations Field_annotations  field_annotation [fields_size] (اختیاری)  لیست حاشیه نویسی های میدانی مرتبط. عناصر لیست باید توسط  field_idx به ترتیب در حال افزایش مرتب شوند. method_annotations  method_annotation [methods_size] (اختیاری)  لیست حاشیه نویسی روش مرتبط. عناصر لیست باید به ترتیب توسط  method_idx مرتب شوند. parameter_annotations  parameter_annotation [parameters_size] (اختیاری)  لیست حاشیه نویسی پارامتر روش مرتبط. عناصر لیست باید به ترتیب توسط  method_idx مرتب شوند.field_id و method_id همه عناصر باید به همان کلاس تعریف کننده مراجعه کنند. نام  قالب  توضیحات  field_idx  unint  برای شناسایی هویت این قسمت که در آن حاشیه نویسی می شود ، به لیست  field_ids فهرست شوید Annotations_Off  unint  از ابتدای پرونده به لیست حاشیه نویسی های این قسمت جبران کنید. افست باید به مکانی در بخش  data باشد. قالب داده ها توسط " annotation_set_item " در زیر مشخص شده است. نام  قالب  توضیحات  method_idx  unint  برای هویت روش حاشیه نویسی به لیست  method_ids فهرست شوید Annotations_Off  unint  از شروع پرونده به لیست حاشیه نویسی برای روش جبران کنید. افست باید به مکانی در بخش  data باشد. قالب داده ها توسط " annotation_set_item " در زیر مشخص شده است.  نام  قالب  توضیحات  method_idx  unint  برای هویت روشی که پارامترهای آن در حال حاشیه نویسی هستند ، به لیست  method_ids فهرست شوید Annotations_Off  unint  از شروع پرونده به لیست حاشیه نویسی برای پارامترهای روش جبران کنید. افست باید به مکانی در بخش  data باشد. قالب داده ها توسط " annotation_set_ref_list " در زیر مشخص شده است. نام  قالب  توضیحات  اندازه  unint  اندازه لیست ، در ورودی ها  فهرست  Annotation_set_ref_item [اندازه]  عناصر لیست  نام  قالب  توضیحات  Annotations_Off  unint  در صورت عدم حاشیه نویسی برای این عنصر ، از شروع پرونده به مجموعه حاشیه نویسی ارجاع شده یا  0 جبران کنید. در صورت غیر صفر ، افست باید به مکانی در بخش data باشد. قالب داده ها توسط " annotation_set_item " در زیر مشخص شده است.  نام  قالب  توضیحات  اندازه  unint  اندازه مجموعه ، در ورودی ها  ورودی ها  حاشیه نویسی_OFF_ITEM [اندازه]  عناصر مجموعه. عناصر باید به ترتیب در حال افزایش  type_idx شوند. نام  قالب  توضیحات  حاشیه نویسی_ف  unint  از ابتدای پرونده به حاشیه نویسی جبران کنید. افست باید به مکانی در بخش  data باشد و قالب داده ها در آن مکان توسط " annotation_item " در زیر مشخص شده است. نام  قالب  توضیحات  دید  یوبایت  دید در نظر گرفته شده از این حاشیه نویسی (به تصویر زیر مراجعه کنید)  حاشیه نویسی  رمزگذاری شده_نوتیک  محتوای حاشیه نویسی رمزگذاری شده ، در قالب شرح داده شده توسط "قالب  encoded_annotation " در زیر "رمزگذاری encoded_value " در بالا.visibility در annotation_item است: نام  ارزش  توضیحات  Visibility_Build  0x00  در نظر گرفته شده فقط در زمان ساخت قابل مشاهده است (به عنوان مثال ، در هنگام تدوین کد دیگر)  دیدنی_  0x01  در زمان اجرا قابل مشاهده است  Visibility_System  0x02  در نظر گرفته شده در زمان اجرا قابل مشاهده است ، اما فقط به سیستم زیرین (و نه کد کاربر منظم)  نام  قالب  توضیحات  ارزش  رمزگذاری شده_آرایه  بایت های نمایانگر مقدار آرایه رمزگذاری شده ، در قالب مشخص شده توسط "فرمت  encoded_array " در زیر "رمزگذاری encoded_value " در بالا.