1 votos

Manejo de archivos Android y DEX en tiempo de ejecución

Estoy tratando de entender algunas cosas sobre cómo se manejan los archivos dex en Android.

Lo que sé es que un APK incluye un archivo dex, el sistema lo obtiene, lo optimiza en el momento de la instalación, y guarda el archivo ODEX resultante (dex optimizado) en /data/dalvik-cache/miArchivoOdex y luego ejecuta la aplicación desde allí.

¿Realmente funciona así?

¿Qué sucede cuando un archivo dex descarga y abre un nuevo archivo dex desde internet? ¿se optimiza también?

Además - el sistema, según mi conocimiento, mantiene el APK original, ¿verdad? Creo que se guarda en /data/app/miAPK-1.apk. ¿Se utiliza de alguna manera por el sistema? ¿Cuándo?

¿Se puede forzar de alguna manera la regeneración manual del archivo odex a partir del archivo APK almacenado después de la instalación?

0 votos

Así como el archivo .class (código de bytes) se ejecuta en JRE en sistemas de escritorio. Android tiene Dalvik o ART que entiende el código de bytes pero en formato .dex. Para Android, el archivo .class se convierte en un archivo .dex y luego se forma el apk.

2voto

Izzy Puntos 45544

Para obtener información general, es posible que desee consultar la etiqueta odex tag-wiki y el tag-wiki para la etiqueta dalvik. Pero su pregunta incluso abarca algunas partes que no están contenidas allí, y solo ahora me di cuenta de que de hecho todos los archivos .apk parecen incluir archivos .dex (siempre pensé que solo las aplicaciones "odexed" hacían eso), y parece que tienes razón en lo que significa la "O", al menos tiene mucho sentido. Así que perdóname, ¡no soy un desarrollador! :)

Pero aún así, podría ser capaz de responder al menos una parte de tu pregunta.

Sí, tu descripción parece coincidir con cómo funciona (hasta el signo de interrogación, al menos). Pero, según mi conocimiento, ninguna aplicación debería descargar e instalar archivos .dex por separado. Si no se está ejecutando con permisos de root, incluso sería difícil (ya que la aplicación no podría escribir en /data/dalvik-cache, careciendo de los permisos de archivo). Por lo tanto, podemos omitir la segunda parte, ya que, según la lógica de Aristóteles, a partir de una suposición incorrecta se podría deducir cualquier cosa :)

Segundo: Sí, el sistema mantiene los archivos .apk. Si su dispositivo tiene instalado un Recovery Personalizado, podría borrar manualmente la memoria caché de Dalvik desde allí, lo que obligaría al sistema Android a regenerarlo en el próximo arranque. Básicamente, esto también se hace para las aplicaciones del sistema (los archivos .apk se encuentran en /system/apps para esos, y por lo tanto sobreviven a un restablecimiento de fábrica), especialmente cuando se realiza un restablecimiento de fábrica.

Tercero: Oh, ya respondido. Sí, borrando la memoria caché de Dalvik.

0 votos

Gracias por tu respuesta. Sin embargo, hay un par de puntos: Borrar la caché de dalvik es un punto válido, pero ¿eso solo lo puede hacer el usuario en teléfonos con root, verdad? ¿Hay algún caso en el que un dispositivo sin root necesite borrar la caché, o puede el usuario forzar al sistema a hacerlo en teléfonos sin root? También, sobre tu otro punto: Las aplicaciones tienen la capacidad de descargar y ejecutar archivos .dex desde internet en tiempo de ejecución, aunque no estoy seguro de poder instalarlos. Supongo que podrían descargarse a una ubicación temporal en /data/data/myapp/files y ejecutarse desde allí cada vez.

0 votos

Dalvik-Wipe: sí, correcto. Menú de Recuperación Personalizado, o root a través de terminal. En dispositivos no rooteados: solo a través de restablecimiento de fábrica, que yo sepa. .dex: sí, pueden descargarlos, pero no ejecutarlos directamente, que yo sepa (ver respuesta de yjarabi). No pueden colocarlos en la caché de Dalvik, pero sí en cualquier lugar al que tengan acceso (sus propios directorios debajo de /data/data/, /data/local, etc.).

1voto

Daniel Moura Puntos 4298

> ¿Es realmente así como funciona?

Sí, creo que funciona de esa manera.

> ¿Qué sucede cuando un archivo dex descarga y abre un nuevo archivo dex desde internet? ¿Está optimizado también?

Creo que no es posible que una aplicación abra directamente un archivo dex.

> Además - el sistema, según mi conocimiento, mantiene el APK original, ¿verdad? Creo que se guarda en /data/app/myAPK-1.apk. ¿Se utiliza de alguna manera por parte del sistema? ¿Cuándo?

Sí, el archivo APK contiene todos los activos y recursos necesarios para la aplicación cuando se ejecuta. Por lo tanto, como desarrollador de Android, estoy bastante seguro de que el archivo apk se utiliza cada vez que se ejecuta una aplicación.

> ¿Puedes de alguna manera forzar manualmente la regeneración del archivo odex a partir del archivo APK almacenado después de la instalación?

Sí, si borras la carpeta dalvik-cache manualmente (tu dispositivo debe tener permisos de ROOT), entonces el sistema regenera los archivos odex necesarios cuando ejecutas aplicaciones. Algunas aplicaciones, como Titanium Backup, tienen una opción para borrar la caché dalvik. Además, recuerdo que había la misma opción en el menú de recuperación de mi dispositivo.

0 votos

Acerca de la segunda pregunta, las aplicaciones pueden ejecutar archivos dex, utilizando ClassLoader. Un ejemplo de una aplicación que lo hace es "DevAppsDirect". Una razón para tener dicha funcionalidad son los plugins. De todos modos, me gustaría preguntar algo también: ¿las aplicaciones tienen otros archivos similares a los archivos dex? Además, ahora que Android Lollipop está a punto de estar disponible, ¿seguirán existiendo? ¿qué los reemplazará y dónde se encontrarán sus reemplazos? Algunos afirmaban que habría reemplazos y que generalmente serían más grandes. ¿Es cierto?

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X