File .dex adalah format transpor untuk bytecode Dalvik. Ada batasan sintaksis dan semantik tertentu agar file menjadi file .dex yang valid, dan runtime diperlukan untuk hanya mendukung file .dex yang valid.
Batasan integritas .dex umum
Batasan integritas umum berkaitan dengan struktur file .dex yang lebih besar, seperti yang dijelaskan secara mendetail dalam format
    .dex.
| ID | Deskripsi | 
|---|---|
| G1 | 
          Nomor magic file .dex harus
          dex\n035\0 untuk versi 35, atau serupa untuk versi yang lebih baru.
         | 
      
| G2 | 
          Checksum harus berupa checksum Adler-32 dari seluruh konten file
          kecuali kolom magic dan checksum.
         | 
      
| G3 | 
          Tanda tangan harus berupa hash SHA-1 dari seluruh konten file kecuali magic,
          checksum, dan signature.
         | 
      
| G4 | 
           
 
  | 
      
| G5 | 
           
 
  | 
      
| G6 | 
          endian_tag harus memiliki nilai:
          ENDIAN_CONSTANT atau REVERSE_ENDIAN_CONSTANT
         | 
      
| G7 | 
           Untuk setiap bagian  
            Kolom   | 
      
| G8 | 
          Semua kolom offset di header kecuali map_off harus sejajar dengan empat byte.
         | 
      
| G9 | 
          Kolom map_off harus nol atau mengarah ke
          bagian data. Dalam kasus terakhir, bagian data harus ada.
         | 
      
| G10 | 
          Tidak ada bagian link, string_ids,
          type_ids, proto_ids, field_ids,
          method_ids, class_defs, dan data
          yang boleh tumpang-tindih satu sama lain atau dengan header.
         | 
      
| G11 | Jika peta ada, setiap entri peta harus memiliki jenis yang valid. Setiap jenis dapat muncul maksimal sekali. | 
| G12 | 
          Jika peta ada, setiap entri peta harus memiliki offset dan ukuran yang bukan nol. Offset harus mengarah ke bagian file yang sesuai (yaitu
          string_id_item harus mengarah ke bagian string_ids) dan ukuran item eksplisit atau
          implisit harus cocok dengan konten dan ukuran sebenarnya
          bagian.
         | 
      
| G13 | 
          Jika peta ada, offset entri peta n+1 harus lebih besar atau
          sama dengan offset entri peta n plus than size of map entry n. Hal ini menyiratkan
          entri yang tidak tumpang-tindih dan pengurutan rendah ke tinggi.
         | 
      
| G14 | 
          Jenis entri berikut harus memiliki offset yang
          sejajar dengan empat byte: 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 | 
           Untuk setiap  Untuk setiap   Untuk   | 
      
| G16 | 
          Untuk setiap type_id_item, kolom descriptor_idx harus berisi referensi yang valid ke daftar string_ids. String yang dirujuk harus berupa deskripsi jenis yang valid.
         | 
      
| G17 | 
          Untuk setiap proto_id_item, kolom shorty_idx harus berisi referensi yang valid ke daftar string_ids. String yang dirujuk harus berupa
          deskripsi singkat yang valid. Selain itu, kolom return_type_idx harus berupa indeks yang valid ke
          bagian type_ids, dan kolom parameters_off harus berupa nol atau
          offset yang valid yang mengarah ke bagian data. Jika bukan nol, daftar parameter
          tidak boleh berisi entri yang tidak valid.
         | 
      
| G18 | 
          Untuk setiap field_id_item, kolom class_idx dan type_idx harus
          berupa indeks yang valid ke dalam daftar type_ids. Entri yang dirujuk oleh class_idx
          harus berupa jenis referensi non-array. Selain itu, kolom name_idx harus berupa
          referensi yang valid ke bagian string_ids, dan konten entri
          yang dirujuk harus sesuai dengan spesifikasi MemberName.
         | 
      
| G19 | 
          Untuk setiap method_id_item, kolom class_idx harus berupa indeks yang valid
          ke bagian type_ids, dan entri yang dirujuk harus berupa jenis referensi
          non-array. Kolom proto_id harus berupa referensi yang valid ke daftar
          proto_ids. Kolom name_idx harus berupa referensi yang valid ke bagian string_ids,
          dan konten entri yang dirujuk harus sesuai dengan spesifikasi
          MemberName.
         | 
      
| G20 | 
          Untuk setiap field_id_item, kolom class_idx harus berupa indeks yang valid
          ke dalam daftar type_ids. Entri yang dirujuk harus berupa jenis referensi
          non-array.
         | 
      
Batasan bytecode statis
Batasan statis adalah batasan pada setiap elemen bytecode. Biasanya, hal ini dapat diperiksa tanpa menggunakan teknik kontrol atau analisis alur data.
| ID | Deskripsi | 
|---|---|
| A1 | 
          Array insns tidak boleh kosong.
         | 
      
| A2 | 
          Opcode pertama dalam array insns harus memiliki indeks nol.
         | 
      
| A3 | 
          Array insns hanya boleh berisi opcode Dalvik yang valid.
         | 
      
| A4 | 
          Indeks petunjuk n+1 harus sama dengan indeks
          petunjuk n ditambah panjang petunjuk
          n, dengan mempertimbangkan kemungkinan operand.
         | 
      
| A5 | 
          Petunjuk terakhir dalam array insns harus diakhiri pada indeks
          insns_size-1.
         | 
      
| A6 | 
          Semua target goto dan if-<kind> harus
          berupa opcode dalam metode yang sama.
         | 
      
| A7 | 
          Semua target petunjuk packed-switch harus berupa opcode dalam metode yang sama. Ukuran dan daftar target
          harus konsisten.
         | 
      
| A8 | 
          Semua target petunjuk sparse-switch harus berupa opcode dalam metode yang sama. Tabel yang sesuai harus konsisten dan diurutkan dari rendah ke tinggi.
         | 
      
| A9 | 
          Operand B dari petunjuk const-string dan
          const-string/jumbo harus berupa indeks yang valid
          ke dalam kumpulan konstanta string.
         | 
      
| A10 | 
          Operand C dari petunjuk iget<kind> dan
          iput<kind> harus berupa indeks yang valid ke dalam
          kumpulan konstanta kolom. Entri yang dirujuk harus mewakili
          kolom instance.
         | 
      
| A11 | 
          Operand C dari petunjuk sget<kind> dan
          sput<kind> harus berupa indeks yang valid ke dalam
          kumpulan konstanta kolom. Entri yang dirujuk harus mewakili kolom statis.
         | 
      
| A12 | 
          Operand C dari petunjuk invoke-virtual,
          invoke-super, invoke-direct, dan
          invoke-static harus berupa indeks yang valid ke dalam
          kumpulan konstanta metode.
         | 
      
| A13 | 
          Operand B dari petunjuk invoke-virtual/range,
          invoke-super/range, invoke-direct/range, dan
          invoke-static/range harus berupa indeks yang valid
          ke dalam kumpulan konstanta metode.
         | 
      
| A14 | 
          Metode yang namanya diawali dengan '<' hanya boleh dipanggil
          secara implisit oleh VM, bukan oleh kode yang berasal dari file .dex. Satu-satunya pengecualian adalah penginisialisasi instance, yang dapat dipanggil oleh invoke-direct.
         | 
      
| A15 | 
          Operand C dari petunjuk
          invoke-interface harus berupa indeks yang valid ke dalam kumpulan konstanta metode. method_id
          yang dirujuk harus merupakan bagian dari antarmuka (bukan
          class).
         | 
      
| A16 | 
          Operand B dari petunjuk
          invoke-interface/range harus berupa indeks yang valid ke dalam kumpulan konstanta metode.
          method_id yang dirujuk harus merupakan bagian dari antarmuka (bukan
          class).
         | 
      
| A17 | 
          Operand B dari petunjuk const-class,
          check-cast, new-instance, dan
          filled-new-array/range harus berupa indeks yang valid
          ke dalam kumpulan konstanta jenis.
         | 
      
| A18 | 
          Operand C dari petunjuk instance-of,
          new-array, dan filled-new-array
          harus berupa indeks yang valid ke dalam kumpulan konstanta jenis.
         | 
      
| A19 | 
          Dimensi array yang dibuat oleh petunjuk new-array
          harus kurang dari 256.
         | 
      
| A20 | 
          Petunjuk new tidak boleh merujuk ke class array, antarmuka, atau class abstrak.
         | 
      
| A21 | 
          Jenis yang dirujuk oleh petunjuk new-array harus
          berupa jenis non-referensi yang valid.
         | 
      
| A22 | 
          Semua register yang dirujuk oleh petunjuk dalam mode lebar tunggal
          (non-pasangan) harus valid untuk metode saat ini. Artinya,
          indeksnya harus non-negatif dan lebih kecil dari
          registers_size.
         | 
      
| A23 | 
          Semua register yang dirujuk oleh petunjuk dalam mode lebar ganda (pasangan)
          harus valid untuk metode saat ini. Artinya, indeksnya
          harus non-negatif dan lebih kecil dari registers_size-1.
         | 
      
| A24 | 
          Operand method_id dari petunjuk invoke-virtual
          dan invoke-direct harus termasuk dalam class
          (bukan antarmuka). Dalam file Dex sebelum versi 037,
          hal yang sama harus berlaku untuk petunjuk invoke-super dan
          invoke-static.
         | 
      
| A25 | 
          Operand method_id dari
          petunjuk invoke-virtual/range dan
          invoke-direct/range harus termasuk dalam class
          (bukan antarmuka). Dalam file Dex sebelum versi 037,
          hal yang sama harus berlaku untuk petunjuk invoke-super/range dan
          invoke-static/range.
         | 
      
Batasan bytecode struktural
Batasan struktural adalah batasan pada hubungan antara beberapa elemen bytecode. Biasanya, hal ini tidak dapat diperiksa tanpa menggunakan teknik analisis alur data atau kontrol.
| ID | Deskripsi | 
|---|---|
| B1 | Jumlah dan jenis argumen (register dan nilai langsung) harus selalu cocok dengan petunjuk. | 
| B2 | Pasangan register tidak boleh dipecah. | 
| B3 | Register (atau pasangan) harus ditetapkan terlebih dahulu sebelum dapat dibaca. | 
| B4 | 
          Petunjuk invoke-direct hanya boleh memanggil penginisialisasi
          instance atau metode di class saat ini atau salah satu
          superclass-nya.
         | 
      
| B5 | Penginisialisasi instance hanya boleh dipanggil pada instance yang belum diinisialisasi. | 
| B6 | Metode instance hanya dapat dipanggil di dan kolom instance hanya dapat diakses di instance yang telah diinisialisasi. | 
| B7 | 
          Register yang menyimpan hasil petunjuk new-instance
          tidak boleh digunakan jika petunjuk
          new-instance yang sama dieksekusi lagi sebelum
          instance diinisialisasi.
         | 
      
| B8 | 
           Penginisialisasi instance harus memanggil penginisialisasi instance lain (class atau
           superclass yang sama) sebelum anggota instance dapat diakses.
           Pengecualian adalah kolom instance yang tidak diwarisi, yang dapat ditetapkan
           sebelum memanggil penginisialisasi lain, dan class Object
           secara umum.
         | 
      
| B9 | Semua argumen metode yang sebenarnya harus kompatibel dengan penetapan argumen formalnya masing-masing. | 
| B10 | Untuk setiap pemanggilan metode instance, instance sebenarnya harus kompatibel dengan tugas dengan class atau antarmuka yang ditentukan dalam petunjuk. | 
| B11 | 
           Petunjuk return<kind> harus cocok dengan jenis nilai yang ditampilkan metodenya.
         | 
      
| B12 | Saat mengakses anggota superclass yang dilindungi, jenis instance yang sebenarnya diakses harus berupa class saat ini atau salah satu subclass-nya. | 
| B13 | Jenis nilai yang disimpan ke dalam kolom statis harus kompatibel dengan penetapan atau dapat dikonversi ke jenis kolom. | 
| B14 | Jenis nilai yang disimpan ke dalam kolom harus kompatibel dengan penetapan atau dapat dikonversi ke jenis kolom. | 
| B15 | Jenis setiap nilai yang disimpan ke dalam array harus kompatibel dengan penetapan jenis komponen array. | 
| B16 | 
           Operand A dari petunjuk throw harus
           kompatibel dengan penetapan java.lang.Throwable.
         | 
      
| B17 | 
           Instruksi terakhir yang dapat dijangkau dari suatu metode harus berupa goto atau cabang
           mundur, return, atau
           throw. Array insns tidak boleh dibiarkan
           di bagian bawah.
         | 
      
| B18 | Setengah dari pasangan register sebelumnya yang tidak ditetapkan mungkin tidak dapat dibaca (dianggap tidak valid) hingga ditetapkan ulang oleh beberapa instruksi lain. | 
| B19 | 
          Petunjuk move-result<kind> harus segera
          didahului (dalam array insns) oleh
          petunjuk invoke-<kind>. Satu-satunya pengecualian adalah
          petunjuk move-result-object, yang juga dapat
          didahului oleh petunjuk filled-new-array.
         | 
      
| B20 | 
          Instruksi move-result<kind> harus segera
          didahului (dalam alur kontrol sebenarnya) oleh instruksi
          return-<kind> yang cocok (tidak boleh dilompati
          ke). Satu-satunya pengecualian adalah petunjuk move-result-object, yang juga dapat didahului oleh petunjuk filled-new-array.
         | 
      
| B21 | 
          Petunjuk move-exception hanya boleh muncul sebagai
          petunjuk pertama dalam pengendali pengecualian.
         | 
      
| B22 | 
          Pseudo-petunjuk packed-switch-data, sparse-switch-data,
          dan fill-array-data tidak boleh
          dapat dijangkau oleh alur kontrol.
         |