¿Qué son los archivos .dex en Android?


193

Tengo algunas preguntas sobre los archivos dex

  • ¿Qué es un dexarchivo en Android?
  • ¿Cómo funciona dex para Android?
  • ¿Cómo se usan para depurar una aplicación de Android?
  • ¿Son similares a los archivos de clase de Java?

Necesito información específica, por favor ayuda en esto y cualquier ejemplo real es bienvenido.



Respuestas:


226

Sobre el archivo .dex:

Una de las características más notables de Dalvik Virtual Machine(el caballo de batalla bajo el sistema Android) es que no utiliza el código de bytes de Java. En cambio, se introdujo un formato local llamado DEX y ni siquiera las instrucciones de bytecode son las mismas que las de Java.

Compiled Android application code file.

Los programas de Android se compilan en .dexarchivos (Dalvik Executable), que a su vez se comprimen en un solo .apkarchivo en el dispositivo..dexLos archivos se pueden crear traduciendo automáticamente las aplicaciones compiladas escritas en el lenguaje de programación Java.

Formato de archivo 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 tiene documentación sobre los Dalvik Executable Format( archivos .dex ). Puede encontrar más información en los documentos oficiales: Formato de archivo Dex

.dex los archivos son similares a los archivos de clase java, pero se ejecutaron bajo la máquina virtual Dalkvik (DVM) en versiones anteriores de Android, y se compilaron en el momento de la instalación en el dispositivo con código nativo con ART en las versiones más recientes de Android.

Puede decompile.dex utilizando la dexdumpherramienta que se proporciona en android-sdk.

También hay algunas técnicas de ingeniería inversa para hacer un jar fileo java class filedesde un .dexarchivo.


Mi archivo jar contiene algunos xml en la carpeta de activos. Quiero que esto sea parte de .dex ¿Alguna idea de cómo implementar esto?
AndroidGuy

@AndroidGuy: el archivo Jar no contiene ningún paquete de recursos de Android (/ activo), debe usar el Paquete de biblioteca de Android para esto.
user370305

¿Cómo funciona en ART, en Android Lollipop? ¿Qué archivos se usan allí y en qué ruta? Algunos dijeron que tomará más espacio. ¿Es verdad? Si es así, ¿cómo es que? Quiero decir, el código nativo siempre parece ser mucho más pequeño que el código de bytes, y los archivos dex son similares al código de bytes en términos de cómo funciona.
Desarrollador de Android

Una cosa importante a tener en cuenta es que dexdumpno es un descompilador sino un desensamblador
genghiskhan

90
.dex file

Archivo compilado de código de aplicación de Android.

Los programas de Android se compilan en archivos .dex (Dalvik Executable), que a su vez se comprimen en un solo archivo .apk en el dispositivo. Android puede crear automáticamente archivos .dex traduciendo las aplicaciones compiladas escritas en el lenguaje de programación Java.


2
Mi archivo jar contiene algunos xml en la carpeta de activos. Quiero que esto sea parte de .dex ¿Alguna idea de cómo implementar esto?
AndroidGuy

87

dex El archivo es un archivo que se ejecuta en la máquina virtual Dalvik.

Dalvik VM incluye varias funciones para la optimización, verificación y supervisión del rendimiento, una de las cuales es Dalvik Executable (DEX) .

El compilador de Java compila el código fuente de Java en .classarchivos. Luego, la dxherramienta (dexer), parte del SDK de Android, procesa los .classarchivos en un formato de archivo llamado DEXque contiene el código de bytes Dalvik. La dxherramienta elimina toda la información redundante que está presente en las clases. En DEXtodas las clases de la aplicación se empaquetan en un solo archivo. La siguiente tabla proporciona una comparación entre los tamaños de código para los archivos jar JVM y los archivos procesados ​​pordex herramienta.

La tabla compara los tamaños de código para las bibliotecas del sistema, las aplicaciones del navegador web y una aplicación de uso general (aplicación de despertador). En todos los casos, la herramienta dex redujo el tamaño del código en más del 50%.

ingrese la descripción de la imagen aquí

En entornos Java estándar, cada clase en código Java da como resultado un .classarchivo. Eso significa que si el archivo de código fuente Java tiene una clase pública y dos clases anónimas, digamos para el manejo de eventos, entonces el compilador de Java creará un total de tres .classarchivos.

El paso de compilación es el mismo en la plataforma Android, lo que resulta en múltiples .classarchivos. Pero después de .classque se generan los archivos, la herramienta "dx" se usa para convertir todos los .classarchivos en un solo .dexarchivo, o Dalvik Executable. Es el .dexarchivo que se ejecuta en la máquina virtual Dalvik. El .dexarchivo se ha optimizado para el uso de memoria y el diseño se basa principalmente en el intercambio de datos.


18
Buena informacion Solo una cosa para señalar. A veces habrá múltiples archivos dex debido al límite de número de instrucciones de invocación del método. Este límite es de 65k métodos. En ese caso, su código no estará dentro de un solo archivo sino en 2 o más, pero todo lo demás se aplica aún. Además, dado que la carga dinámica de clases también está disponible, puede cargar el código (de nuevo en forma de texto) de los archivos y, por lo tanto, el código estará dentro de varios archivos de dex.
Igor Čordaš
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.