Después de algunas aplicaciones android
instaladas, encontré que cambiará al archivo odex
(no a apk
) en el teléfono inteligente. ¿Cómo sucede? ¿Quién puede enseñarme? Estoy muy interesado en eso.¿Qué son los archivos ODEX en Android?
Respuesta
This Blog article explica el funcionamiento interno de los archivos ODEX:
Qué es un archivo ODEX?
En el sistema de archivos Android, las aplicaciones vienen en paquetes con la extensión .apk. Estos paquetes de aplicaciones, o APK contienen ciertos archivos .odex cuya función supuesta es ahorrar espacio. Estos archivos 'odex' son en realidad colecciones de partes de una aplicación que son optimizadas antes del arranque. Hacerlo acelera el proceso de arranque, ya que precarga parte de una aplicación. Por otro lado, también hace que piratear esas aplicaciones sea difícil porque una parte de la codificación ya se ha extraído a otra ubicación antes de la ejecución.
The blog article es más 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 la 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 class.dex procesado se almacena en la caché Dalvik del teléfono.
Un odex es básicamente una versión preprocesada de las clases.dex de una aplicación lista para ejecución para Dalvik. Cuando una aplicación está odexed, classes.dex se elimina del archivo APK y no escribe nada en el caché de Dalvik. Una aplicación que no está odexed termina con 2 copias del archivo classes.dex, el empaquetado en el APK y el procesado en el caché Dalvik. También lleva un poco más de tiempo iniciarse por primera vez desde que Dalvik tiene que extraer y procesar el archivo classes.dex.
Si está compilando una ROM personalizada, es una muy buena idea odexar tanto sus archivos JAR de infraestructura como las aplicaciones de stock para maximizar el espacio de almacenamiento interno para las aplicaciones instaladas por el usuario. Si quieres el tema, simplemente deodex -> aplica tu tema -> reodex -> versión.
Para realmente deodex, utilizar pequeñas y baksmali:
¿Podría compartir la forma en que podemos volver a catalogar un archivo apk? – Basher51
ART
en el arte, .odex
archivos contienen:
contiene AOT código compilado para los métodos de la APK.
acuerdo con los documentos: http://web.archive.org/web/20170909233829/https://source.android.com/devices/tech/dalvik/configure
Además, parece ser bibliotecas compartidas regulares, ya que si se obtiene cualquier aplicación, y comprobar:
file /data/app/com.android.appname-*/oat/arm64/base.odex
que dice:
base.odex: ELF shared object, 64-bit LSB arm64, stripped
y aarch64-linux-gnu-objdump -d base.odex
parece funcionar y dar un poco de desmontaje significativo (aunque también algunas secció basura ns).
- 1. ¿Qué son los archivos .S?
- 2. ¿Qué son los archivos NDF?
- 3. ¿Qué son los archivos * .snap en eclipse?
- 4. ¿Qué son los archivos swz en Flash?
- 5. ¿Qué son los archivos derivados en Eclipse?
- 6. ¿Qué son los archivos .idb de MonoDevelop?
- 7. ¿Qué son los archivos .a y .so?
- 8. XFL - ¿Qué son los archivos ./bin/*.dat?
- 9. ¿Qué son los archivos .sln y .vcproj, y qué contienen?
- 10. git ¿Qué son los archivos sin seguimiento en un repositorio?
- 11. ¿Qué tan seguros son los archivos SQLite y SharedPreferences en Android?
- 12. ¿Qué son los filtros de intención en Android?
- 13. Las sumas de comprobación MD5 de los archivos APK de Android son diferentes. ¿Por qué?
- 14. ¿Qué tan portátiles son los archivos de haz Erlang?
- 15. ¿Qué idioma son los archivos conf de nginx?
- 16. ¿Qué son los archivos .datasource de Referencia de servicio WCF?
- 17. ¿Por qué los "Archivos de programa" son dos palabras?
- 18. ¿Qué formatos de archivos gráficos son compatibles con los navegadores?
- 19. ¿Qué son los archivos VSSVER.SCC y puedo eliminarlos?
- 20. ¿Para qué son los archivos js adicionales del framework Angular.js?
- 21. ¿Qué son los conceptos?
- 22. ¿Son inútiles los archivos .lib sin los archivos de encabezado?
- 23. ¿Qué son los RFC?
- 24. ¿Qué son los futuros?
- 25. ¿Qué son los "archivos de contenido" (en Visual Studio: Proyecto de instalación: Sistema de archivos
- 26. ¿Para qué son todos estos archivos * .FileListAbsolute.txt?
- 27. ¿Por qué los colores de los píxeles no son correctos en OpenGL ES 2.0 en Android?
- 28. ¿Por qué los archivos compilados de clase Java son más pequeños que los compilados en C?
- 29. ¿Todos los archivos JPEG son JFIF?
- 30. ¿Qué son los zócalos Async?
Si espero que mi aplicación tiene la misma función (Las aplicaciones funcionan en odex no APK), cómo hacerlo? – user1253435
¡Debe obtener un signo menos! El dalvik no optimiza el tiempo de arranque. El código está optimizado como en un compilador de un lenguaje de alto nivel a un nivel inferior, solo que en este caso el código para dalvik es casi un código de traducción a máquina. Esa es la razón por la que puedes crear una aplicación desde C++, no solo desde Java. – cox