یک فایل .dex فرمت انتقال بایت کد Dalvik است. برای اینکه یک فایل یک فایل .dex معتبر باشد، محدودیتهای نحوی و معنایی خاصی وجود دارد و برای پشتیبانی از فایلهای .dex معتبر، زمان اجرا لازم است.
محدودیت های یکپارچگی عمومی .dex
 محدودیتهای یکپارچگی کلی مربوط به ساختار بزرگتر یک فایل .dex است، همانطور که در قالب .dex به تفصیل توضیح داده شده است.
| شناسه | توضیحات | 
|---|---|
| G1 | شماره magicفایل.dexباید برای نسخه 35dex\n035\0یا برای نسخههای بعدی مشابه باشد. | 
| G2 | چکسوم باید یک جمعسنجی Adler-32 از کل محتویات فایل به جز magicو فیلدchecksumباشد. | 
| G3 | امضا باید یک هش SHA-1 از کل محتویات فایل به جز magic،checksumوsignatureباشد. | 
| G4 |     | 
| G5 |     | 
| G6 | endian_tagباید دارای یک مقدار باشد:ENDIAN_CONSTANTیاREVERSE_ENDIAN_CONSTANT | 
| G7 |  برای هر یک از   فیلدهای  | 
| G8 | تمام فیلدهای offset در هدر به جز map_offباید چهار بایت تراز شوند. | 
| G9 | فیلد map_offباید یا صفر باشد یا به بخش داده اشاره کند. در مورد دوم، بخشdataباید وجود داشته باشد. | 
| G10 | هیچ یک از link،string_ids،type_ids،proto_ids،field_ids،method_ids،class_defsو بخشهایdataنباید با یکدیگر یا سربرگ همپوشانی داشته باشند. | 
| G11 | اگر نقشه وجود داشته باشد، هر ورودی نقشه باید یک نوع معتبر داشته باشد. هر نوع ممکن است حداکثر یک بار ظاهر شود. | 
| G12 | اگر نقشه ای وجود داشته باشد، هر ورودی نقشه باید یک افست و اندازه غیر صفر داشته باشد. افست باید به بخش مربوط به فایل اشاره کند (یعنی یک string_id_itemباید به بخشstring_idsاشاره کند) و اندازه صریح یا ضمنی آیتم باید با محتویات و اندازه واقعی بخش مطابقت داشته باشد. | 
| G13 | اگر نقشه ای وجود داشته باشد، آنگاه افست ورودی نقشه n+1باید بزرگتر یا مساوی با افست ورودی نقشهn plus than size of map entry nباشد. این به معنای ورودی های غیر همپوشانی و سفارش کم به بالا است. | 
| G14 | انواع ورودیهای زیر باید دارای یک افست چهار بایتی باشند: string_id_item،type_id_item،proto_id_item،field_id_item،method_id_item،class_def_item،type_list،code_item،annotations_directory_item. | 
| G15 |  برای هر   برای هر   برای  | 
| G16 | برای هر type_id_item، فیلدdescriptor_idxباید حاوی یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیفگر نوع معتبر باشد. | 
| G17 | برای هر proto_id_item، فیلدshorty_idxباید حاوی یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیف کننده کوتاه معتبر باشد. همچنین، فیلدreturn_type_idxباید یک شاخص معتبر در بخشtype_idsباشد و فیلدparameters_offباید صفر باشد یا یک افست معتبر که به بخشdataاشاره میکند. اگر غیر صفر باشد، لیست پارامترها نباید حاوی هیچ ورودی خالی باشد. | 
| G18 | برای هر field_id_item، هر دو فیلدclass_idxوtype_idxباید شاخصهای معتبری در لیستtype_idsباشند. ورودی ارجاع شده توسطclass_idxباید یک نوع مرجع غیر آرایه باشد. علاوه بر این، فیلدname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید با مشخصاتMemberNameمطابقت داشته باشد. | 
| G19 | برای هر method_id_item، فیلدclass_idxباید یک شاخص معتبر در بخشtype_idsباشد و ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. فیلدproto_idباید یک مرجع معتبر در لیستproto_idsباشد. فیلدname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید با مشخصاتMemberNameمطابقت داشته باشد. | 
| G20 | برای هر field_id_item، فیلدclass_idxباید یک فهرست معتبر در لیستtype_idsباشد. ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. | 
محدودیت های بایت کد استاتیک
محدودیتهای استاتیک، محدودیتهایی بر روی عناصر جداگانه بایت کد هستند. آنها معمولاً می توانند بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده بررسی شوند.
| شناسه | توضیحات | 
|---|---|
| A1 | آرایه insnsنباید خالی باشد. | 
| A2 | اولین اپکد در آرایه insnsباید دارای اندیس صفر باشد. | 
| A3 | آرایه insnsباید فقط دارای کدهای آپشن معتبر Dalvik باشد. | 
| A4 | شاخص دستور n+1باید با شاخص دستورالعملnبه اضافه طول دستورالعملnبرابر باشد، با در نظر گرفتن عملوندهای ممکن. | 
| A5 | آخرین دستور در آرایه insnsباید به شاخصinsns_size-1ختم شود. | 
| A6 | همه اهداف gotoوif-<kind>باید کدهای عملیاتی در یک روش باشند. | 
| A7 | تمام اهداف یک دستورالعمل packed-switchباید کدهای عملیاتی در همان روش باشند. اندازه و فهرست اهداف باید هماهنگ باشد. | 
| A8 | تمام اهداف یک دستورالعمل sparse-switchباید کدهای عملیاتی در همان روش باشند. جدول مربوطه باید سازگار و مرتب شده از کم به بالا باشد. | 
| A9 | عملوند Bدستوراتconst-stringوconst-string/jumboباید یک شاخص معتبر در مجموعه ثابت رشته باشد. | 
| A10 | عملوند Cدستوراتiget<kind>وiput<kind>باید یک شاخص معتبر در مخزن ثابت فیلد باشد. ورودی ارجاع شده باید نمایانگر یک فیلد نمونه باشد. | 
| A11 | عملوند Cدستوراتsget<kind>وsput<kind>باید یک شاخص معتبر در مخزن ثابت فیلد باشد. ورودی ارجاع شده باید نمایانگر یک فیلد ثابت باشد. | 
| A12 | عملوند Cدستوراتinvoke-virtual،invoke-super،invoke-directوinvoke-staticباید یک شاخص معتبر در مخزن ثابت متد باشد. | 
| A13 | عملوند Bدستوراتinvoke-virtual/range،invoke-super/range،invoke-direct/rangeوinvoke-static/rangeباید یک شاخص معتبر در مخزن ثابت متد باشد. | 
| A14 | روشی که نام آن با «<» شروع میشود فقط باید به طور ضمنی توسط VM فراخوانی شود، نه با کدی که از یک فایل .dexمنشا میگیرد. تنها استثناء اولیه ساز نمونه است که ممکن است توسطinvoke-directفراخوانی شود. | 
| A15 | عملوند Cدستور واسطinvoke-interfaceباید یک شاخص معتبر در مخزن ثابت متد باشد.method_idارجاع شده باید به یک رابط (نه کلاس) تعلق داشته باشد. | 
| A16 | عملوند Bدستورinvoke-interface/rangeباید یک شاخص معتبر در مخزن ثابت متد باشد.method_idارجاع شده باید به یک رابط (نه کلاس) تعلق داشته باشد. | 
| A17 | عملوند Bدستوراتconst-class،check-cast،new-instanceوfilled-new-array/rangeباید یک شاخص معتبر در مخزن ثابت نوع باشد. | 
| A18 | عملوند Cدستوراتinstance-of،new-arrayوfilled-new-arrayباید یک شاخص معتبر برای نوع ثابت Pool باشد. | 
| A19 | ابعاد یک آرایه ایجاد شده توسط یک دستور new-arrayباید کمتر از256باشد. | 
| A20 | دستورالعمل newنباید به کلاس های آرایه، رابط ها یا کلاس های انتزاعی اشاره کند. | 
| A21 | نوع ارجاع شده توسط یک دستورالعمل new-arrayباید یک نوع معتبر و غیر مرجع باشد. | 
| A22 | همه رجیسترهایی که توسط یک دستورالعمل به صورت تک عرض (غیر جفتی) ارجاع می شوند باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_sizeباشد. | 
| A23 | همه رجیسترهایی که توسط یک دستورالعمل به صورت دو عرض (جفت) ارجاع می شوند باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_size-1باشد. | 
| A24 | عملوند method_idدستوراتinvoke-virtualوinvoke-directباید متعلق به یک کلاس (نه یک رابط) باشد. در فایلهای Dex قبل از نسخه037همین امر باید در مورد دستورالعملهایinvoke-superوinvoke-staticصادق باشد. | 
| A25 | عملوند method_idدستوراتinvoke-virtual/rangeوinvoke-direct/rangeباید به یک کلاس تعلق داشته باشد (نه یک رابط). در فایلهای Dex قبل از نسخه037همین امر باید در مورد دستورالعملهایinvoke-super/rangeوinvoke-static/rangeصادق باشد. | 
محدودیت های بایت کد ساختاری
محدودیت های ساختاری محدودیت هایی در روابط بین چندین عنصر بایت کد هستند. آنها معمولاً بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده قابل بررسی نیستند.
| شناسه | توضیحات | 
|---|---|
| B1 | تعداد و انواع آرگومان ها (رجیسترها و مقادیر فوری) باید همیشه با دستورالعمل مطابقت داشته باشد. | 
| B2 | جفت های ثبت نام هرگز نباید از هم جدا شوند. | 
| B3 | یک ثبات (یا جفت) ابتدا باید قبل از خواندن آن اختصاص داده شود. | 
| B4 | یک دستور invoke-directباید یک نمونه اولیه یا یک متد را فقط در کلاس فعلی یا یکی از ابر کلاس های آن فراخوانی کند. | 
| B5 | یک نمونه اولیه باید فقط در یک نمونه غیر اولیه فراخوانی شود. | 
| B6 | روشهای نمونه را میتوان فقط در فراخوانی کرد و فیلدهای نمونه را فقط در نمونههایی که از قبل مقداردهی شدهاند قابل دسترسی هستند. | 
| B7 | اگر همان دستورالعمل new-instanceقبل از مقداردهی اولیه مجدداً اجرا شود، ثباتی که نتیجه یک دستورالعملnew-instanceرا در خود نگه می دارد، نباید استفاده شود. | 
| B8 | قبل از اینکه بتوان به اعضای نمونه دسترسی داشت، یک مقداردهی اولیه باید یک نمونه اولیه دیگر (همان کلاس یا سوپرکلاس) را فراخوانی کند. استثنائات، فیلدهای نمونه غیر ارثی هستند که می توانند قبل از فراخوانی اولیه کننده دیگر و کلاس Objectبه طور کلی اختصاص داده شوند. | 
| B9 | همه آرگومان های متد واقعی باید با آرگومان های رسمی مربوطه خود سازگار با انتساب باشند. | 
| B10 | برای هر فراخوانی روش نمونه، نمونه واقعی باید با کلاس یا رابط مشخص شده در دستورالعمل سازگار باشد. | 
| B11 | یک دستور return<kind>باید با نوع برگشتی متد خود مطابقت داشته باشد. | 
| B12 | هنگام دسترسی به اعضای محافظت شده یک سوپرکلاس، نوع واقعی نمونه مورد دسترسی باید کلاس فعلی یا یکی از زیر کلاس های آن باشد. | 
| B13 | نوع مقدار ذخیره شده در یک فیلد ثابت باید با نوع فیلد سازگار باشد یا به آن تبدیل شود. | 
| B14 | نوع مقدار ذخیره شده در یک فیلد باید با نوع فیلد سازگار باشد یا به آن تبدیل شود. | 
| B15 | نوع هر مقدار ذخیره شده در یک آرایه باید با نوع مولفه آرایه سازگار باشد. | 
| B16 | عملوند Aدستورthrowباید باjava.lang.Throwableسازگار باشد. | 
| B17 | آخرین دستورالعمل قابل دسترسی یک متد باید یا یک gotoبه عقب یا شاخه، یکreturnیا یک دستورالعملthrowباشد. نباید امکان رها کردن آرایهinsnsدر پایین وجود داشته باشد. | 
| B18 | نصف تخصیصنخورده یک جفت رجیستر سابق نمیتواند خوانده شود (نامعتبر در نظر گرفته میشود) تا زمانی که توسط دستورالعمل دیگری تخصیص داده نشده باشد. | 
| B19 | یک دستور move-result<kind>باید بلافاصله قبل از (در آرایهinsns) یک دستورinvoke-<kind>باشد. تنها استثنا دستورmove-result-objectاست که ممکن است قبل از یک دستورfilled-new-arrayنیز باشد. | 
| B20 | یک دستور move-result<kind>باید بلافاصله قبل از آن (در جریان کنترل واقعی) با یک دستورالعملreturn-<kind>منطبق باشد (نباید به آن پرش کرد). تنها استثنا دستورmove-result-objectاست که ممکن است قبل از یک دستورfilled-new-arrayنیز باشد. | 
| B21 | یک دستور move-exceptionباید فقط به عنوان اولین دستورالعمل در یک کنترل کننده استثنا ظاهر شود. | 
| B22 | دستورات packed-switch-data،sparse-switch-data، وfill-array-dataنباید توسط جریان کنترل قابل دسترسی باشند. | 
 یک فایل .dex فرمت انتقال بایت کد Dalvik است. برای اینکه یک فایل یک فایل .dex معتبر باشد، محدودیتهای نحوی و معنایی خاصی وجود دارد و برای پشتیبانی از فایلهای .dex معتبر، زمان اجرا لازم است.
محدودیت های یکپارچگی عمومی .dex
 محدودیتهای یکپارچگی کلی مربوط به ساختار بزرگتر یک فایل .dex است، همانطور که در قالب .dex به تفصیل توضیح داده شده است.
| شناسه | توضیحات | 
|---|---|
| G1 | شماره magicفایل.dexباید برای نسخه 35dex\n035\0یا برای نسخههای بعدی مشابه باشد. | 
| G2 | چکسوم باید یک جمعسنجی Adler-32 از کل محتویات فایل به جز magicو فیلدchecksumباشد. | 
| G3 | امضا باید یک هش SHA-1 از کل محتویات فایل به جز magic،checksumوsignatureباشد. | 
| G4 |     | 
| G5 |     | 
| G6 | endian_tagباید دارای یک مقدار باشد:ENDIAN_CONSTANTیاREVERSE_ENDIAN_CONSTANT | 
| G7 |  برای هر یک از   فیلدهای  | 
| G8 | تمام فیلدهای offset در هدر به جز map_offباید چهار بایت تراز شوند. | 
| G9 | فیلد map_offباید یا صفر باشد یا به بخش داده اشاره کند. در مورد دوم، بخشdataباید وجود داشته باشد. | 
| G10 | هیچ یک از link،string_ids،type_ids،proto_ids،field_ids،method_ids،class_defsو بخشهایdataنباید با یکدیگر یا سربرگ همپوشانی داشته باشند. | 
| G11 | اگر نقشه وجود داشته باشد، هر ورودی نقشه باید یک نوع معتبر داشته باشد. هر نوع ممکن است حداکثر یک بار ظاهر شود. | 
| G12 | اگر نقشه ای وجود داشته باشد، هر ورودی نقشه باید یک افست و اندازه غیر صفر داشته باشد. افست باید به بخش مربوط به فایل اشاره کند (یعنی یک string_id_itemباید به بخشstring_idsاشاره کند) و اندازه صریح یا ضمنی آیتم باید با محتویات و اندازه واقعی بخش مطابقت داشته باشد. | 
| G13 | اگر نقشه ای وجود داشته باشد، آنگاه افست ورودی نقشه n+1باید بزرگتر یا مساوی با افست ورودی نقشهn plus than size of map entry nباشد. این به معنای ورودی های غیر همپوشانی و سفارش کم به بالا است. | 
| G14 | انواع ورودیهای زیر باید دارای یک افست چهار بایتی باشند: string_id_item،type_id_item،proto_id_item،field_id_item،method_id_item،class_def_item،type_list،code_item،annotations_directory_item. | 
| G15 |  برای هر   برای هر   برای  | 
| G16 | برای هر type_id_item، فیلدdescriptor_idxباید حاوی یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیفگر نوع معتبر باشد. | 
| G17 | برای هر proto_id_item، فیلدshorty_idxباید حاوی یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیف کننده کوتاه معتبر باشد. همچنین، فیلدreturn_type_idxباید یک شاخص معتبر در بخشtype_idsباشد و فیلدparameters_offباید صفر باشد یا یک افست معتبر که به بخشdataاشاره میکند. اگر غیر صفر باشد، لیست پارامترها نباید حاوی هیچ ورودی خالی باشد. | 
| G18 | برای هر field_id_item، هر دو فیلدclass_idxوtype_idxباید شاخصهای معتبری در لیستtype_idsباشند. ورودی ارجاع شده توسطclass_idxباید یک نوع مرجع غیر آرایه باشد. علاوه بر این، فیلدname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید با مشخصاتMemberNameمطابقت داشته باشد. | 
| G19 | برای هر method_id_item، فیلدclass_idxباید یک شاخص معتبر در بخشtype_idsباشد و ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. فیلدproto_idباید یک مرجع معتبر در لیستproto_idsباشد. فیلدname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید با مشخصاتMemberNameمطابقت داشته باشد. | 
| G20 | برای هر field_id_item، فیلدclass_idxباید یک فهرست معتبر در لیستtype_idsباشد. ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. | 
محدودیت های بایت کد استاتیک
محدودیتهای استاتیک، محدودیتهایی بر روی عناصر جداگانه بایت کد هستند. آنها معمولاً می توانند بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده بررسی شوند.
| شناسه | توضیحات | 
|---|---|
| A1 | آرایه insnsنباید خالی باشد. | 
| A2 | اولین اپکد در آرایه insnsباید دارای اندیس صفر باشد. | 
| A3 | آرایه insnsباید فقط دارای کدهای آپشن معتبر Dalvik باشد. | 
| A4 | شاخص دستور n+1باید با شاخص دستورالعملnبه اضافه طول دستورالعملnبرابر باشد، با در نظر گرفتن عملوندهای ممکن. | 
| A5 | آخرین دستور در آرایه insnsباید به شاخصinsns_size-1ختم شود. | 
| A6 | همه اهداف gotoوif-<kind>باید کدهای عملیاتی در یک روش باشند. | 
| A7 | تمام اهداف یک دستورالعمل packed-switchباید کدهای عملیاتی در همان روش باشند. اندازه و فهرست اهداف باید هماهنگ باشد. | 
| A8 | تمام اهداف یک دستورالعمل sparse-switchباید کدهای عملیاتی در همان روش باشند. جدول مربوطه باید سازگار و مرتب شده از کم به بالا باشد. | 
| A9 | عملوند Bدستوراتconst-stringوconst-string/jumboباید یک شاخص معتبر در مجموعه ثابت رشته باشد. | 
| A10 | عملوند Cدستوراتiget<kind>وiput<kind>باید یک شاخص معتبر در مخزن ثابت فیلد باشد. ورودی ارجاع شده باید نمایانگر یک فیلد نمونه باشد. | 
| A11 | عملوند Cدستوراتsget<kind>وsput<kind>باید یک شاخص معتبر در مخزن ثابت فیلد باشد. ورودی ارجاع شده باید نمایانگر یک فیلد ثابت باشد. | 
| A12 | عملوند Cدستوراتinvoke-virtual،invoke-super،invoke-directوinvoke-staticباید یک شاخص معتبر در مخزن ثابت متد باشد. | 
| A13 | عملوند Bدستوراتinvoke-virtual/range،invoke-super/range،invoke-direct/rangeوinvoke-static/rangeباید یک شاخص معتبر در مخزن ثابت متد باشد. | 
| A14 | روشی که نام آن با «<» شروع میشود فقط باید به طور ضمنی توسط VM فراخوانی شود، نه با کدی که از یک فایل .dexمنشا میگیرد. تنها استثناء اولیه ساز نمونه است که ممکن است توسطinvoke-directفراخوانی شود. | 
| A15 | عملوند Cدستور واسطinvoke-interfaceباید یک شاخص معتبر در مخزن ثابت متد باشد.method_idارجاع شده باید به یک رابط (نه کلاس) تعلق داشته باشد. | 
| A16 | عملوند Bدستورinvoke-interface/rangeباید یک شاخص معتبر در مخزن ثابت متد باشد.method_idارجاع شده باید به یک رابط (نه کلاس) تعلق داشته باشد. | 
| A17 | عملوند Bدستوراتconst-class،check-cast،new-instanceوfilled-new-array/rangeباید یک شاخص معتبر در مخزن ثابت نوع باشد. | 
| A18 | عملوند Cدستوراتinstance-of،new-arrayوfilled-new-arrayباید یک شاخص معتبر برای نوع ثابت Pool باشد. | 
| A19 | ابعاد یک آرایه ایجاد شده توسط یک دستور new-arrayباید کمتر از256باشد. | 
| A20 | دستورالعمل newنباید به کلاس های آرایه، رابط ها یا کلاس های انتزاعی اشاره کند. | 
| A21 | نوع ارجاع شده توسط یک دستورالعمل new-arrayباید یک نوع معتبر و غیر مرجع باشد. | 
| A22 | همه رجیسترهایی که توسط یک دستورالعمل به صورت تک عرض (غیر جفتی) ارجاع می شوند باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_sizeباشد. | 
| A23 | همه رجیسترهایی که توسط یک دستورالعمل به صورت دو عرض (جفت) ارجاع می شوند باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_size-1باشد. | 
| A24 | عملوند method_idدستوراتinvoke-virtualوinvoke-directباید متعلق به یک کلاس (نه یک رابط) باشد. در فایلهای Dex قبل از نسخه037همین امر باید در مورد دستورالعملهایinvoke-superوinvoke-staticصادق باشد. | 
| A25 | عملوند method_idدستوراتinvoke-virtual/rangeوinvoke-direct/rangeباید به یک کلاس تعلق داشته باشد (نه یک رابط). در فایلهای Dex قبل از نسخه037همین امر باید در مورد دستورالعملهایinvoke-super/rangeوinvoke-static/rangeصادق باشد. | 
محدودیت های بایت کد ساختاری
محدودیت های ساختاری محدودیت هایی در روابط بین چندین عنصر بایت کد هستند. آنها معمولاً بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده قابل بررسی نیستند.
| شناسه | توضیحات | 
|---|---|
| B1 | تعداد و انواع آرگومان ها (رجیسترها و مقادیر فوری) باید همیشه با دستورالعمل مطابقت داشته باشد. | 
| B2 | جفت های ثبت نام هرگز نباید از هم جدا شوند. | 
| B3 | یک ثبات (یا جفت) ابتدا باید قبل از خواندن آن اختصاص داده شود. | 
| B4 | یک دستور invoke-directباید یک نمونه اولیه یا یک متد را فقط در کلاس فعلی یا یکی از ابر کلاس های آن فراخوانی کند. | 
| B5 | یک نمونه اولیه باید فقط در یک نمونه غیر اولیه فراخوانی شود. | 
| B6 | روشهای نمونه را میتوان فقط در فراخوانی کرد و فیلدهای نمونه را فقط در نمونههایی که از قبل مقداردهی شدهاند قابل دسترسی هستند. | 
| B7 | اگر همان دستورالعمل new-instanceقبل از مقداردهی اولیه مجدداً اجرا شود، ثباتی که نتیجه یک دستورالعملnew-instanceرا در خود نگه می دارد، نباید استفاده شود. | 
| B8 | قبل از اینکه بتوان به اعضای نمونه دسترسی داشت، یک مقداردهی اولیه باید یک نمونه اولیه دیگر (همان کلاس یا سوپرکلاس) را فراخوانی کند. استثنائات، فیلدهای نمونه غیر ارثی هستند که می توانند قبل از فراخوانی اولیه کننده دیگر و کلاس Objectبه طور کلی اختصاص داده شوند. | 
| B9 | همه آرگومان های متد واقعی باید با آرگومان های رسمی مربوطه خود سازگار با انتساب باشند. | 
| B10 | برای هر فراخوانی روش نمونه، نمونه واقعی باید با کلاس یا رابط مشخص شده در دستورالعمل سازگار باشد. | 
| B11 | یک دستور return<kind>باید با نوع برگشتی متد خود مطابقت داشته باشد. | 
| B12 | هنگام دسترسی به اعضای محافظت شده یک سوپرکلاس، نوع واقعی نمونه مورد دسترسی باید کلاس فعلی یا یکی از زیر کلاس های آن باشد. | 
| B13 | نوع مقدار ذخیره شده در یک فیلد ثابت باید با نوع فیلد سازگار باشد یا به آن تبدیل شود. | 
| B14 | نوع مقدار ذخیره شده در یک فیلد باید با نوع فیلد سازگار باشد یا به آن تبدیل شود. | 
| B15 | نوع هر مقدار ذخیره شده در یک آرایه باید با نوع مولفه آرایه سازگار باشد. | 
| B16 | عملوند Aدستورthrowباید باjava.lang.Throwableسازگار باشد. | 
| B17 | آخرین دستورالعمل قابل دسترسی یک متد باید یا یک gotoبه عقب یا شاخه، یکreturnیا یک دستورالعملthrowباشد. نباید امکان رها کردن آرایهinsnsدر پایین وجود داشته باشد. | 
| B18 | نصف تخصیصنخورده یک جفت رجیستر سابق نمیتواند خوانده شود (نامعتبر در نظر گرفته میشود) تا زمانی که توسط دستورالعمل دیگری تخصیص داده نشده باشد. | 
| B19 | یک دستور move-result<kind>باید بلافاصله قبل از (در آرایهinsns) یک دستورinvoke-<kind>باشد. تنها استثنا دستورmove-result-objectاست که ممکن است قبل از یک دستورfilled-new-arrayنیز باشد. | 
| B20 | یک دستور move-result<kind>باید بلافاصله قبل از آن (در جریان کنترل واقعی) با یک دستورالعملreturn-<kind>منطبق باشد (نباید به آن پرش کرد). تنها استثنا دستورmove-result-objectاست که ممکن است قبل از یک دستورfilled-new-arrayنیز باشد. | 
| B21 | یک دستور move-exceptionباید فقط به عنوان اولین دستورالعمل در یک کنترل کننده استثنا ظاهر شود. | 
| B22 | دستورات packed-switch-data،sparse-switch-data، وfill-array-dataنباید توسط جریان کنترل قابل دسترسی باشند. | 
 یک فایل .dex فرمت انتقال بایت کد Dalvik است. برای اینکه یک فایل یک فایل .dex معتبر باشد، محدودیتهای نحوی و معنایی خاصی وجود دارد و برای پشتیبانی از فایلهای .dex معتبر، زمان اجرا لازم است.
محدودیت های یکپارچگی عمومی .dex
 محدودیتهای یکپارچگی کلی مربوط به ساختار بزرگتر یک فایل .dex است، همانطور که در قالب .dex به تفصیل توضیح داده شده است.
| شناسه | توضیحات | 
|---|---|
| G1 | شماره magicفایل.dexباید برای نسخه 35dex\n035\0یا برای نسخههای بعدی مشابه باشد. | 
| G2 | چکسوم باید یک جمعسنجی Adler-32 از کل محتویات فایل به جز magicو فیلدchecksumباشد. | 
| G3 | امضا باید یک هش SHA-1 از کل محتویات فایل به جز magic،checksumوsignatureباشد. | 
| G4 |     | 
| G5 |     | 
| G6 | endian_tagباید دارای یک مقدار باشد:ENDIAN_CONSTANTیاREVERSE_ENDIAN_CONSTANT | 
| G7 |  برای هر یک از   فیلدهای  | 
| G8 | تمام فیلدهای offset در هدر به جز map_offباید چهار بایت تراز شوند. | 
| G9 | فیلد map_offباید یا صفر باشد یا به بخش داده اشاره کند. در مورد دوم، بخشdataباید وجود داشته باشد. | 
| G10 | هیچ یک از link،string_ids،type_ids،proto_ids،field_ids،method_ids،class_defsو بخشهایdataنباید با یکدیگر یا سربرگ همپوشانی داشته باشند. | 
| G11 | اگر نقشه وجود داشته باشد، هر ورودی نقشه باید یک نوع معتبر داشته باشد. هر نوع ممکن است حداکثر یک بار ظاهر شود. | 
| G12 | اگر نقشه ای وجود داشته باشد، هر ورودی نقشه باید یک افست و اندازه غیر صفر داشته باشد. افست باید به بخش مربوط به فایل اشاره کند (یعنی یک string_id_itemباید به بخشstring_idsاشاره کند) و اندازه صریح یا ضمنی آیتم باید با محتویات و اندازه واقعی بخش مطابقت داشته باشد. | 
| G13 | اگر نقشه ای وجود داشته باشد، آنگاه افست ورودی نقشه n+1باید بزرگتر یا مساوی با افست ورودی نقشهn plus than size of map entry nباشد. این به معنای ورودی های غیر همپوشانی و سفارش کم به بالا است. | 
| G14 | انواع ورودیهای زیر باید دارای یک افست چهار بایتی باشند: string_id_item،type_id_item،proto_id_item،field_id_item،method_id_item،class_def_item،type_list،code_item،annotations_directory_item. | 
| G15 |  برای هر   برای هر   برای  | 
| G16 | برای هر type_id_item، فیلدdescriptor_idxباید حاوی یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیفگر نوع معتبر باشد. | 
| G17 | برای هر proto_id_item، فیلدshorty_idxباید حاوی یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیف کننده کوتاه معتبر باشد. همچنین، فیلدreturn_type_idxباید یک شاخص معتبر در بخشtype_idsباشد و فیلدparameters_offباید صفر باشد یا یک افست معتبر که به بخشdataاشاره میکند. اگر غیر صفر باشد، لیست پارامترها نباید حاوی هیچ ورودی خالی باشد. | 
| G18 | برای هر field_id_item، هر دو فیلدclass_idxوtype_idxباید شاخصهای معتبری در لیستtype_idsباشند. ورودی ارجاع شده توسطclass_idxباید یک نوع مرجع غیر آرایه باشد. علاوه بر این، فیلدname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید با مشخصاتMemberNameمطابقت داشته باشد. | 
| G19 | برای هر method_id_item، فیلدclass_idxباید یک شاخص معتبر در بخشtype_idsباشد و ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. فیلدproto_idباید یک مرجع معتبر در لیستproto_idsباشد. فیلدname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید با مشخصاتMemberNameمطابقت داشته باشد. | 
| G20 | برای هر field_id_item، فیلدclass_idxباید یک فهرست معتبر در لیستtype_idsباشد. ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. | 
محدودیت های بایت کد استاتیک
محدودیتهای استاتیک، محدودیتهایی بر روی عناصر جداگانه بایت کد هستند. آنها معمولاً می توانند بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده بررسی شوند.
| شناسه | توضیحات | 
|---|---|
| A1 | آرایه insnsنباید خالی باشد. | 
| A2 | اولین اپکد در آرایه insnsباید دارای اندیس صفر باشد. | 
| A3 | آرایه insnsباید فقط دارای کدهای آپشن معتبر Dalvik باشد. | 
| A4 | شاخص دستور n+1باید با شاخص دستورالعملnبه اضافه طول دستورالعملnبرابر باشد، با در نظر گرفتن عملوندهای ممکن. | 
| A5 | آخرین دستور در آرایه insnsباید به شاخصinsns_size-1ختم شود. | 
| A6 | همه اهداف gotoوif-<kind>باید کدهای عملیاتی در یک روش باشند. | 
| A7 | تمام اهداف یک دستورالعمل packed-switchباید کدهای عملیاتی در همان روش باشند. اندازه و فهرست اهداف باید هماهنگ باشد. | 
| A8 | تمام اهداف یک دستورالعمل sparse-switchباید کدهای عملیاتی در همان روش باشند. جدول مربوطه باید سازگار و مرتب شده از کم به بالا باشد. | 
| A9 | عملوند Bدستوراتconst-stringوconst-string/jumboباید یک شاخص معتبر در مجموعه ثابت رشته باشد. | 
| A10 | عملوند Cدستوراتiget<kind>وiput<kind>باید یک شاخص معتبر در مخزن ثابت فیلد باشد. ورودی ارجاع شده باید نمایانگر یک فیلد نمونه باشد. | 
| A11 | عملوند Cدستوراتsget<kind>وsput<kind>باید یک شاخص معتبر در مخزن ثابت فیلد باشد. ورودی ارجاع شده باید نمایانگر یک فیلد ثابت باشد. | 
| A12 | عملوند Cدستوراتinvoke-virtual،invoke-super،invoke-directوinvoke-staticباید یک شاخص معتبر در مخزن ثابت متد باشد. | 
| A13 | عملوند Bدستوراتinvoke-virtual/range،invoke-super/range،invoke-direct/rangeوinvoke-static/rangeباید یک شاخص معتبر در مخزن ثابت متد باشد. | 
| A14 | روشی که نام آن با «<» شروع میشود فقط باید به طور ضمنی توسط VM فراخوانی شود، نه با کدی که از یک فایل .dexمنشا میگیرد. تنها استثناء اولیه ساز نمونه است که ممکن است توسطinvoke-directفراخوانی شود. | 
| A15 | عملوند Cدستور واسطinvoke-interfaceباید یک شاخص معتبر در مخزن ثابت متد باشد.method_idارجاع شده باید به یک رابط (نه کلاس) تعلق داشته باشد. | 
| A16 | عملوند Bدستورinvoke-interface/rangeباید یک شاخص معتبر در مخزن ثابت متد باشد.method_idارجاع شده باید به یک رابط (نه کلاس) تعلق داشته باشد. | 
| A17 | عملوند Bدستوراتconst-class،check-cast،new-instanceوfilled-new-array/rangeباید یک شاخص معتبر در مخزن ثابت نوع باشد. | 
| A18 | عملوند Cدستوراتinstance-of،new-arrayوfilled-new-arrayباید یک شاخص معتبر برای نوع ثابت Pool باشد. | 
| A19 | ابعاد یک آرایه ایجاد شده توسط یک دستور new-arrayباید کمتر از256باشد. | 
| A20 | دستورالعمل newنباید به کلاس های آرایه، رابط ها یا کلاس های انتزاعی اشاره کند. | 
| A21 | نوع ارجاع شده توسط یک دستورالعمل new-arrayباید یک نوع معتبر و غیر مرجع باشد. | 
| A22 | همه رجیسترهایی که توسط یک دستورالعمل به صورت تک عرض (غیر جفتی) ارجاع می شوند باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_sizeباشد. | 
| A23 | همه رجیسترهایی که توسط یک دستورالعمل به صورت دو عرض (جفت) ارجاع می شوند باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_size-1باشد. | 
| A24 | عملوند method_idدستوراتinvoke-virtualوinvoke-directباید متعلق به یک کلاس (نه یک رابط) باشد. در فایلهای Dex قبل از نسخه037همین امر باید در مورد دستورالعملهایinvoke-superوinvoke-staticصادق باشد. | 
| A25 | روش method_idاز دستورالعمل هایinvoke-virtual/rangeوinvoke-direct/rangeباید متعلق به یک کلاس باشد (نه یک رابط). در پرونده های DEX قبل از نسخه037، باید در مورد دستورالعمل هایinvoke-super/rangeوinvoke-static/rangeیکسان باشد. | 
محدودیت های ساختاری Bytecode
محدودیت های ساختاری محدودیت در روابط بین چندین عنصر بایت کد است. آنها معمولاً بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده ها قابل بررسی نیستند.
| شناسه | توضیحات | 
|---|---|
| B1 | تعداد و انواع آرگومان ها (ثبت ها و مقادیر فوری) همیشه باید با دستورالعمل مطابقت داشته باشند. | 
| B2 | جفت های ثبت هرگز نباید شکسته شوند. | 
| B3 | قبل از خواندن ، یک رجیستر (یا جفت) باید ابتدا اختصاص داده شود. | 
| B4 | یک دستورالعمل invoke-directباید یک نمونه اولیه یا یک روش را فقط در کلاس فعلی یا یکی از ابرقهرمانان آن فراخوانی کند. | 
| B5 | یک نمونه اولیه نمونه فقط باید در یک نمونه غیرقانونی استفاده شود. | 
| B6 | روشهای نمونه فقط در مواردی مورد استفاده قرار می گیرند و قسمتهای نمونه فقط در نمونه های اولیه از قبل قابل دسترسی هستند. | 
| B7 | در صورتی که همان دستورالعمل new-instanceجدید قبل از شروع نمونه اجرا شود ، رجیستری که نتیجه یک دستورالعملnew-instanceرا در اختیار دارد ، نباید استفاده شود. | 
| B8 | قبل از دسترسی به اعضای نمونه ، یک نمونه اولیه نمونه باید با یک نمونه اولیه دیگر (همان کلاس یا ابر کلاس) تماس بگیرد. استثنائات زمینه های نمونه غیر متعهد هستند که می توانند قبل از فراخوانی یک ابتکار عمل دیگری و به طور کلی کلاس Objectاختصاص دهند. | 
| B9 | تمام آرگومان های روش واقعی باید با استدلال رسمی مربوطه سازگار باشند. | 
| B10 | برای هر فراخوانی روش نمونه ، نمونه واقعی باید با کلاس یا رابط مشخص شده در دستورالعمل سازگار باشد. | 
| B11 | یک دستورالعمل return<kind>باید با نوع بازگشت روش آن مطابقت داشته باشد. | 
| B12 | هنگام دسترسی به اعضای حفاظت شده یک ابرقهرمان ، نوع واقعی نمونه ای که در آن قابل دسترسی است باید یا کلاس فعلی یا یکی از زیر کلاس های آن باشد. | 
| B13 | نوع مقداری که در یک قسمت استاتیک ذخیره شده است باید سازگار با یا قابل تبدیل به نوع قسمت باشد. | 
| B14 | نوع مقدار ذخیره شده در یک قسمت باید سازگار با واگذاری یا قابل تبدیل به نوع قسمت باشد. | 
| B15 | نوع هر مقدار ذخیره شده در یک آرایه باید با نوع مؤلفه آرایه سازگار باشد. | 
| B16 | Aعمل یک دستورالعملthrowباید باjava.lang.Throwableسازگار باشد. | 
| B17 | آخرین دستورالعمل قابل دسترسی یک روش باید یا به gotoیا شاخه ،returnیا دستورالعملthrowباشد. نمی توان آرایهinsnsدر پایین گذاشت. | 
| B18 | تا زمانی که توسط برخی دستورالعمل های دیگر مجدداً تعیین نشده باشد ، نیمی از یک جفت ثبت نام قبلی ممکن است خوانده نشود (نامعتبر تلقی می شود). | 
| B19 | یک دستورالعمل move-result<kind>باید بلافاصله (در آرایهinsns) توسط یک دستورالعملinvoke-<kind>انجام شود. تنها استثناء دستورالعملmove-result-objectاست که ممکن است قبل از یک دستورالعملfilled-new-arrayنیز انجام شود. | 
| B20 | یک دستورالعمل move-result<kind>باید بلافاصله (در جریان کنترل واقعی) با یک دستورالعملreturn-<kind>(نباید به آن پرید). تنها استثناء دستورالعملmove-result-objectاست که ممکن است قبل از یک دستورالعملfilled-new-arrayنیز انجام شود. | 
| B21 | یک دستورالعمل move-exceptionفقط باید به عنوان اولین دستورالعمل در یک کنترل کننده استثنا ظاهر شود. | 
| B22 | packed-switch-data،sparse-switch-data، وfill-array-dataرا با جریان کنترل قابل دسترسی نیستند. | 
 پرونده .dex قالب حمل و نقل برای کد Dalvik است. محدودیت های نحوی و معنایی خاصی وجود دارد که یک پرونده یک پرونده معتبر .dex باشد و یک زمان اجرا برای پشتیبانی از فایلهای معتبر .DEX لازم است.
محدودیت های یکپارچگی عمومی .DEX
 محدودیت های یکپارچگی عمومی مربوط به ساختار بزرگتر یک پرونده .dex است ، همانطور که در قالب .dex به تفصیل شرح داده شده است.
| شناسه | توضیحات | 
|---|---|
| G1 | تعداد magicپرونده.dexبرای نسخه 35 بایدdex\n035\0باشد ، یا برای نسخه های بعدی مشابه باشد. | 
| G2 | Checksum باید یک چک Adler-32 از کل محتویات پرونده به جز زمینه magicوchecksumباشد. | 
| G3 | امضای باید یک هش SHA-1 از کل مطالب پرونده به جز magic،checksumوsignatureباشد. | 
| G4 |     | 
| G5 |     | 
| G6 | endian_tagباید یا مقدار آن را داشته باشد:ENDIAN_CONSTANTیاREVERSE_ENDIAN_CONSTANT | 
| G7 |  برای هر یک از   قسمتهای  | 
| G8 | تمام زمینه های افست در هدر به جز map_offباید چهار با همبستگی باشد. | 
| G9 | قسمت map_offباید صفر باشد یا به بخش داده اشاره کند. در حالت دوم ، بخشdataباید وجود داشته باشد. | 
| G10 | هیچ یک از link،string_ids،type_ids،proto_ids،field_ids،method_ids،class_defsو بخش هایdataباید با یکدیگر یا هدر همپوشانی داشته باشند. | 
| G11 | اگر یک نقشه وجود داشته باشد ، پس از آن هر ورودی نقشه باید یک نوع معتبر داشته باشد. هر نوع ممکن است حداکثر یک بار ظاهر شود. | 
| G12 | اگر یک نقشه وجود داشته باشد ، پس از آن هر ورودی نقشه باید یک جبران و اندازه غیر صفر داشته باشد. افست باید به بخش مربوط به پرونده اشاره کند (یعنی یک string_id_itemباید به بخشstring_idsاشاره کند) و اندازه صریح یا ضمنی مورد باید با محتویات و اندازه واقعی بخش مطابقت داشته باشد. | 
| G13 | اگر نقشه وجود داشته باشد ، جبران ورودی نقشه n+1باید بیشتر یا برابر با جبران ورودی نقشهn plus than size of map entry nباشد. این به معنای ورودی های غیر همپوشانی و سفارش کم به بالا است. | 
| G14 | انواع ورودی های زیر باید دارای یک افست باشد که چهار بایت هماهنگ باشد: string_id_item،type_id_item،proto_id_item،field_id_item،method_id_item،class_def_item،type_list،code_item،annotations_directory_item. | 
| G15 |  برای هر   برای هر   برای ارجاع شده  | 
| G16 | برای هر type_id_item، قسمتdescriptor_idxباید دارای یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیف کننده نوع معتبر باشد. | 
| G17 | برای هر proto_id_item، قسمتshorty_idxباید دارای یک مرجع معتبر در لیستstring_idsباشد. رشته ارجاع شده باید یک توصیف کننده معتبر کوتاه باشد. همچنین ، قسمتreturn_type_idxباید یک شاخص معتبر در بخشtype_idsباشد ، و قسمتparameters_offباید صفر باشد یا یک جبران معتبر که به بخشdataاشاره دارد. در صورت عدم صفر ، لیست پارامتر نباید حاوی ورودی های خالی باشد. | 
| G18 | برای هر field_id_item، هر دو قسمتclass_idxوtype_idxباید شاخص های معتبر در لیستtype_idsباشند. ورودی ارجاع شده توسطclass_idxباید یک نوع مرجع غیر آرایه باشد. علاوه بر این ، قسمتname_idxباید یک مرجع معتبر به بخشstring_idsباشد ، و محتوای ورودی ارجاع شده باید مطابق با مشخصاتMemberNameباشد. | 
| G19 | برای هر method_id_item، قسمتclass_idxباید یک شاخص معتبر در بخشtype_idsباشد ، و ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. قسمتproto_idباید یک مرجع معتبر در لیستproto_idsباشد. قسمتname_idxباید یک مرجع معتبر در بخشstring_idsباشد و محتوای ورودی ارجاع شده باید مطابق با مشخصاتMemberNameباشد. | 
| G20 | برای هر field_id_item، قسمتclass_idxباید یک شاخص معتبر در لیستtype_idsباشد. ورودی ارجاع شده باید یک نوع مرجع غیر آرایه باشد. | 
محدودیت های استاتیک Bytecode
محدودیت های استاتیک محدودیت هایی در عناصر فردی بایت کد است. آنها معمولاً بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده ها قابل بررسی هستند.
| شناسه | توضیحات | 
|---|---|
| A1 | آرایه insnsنباید خالی باشد. | 
| A2 | اولین نسخه در آرایه insnsباید دارای صفر باشد. | 
| A3 | آرایه insnsفقط باید حاوی Opcodes معتبر Dalvik باشد. | 
| A4 | شاخص دستورالعمل n+1باید با در نظر گرفتن عملیات های احتمالی با شاخص دستورالعملnبه علاوه طول دستورالعملnبرابر شود. | 
| A5 | آخرین دستورالعمل در آرایه insnsباید به Indexinsns_size-1پایان یابد. | 
| A6 | همه اهداف gotoوif-<kind>باید با همان روش Opcode باشند. | 
| A7 | تمام اهداف یک دستورالعمل packed-switchباید با همان روش Opcode باشند. اندازه و لیست اهداف باید سازگار باشد. | 
| A8 | تمام اهداف یک دستورالعمل sparse-switchباید با همان روش Opcodes باشند. جدول مربوطه باید سازگار و طبقه پایین تا بالا باشد. | 
| A9 | عملیات Bاز دستورالعمل هایconst-stringوconst-string/jumboباید یک شاخص معتبر در استخر ثابت رشته باشد. | 
| A10 | دستورالعمل های Cازiget<kind>وiput<kind>باید یک شاخص معتبر در استخر ثابت میدان باشد. ورودی ارجاع شده باید یک قسمت نمونه را نشان دهد. | 
| A11 | دستورالعمل های Cازsget<kind>وsput<kind>باید یک شاخص معتبر در استخر ثابت میدان باشد. ورودی ارجاع شده باید یک زمینه استاتیک را نشان دهد. | 
| A12 | عمل Cازinvoke-virtual،invoke-super،invoke-directوinvoke-staticباید یک شاخص معتبر در استخر ثابت روش باشد. | 
| A13 | Operand Bازinvoke-virtual/range،invoke-super/range،invoke-direct/rangeو دستورالعمل هایinvoke-static/rangeباید یک شاخص معتبر در استخر ثابت روش باشد. | 
| A14 | روشی که نام آن با "<" شروع می شود ، فقط باید توسط VM به طور ضمنی فراخوانی شود ، نه با کد منشأ یک پرونده .dex. تنها استثناء اولیه سازی نمونه است که ممکن است توسطinvoke-directفراخوانی شود. | 
| A15 | عمل Cدستورالعملinvoke-interfaceباید یک شاخص معتبر در استخر ثابت باشد.method_idارجاع شده باید متعلق به یک رابط باشد (نه یک کلاس). | 
| A16 | عملیات Bاز دستورالعملinvoke-interface/rangeباید یک شاخص معتبر در استخر ثابت باشد.method_idارجاع شده باید متعلق به یک رابط باشد (نه یک کلاس). | 
| A17 | دستورالعمل های Bازconst-class،check-cast،new-instanceوfilled-new-array/rangeباید یک شاخص معتبر در استخر ثابت باشد. | 
| A18 | عملیات Cاز دستورالعمل هایinstance-of،new-arrayوfilled-new-arrayباید یک شاخص معتبر در استخر ثابت باشد. | 
| A19 | ابعاد آرایه ای که توسط یک دستورالعمل new-arrayایجاد شده است باید کمتر از256باشد. | 
| A20 | دستورالعمل newنباید به کلاسهای آرایه ، رابط ها یا کلاسهای انتزاعی اشاره کند. | 
| A21 | نوع ذکر شده توسط یک دستورالعمل new-arrayباید یک نوع معتبر و غیر مرجع باشد. | 
| A22 | کلیه رجیسترهای ذکر شده توسط یک دستورالعمل به صورت یک عرض (غیر جفت) باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_sizeباشند. | 
| A23 | کلیه رجیسترهای ذکر شده توسط یک دستورالعمل به صورت دو عرض (جفت) باید برای روش فعلی معتبر باشند. یعنی شاخص های آنها باید غیر منفی و کوچکتر از registers_size-1باشند. | 
| A24 | روش method_idدستورالعمل هایinvoke-virtualوinvoke-directباید متعلق به یک کلاس باشد (نه یک رابط). در پرونده های DEX قبل از نسخه037، باید در مورد دستورالعمل هایinvoke-superوinvoke-staticصادق باشد. | 
| A25 | روش method_idاز دستورالعمل هایinvoke-virtual/rangeوinvoke-direct/rangeباید متعلق به یک کلاس باشد (نه یک رابط). در پرونده های DEX قبل از نسخه037، باید در مورد دستورالعمل هایinvoke-super/rangeوinvoke-static/rangeیکسان باشد. | 
محدودیت های ساختاری Bytecode
محدودیت های ساختاری محدودیت در روابط بین چندین عنصر بایت کد است. آنها معمولاً بدون استفاده از تکنیک های کنترل یا تجزیه و تحلیل جریان داده ها قابل بررسی نیستند.
| شناسه | توضیحات | 
|---|---|
| B1 | تعداد و انواع آرگومان ها (ثبت ها و مقادیر فوری) همیشه باید با دستورالعمل مطابقت داشته باشند. | 
| B2 | جفت های ثبت هرگز نباید شکسته شوند. | 
| B3 | قبل از خواندن ، یک رجیستر (یا جفت) باید ابتدا اختصاص داده شود. | 
| B4 | یک دستورالعمل invoke-directباید یک نمونه اولیه یا یک روش را فقط در کلاس فعلی یا یکی از ابرقهرمانان آن فراخوانی کند. | 
| B5 | یک نمونه اولیه نمونه فقط باید در یک نمونه غیرقانونی استفاده شود. | 
| B6 | روشهای نمونه فقط در مواردی مورد استفاده قرار می گیرند و قسمتهای نمونه فقط در نمونه های اولیه از قبل قابل دسترسی هستند. | 
| B7 | در صورتی که همان دستورالعمل new-instanceجدید قبل از شروع نمونه اجرا شود ، رجیستری که نتیجه یک دستورالعملnew-instanceرا در اختیار دارد ، نباید استفاده شود. | 
| B8 | قبل از دسترسی به اعضای نمونه ، یک نمونه اولیه نمونه باید با یک نمونه اولیه دیگر (همان کلاس یا ابر کلاس) تماس بگیرد. استثنائات زمینه های نمونه غیر متعهد هستند که می توانند قبل از فراخوانی یک ابتکار عمل دیگری و به طور کلی کلاس Objectاختصاص دهند. | 
| B9 | تمام آرگومان های روش واقعی باید با استدلال رسمی مربوطه سازگار باشند. | 
| B10 | برای هر فراخوانی روش نمونه ، نمونه واقعی باید با کلاس یا رابط مشخص شده در دستورالعمل سازگار باشد. | 
| B11 | یک دستورالعمل return<kind>باید با نوع بازگشت روش آن مطابقت داشته باشد. | 
| B12 | هنگام دسترسی به اعضای حفاظت شده یک ابرقهرمان ، نوع واقعی نمونه ای که در آن قابل دسترسی است باید یا کلاس فعلی یا یکی از زیر کلاس های آن باشد. | 
| B13 | نوع مقداری که در یک قسمت استاتیک ذخیره شده است باید سازگار با یا قابل تبدیل به نوع قسمت باشد. | 
| B14 | نوع مقدار ذخیره شده در یک قسمت باید سازگار با واگذاری یا قابل تبدیل به نوع قسمت باشد. | 
| B15 | نوع هر مقدار ذخیره شده در یک آرایه باید با نوع مؤلفه آرایه سازگار باشد. | 
| B16 | Aعمل یک دستورالعملthrowباید باjava.lang.Throwableسازگار باشد. | 
| B17 | آخرین دستورالعمل قابل دسترسی یک روش باید یا به gotoیا شاخه ،returnیا دستورالعملthrowباشد. نمی توان آرایهinsnsدر پایین گذاشت. | 
| B18 | تا زمانی که توسط برخی دستورالعمل های دیگر مجدداً تعیین نشده باشد ، نیمی از یک جفت ثبت نام قبلی ممکن است خوانده نشود (نامعتبر تلقی می شود). | 
| B19 | یک دستورالعمل move-result<kind>باید بلافاصله (در آرایهinsns) توسط یک دستورالعملinvoke-<kind>انجام شود. تنها استثناء دستورالعملmove-result-objectاست که ممکن است قبل از یک دستورالعملfilled-new-arrayنیز انجام شود. | 
| B20 | یک دستورالعمل move-result<kind>باید بلافاصله (در جریان کنترل واقعی) با یک دستورالعملreturn-<kind>(نباید به آن پرید). تنها استثناء دستورالعملmove-result-objectاست که ممکن است قبل از یک دستورالعملfilled-new-arrayنیز انجام شود. | 
| B21 | یک دستورالعمل move-exceptionفقط باید به عنوان اولین دستورالعمل در یک کنترل کننده استثنا ظاهر شود. | 
| B22 | packed-switch-data،sparse-switch-data، وfill-array-dataرا با جریان کنترل قابل دسترسی نیستند. |