¿Qué son los archivos ODEX en Android?


Respuestas:


85

El artículo del blog es en su mayoría correcto, pero no completo. Para tener una comprensión completa de lo que hace un archivo odex, debe comprender un poco cómo funcionan los archivos de aplicación (APK).

Las aplicaciones son básicamente archivos ZIP glorificados. El código java se almacena en un archivo llamado classes.dex y este archivo es analizado por Dalvik JVM y un caché del archivo classes.dex procesado se almacena en el caché Dalvik del teléfono.

Un odex es básicamente una versión preprocesada del classes.dex de una aplicación que está lista para ejecutarse para Dalvik. Cuando una aplicación se indexa, el archivo classes.dex se elimina del archivo APK y no escribe nada en la caché de Dalvik. Una aplicación que no está indexada termina con 2 copias del archivo classes.dex: la empaquetada en el APK y la procesada en la caché de Dalvik. También tarda un poco más en iniciarse la primera vez, ya que Dalvik tiene que extraer y procesar el archivo classes.dex.

Si está creando una ROM personalizada, es una muy buena idea odexar los archivos JAR de su marco y las aplicaciones de stock para maximizar el espacio de almacenamiento interno para las aplicaciones instaladas por el usuario. Si desea un tema, simplemente deodex -> aplique su tema -> reodex -> lanzamiento.

Para realmente deodex, use small y baksmali:

https://github.com/JesusFreke/smali/wiki/DeodexInstructions


¿Puede compartirnos cómo podemos reodexar un archivo apk?
Basher51

23

Este artículo del blog explica los aspectos internos de los archivos ODEX:

¿QUÉ ES UN ARCHIVO ODEX?

En el sistema de archivos de Android, las aplicaciones vienen en paquetes con la extensión .apk. Estos paquetes de aplicaciones, o APK, contienen determinados archivos .odex cuya supuesta función es ahorrar espacio. Estos archivos 'odex' son en realidad colecciones de partes de una aplicación que se optimizan antes de arrancar. Hacerlo acelera el proceso de arranque, ya que precarga parte de una aplicación. Por otro lado, también dificulta la piratería de esas aplicaciones porque una parte de la codificación ya se ha extraído a otra ubicación antes de la ejecución.


Si espero que mi aplicación tenga la misma función (las aplicaciones se ejecutan en odex, no en APK), ¿cómo hacerlo?
user1253435

¡Deberías obtener un menos! El dalvik no optimiza el tiempo de arranque. El código está optimizado como en un compilador de lenguaje de alto nivel a nivel inferior, solo que en este caso el código para dalvik es casi una traducción a código de máquina. Esa es la razón por la que podrías crear una aplicación desde C ++, no solo desde java.
cox

¿Estás seguro de eso APKs contain certain .odex files?
Amir Rezazadeh

3

ARTE

De acuerdo con los documentos: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure un .odexarchivo:

contiene código compilado AOT para métodos en el APK.

Además, parecen ser bibliotecas compartidas habituales, ya que si obtiene alguna aplicación y comprueba:

file /data/app/com.android.appname-*/oat/arm64/base.odex

dice:

base.odex: ELF shared object, 64-bit LSB arm64, stripped

y aarch64-linux-gnu-objdump -d base.odexparece funcionar y dar un desmontaje significativo (pero también algunas secciones de basura).

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.