Apa itu file .dex di Android?

193

Saya punya beberapa pertanyaan tentang file dex

  • Apa itu dexfile di Android?
  • Bagaimana dex bekerja untuk Android?
  • Bagaimana mereka digunakan dalam men-debug aplikasi Android?
  • Apakah mereka mirip dengan file kelas java?

Saya memerlukan informasi spesifik tolong bantu tentang ini dan semua contoh nyata dipersilahkan!

Nikunj Patel
sumber
tlg
cara menjalankannya di perangkat: stackoverflow.com/questions/10199863/…
Ciro Santilli 郝海东 冠状 病 六四 事件 事件 法轮功

Jawaban:

226

Tentang File .dex:

Salah satu fitur yang paling luar biasa dari Dalvik Virtual Machine(pekerja keras di bawah sistem Android) adalah bahwa ia tidak menggunakan bytecode Java. Sebaliknya, format homegrown yang disebut DEX diperkenalkan dan bahkan instruksi bytecode tidak sama dengan instruksi bytecode Java.

Compiled Android application code file.

Program Android dikompilasi menjadi .dexfile (Dalvik Executable), yang pada gilirannya akan di-zip menjadi satu .apkfile di perangkat. .dexfile dapat dibuat dengan secara otomatis menerjemahkan aplikasi yang dikompilasi yang ditulis dalam bahasa pemrograman Java.

Format file Dex:

 1. File Header
 2. String Table
 3. Class List
 4. Field Table
 5. Method Table
 6. Class Definition Table
 7. Field List
 8. Method List
 9. Code Header
10. Local Variable List

Android memiliki dokumentasi di Dalvik Executable Format( file .dex ). Anda dapat mengetahui lebih lanjut di dokumen resmi: Dex File Format

.dex file mirip dengan file kelas java, tetapi mereka dijalankan di bawah Dalkvik Virtual Machine (DVM) pada versi Android yang lebih lama, dan dikompilasi pada waktu instal pada perangkat ke kode asli dengan ART pada versi Android yang lebih baru.

Anda dapat decompile.dex menggunakan dexdumpalat yang disediakan di android-SDK.

Ada juga beberapa Teknik Reverse Engineering untuk membuat jar fileatau java class filedari a.dex file.

pengguna370305
sumber
File jar saya berisi beberapa xml di folder aset. Saya ingin ini menjadi bagian dari .dex Ada ide bagaimana menerapkan ini?
AndroidGuy
@AndroidGuy - File jar tidak mengandung paket sumber daya Android (/ aset) apa pun yang Anda harus gunakan Paket Perpustakaan Android untuk ini.
user370305
Bagaimana cara kerjanya pada ART, di Android Lollipop? File mana yang digunakan di sana, dan di jalur mana? Beberapa mengatakan akan membutuhkan lebih banyak ruang. Apakah itu benar Jika demikian, bagaimana bisa? Maksudku, kode asli sepertinya selalu jauh lebih kecil dari byte-code, dan file dex mirip dengan byte-code dalam hal cara kerjanya.
pengembang android
Satu hal penting yang perlu diperhatikan adalah bahwa dexdumpitu bukan dekompiler tetapi disassembler
genghiskhan
90
.dex file

File kode aplikasi Android yang dikompilasi.

Program Android dikompilasi menjadi file .dex (Dalvik Executable), yang pada gilirannya akan dizip menjadi file .apk tunggal pada perangkat. File .dex dapat dibuat secara otomatis oleh Android, dengan menerjemahkan aplikasi yang dikompilasi yang ditulis dalam bahasa pemrograman Java.

Vineet Shukla
sumber
2
File jar saya berisi beberapa xml di folder aset. Saya ingin ini menjadi bagian dari .dex Ada ide bagaimana menerapkan ini?
AndroidGuy
87

dex file adalah file yang dieksekusi di Dalvik VM.

Dalvik VM mencakup beberapa fitur untuk pengoptimalan kinerja, verifikasi, dan pemantauan, salah satunya adalah Dalvik Executable (DEX) .

Kode sumber Java dikompilasi oleh kompiler Java ke dalam .classfile. Kemudian alat dx(dexer), bagian dari Android SDK memproses .classfile menjadi format file yang disebut DEXyang berisi kode byte Dalvik. The dxalat menghilangkan semua informasi yang berlebihan yang hadir di kelas. Di DEXsemua kelas aplikasi dikemas ke dalam satu file. Tabel berikut menyediakan perbandingan antara ukuran kode untuk file jar JVM dan file yang diproses olehdex alat.

Tabel membandingkan ukuran kode untuk pustaka sistem, aplikasi browser web, dan aplikasi tujuan umum (aplikasi jam alarm). Dalam semua kasus, alat dex mengurangi ukuran kode lebih dari 50%.

masukkan deskripsi gambar di sini

Dalam lingkungan Java standar, setiap kelas dalam kode Java menghasilkan satu .classfile. Itu berarti, jika file kode sumber Java memiliki satu kelas publik dan dua kelas anonim, katakanlah untuk penanganan acara, maka kompiler java akan membuat total tiga .classfile.

Langkah kompilasi sama pada platform Android, sehingga menghasilkan banyak .classfile. Tetapi setelah .classfile dihasilkan, alat "dx" digunakan untuk mengubah semua .classfile menjadi file tunggal .dex, atau Dalvik Dapat Dieksekusi. Ini adalah .dexfile yang dieksekusi di Dalvik VM. The .dexfile telah dioptimalkan untuk penggunaan memori dan desain terutama didorong oleh berbagi data.

Sufiyan Ghori
sumber
18
Info bagus Hanya satu hal untuk ditunjukkan. Terkadang akan ada beberapa file dex karena batasan nomor instruksi instruksi pemanggilan. Batas ini adalah metode 65k. Dalam hal ini kode Anda tidak akan berada di dalam satu file tetapi dalam 2 atau lebih tetapi semua yang lain masih berlaku. Juga karena pemuatan kelas dinamis juga tersedia Anda dapat memuat kode (lagi dalam bentuk dexed) dari file dan dengan demikian kode akan berada di dalam beberapa file dex.
Igor Čordaš