Що таке .dex файли в Android?


193

У мене є питання щодо файлів dex

  • Що таке dexфайл в Android?
  • Як працює dex для Android?
  • Як вони використовуються при налагодженні програми для Android?
  • Чи схожі вони з файлами класу java?

Мені потрібна конкретна інформація, будь ласка, допоможіть з цього питання, і будь-які реальні приклади вітаються!


плз Бачив це посилання stackoverflow.com/questions/1249973 / ...
Gensheriff

Відповіді:


226

Про файл .dex:

Однією з найбільш чудових особливостей Dalvik Virtual Machine(робочий коник в системі Android) є те, що він не використовує байт-код Java. Натомість було введено домашній формат під назвою DEX, і навіть інструкції байт-коду не такі, як інструкції по байт-кодам Java.

Compiled Android application code file.

Програми Android компілюються у .dexфайли (виконується Dalvik Executable), які, в свою чергу, перекочуються в один .apkфайл на пристрої. .dexФайли можна створити автоматичним перекладом зібраних програм, написаних мовою програмування Java.

Формат файлу 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 має документацію на Dalvik Executable Format( .dex файли). Ви можете дізнатися більше на офіційних документах: Формат файлів Dex

.dex Файли схожі на файли класу java, але вони запускалися під віртуальною машиною Dalkvik (DVM) на старих версіях Android і збиралися під час встановлення на пристрої до нативного коду з ART на нових версіях Android.

Ви можете decompile.dex використовувати dexdumpінструмент, який надається в android-sdk.

Існує також кілька методів зворотної інженерії для створення файлу jar fileабо java class fileз нього .dex.


Мій файл jar містить деяку кількість xml у папці активів. Я хочу, щоб це було частиною .dex Будь-яка ідея, як це реалізувати?
AndroidGuy

@AndroidGuy - файл Jar не містить жодного пакету ресурсів (/ активів) для Android, для цього вам потрібно використовувати Пакет бібліотеки Android.
user370305

Як це працює на ART, на Android Lollipop? Які файли використовуються там і в якому шляху? Деякі казали, що це займе більше місця. Це правда? Якщо так, то як? Я маю на увазі, що нативний код, здається, завжди набагато менший, ніж байт-код, а файли dex за формою роботи схожі на байт-код.
андроїд розробник

Важливо зазначити, що dexdumpце не декомпілятор, а демонтажник
genghiskhan

90
.dex file

Скомпільований код програми Android.

Програми Android компілюються у файли .dex (Dalvik Executable), які в свою чергу перекочуються в єдиний .apk-файл на пристрої. .dex файли можна створити автоматично Android, переклавши складені програми, написані мовою програмування Java.


2
Мій файл jar містить деяку кількість xml у папці активів. Я хочу, щоб це було частиною .dex Будь-яка ідея, як це реалізувати?
AndroidGuy

87

dex file - це файл, який виконується в DalM VM.

Dalvik VM включає декілька функцій для оптимізації, перевірки та моніторингу продуктивності, однією з яких є Dalvik Executable (DEX) .

Вихідний код Java збирається компілятором Java у .classфайли. Потім інструмент dx(dexer), частина Android SDK обробляє .classфайли у формат файлу, який називається, DEXякий містить байт-код Dalvik. dxІнструмент усуває всі надлишкову інформацію, яка присутня в класах. У DEXвсіх класах програми пакуються в один файл. У наступній таблиці наведено порівняння між розмірами коду для файлів jar JVM та файлами, обробленими dexінструментом.

У таблиці порівнюються розміри коду для системних бібліотек, програм веб-браузера та програми загального призначення (додаток будильника). У всіх випадках інструмент dex зменшив розмір коду більш ніж на 50%.

введіть тут опис зображення

У стандартних середовищах Java кожен клас коду Java приводить до одного .classфайлу. Це означає, що якщо у файлі вихідного коду Java є один публічний клас та два анонімні класи, скажімо, для обробки подій, тоді компілятор Java створить три.class файли.

Крок компіляції однаковий на платформі Android, завдяки чому утворюється кілька .classфайлів. Але після створення .classфайлів інструмент "dx" використовується для перетворення всіх .classфайлів в єдиний .dex, або Dalvik Executable, файл. Це .dexфайл, який виконується в DalM VM. .dexФайл був оптимізований для використання пам'яті і дизайну в основному за рахунок спільного використання даних.


18
Гарна інформація. Тільки одне, що слід зазначити. Іноді буде кілька файлів dex через обмеження кількості інструкцій виклику методу. Ця межа становить 65 к методів. У такому випадку ваш код буде знаходитися не в одному файлі, а в 2 і більше, але все ще діє. Оскільки динамічне завантаження класів також доступне, ви можете завантажувати код (знову в декларованому вигляді) з файлів, і таким чином код буде знаходитись у декількох файлах Dex.
Ігор Чордаш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.