Yo tenía un poco verde este tema y me he informado un poco sobre ello... Al principio me preguntaba qué eran los archivos ODEX que estaban al lado de los APK en el directorio de aplicaciones de sistema (/system/app/) o porque si me cargaba alguna aplicacion de sistema luego me era imposible restaurarla o porque si entraba al APK y modificaba los png para cambiar el aspecto de la aplicaciion luego los cambios no se plasmaban... y sobre todo, cuando te bajas una ROM personalizada, la mayoría traen como característica que esta "deodexed"...
Estas preguntas y dudas, las vamos a explicar y se entenderá todo un poquito mejor
¿Que es un archivo .odex?
En Android, todas las aplicaciones vienen empaquetadas en archivos con extension APK. Junto con las aplicaciones de sistema o que vienen "de serie" en el firmware del fabricante (system/app/), se puede encontrar
un archivo de extension ODEX con el mismo nombre que el APK cuya funcion es la de ahorrar espacio. Estos archivos .odex son colecciones de partes de la aplicacion correspondiente, que estan optimizadas ANTES de arrancar. Lo que se consigue con esto es que se arranque el sistema mas rapido ya que con este sistema se hace una precarga de parte del codigo de la aplicacion.
Es por esto que las aplicaciones de sistema o preinstaladas sean dificiles de modificar, ya que parte del codigo de la aplicacion ya está escrito en dicho archivo .odex, Llamo modificacion a editar codigo para añadir o quitar funcionalidades a la aplicacion o, simplemente, cambiar el aspecto de las aplicaciones editando la parte visual (frameworks y demas... iconos, logos, fondos, etc etc)
¿Qué es DEODEXIZAR? (el día menos pensado meten en el diccionario este verbo

)
Ahora que hemos explicado qué es un archivo .odex y para que sirve, esto ya empieza a ser mas facil de entender... El proceso de deodexizado consiste, simplemente, en reempaquetar todos los contenidos y componentes de la aplicacion en el APK correspondiente mediante el recompilado del classes.dex, que es el fichero contenido en el APK que contiene las clases de Java que se han usado en el codigo de la aplicacion. Hecho esto, lo que se consigue es tener todo en el mismo sitio y
permite que se ejecute toda la aplicacion desde el paquete APK, por así decirlo, sin que haya interacciones desde fuentes externas como son los archivos .odex
¿Cómo funciona todo el tinglado?
Partimos de la base de que Android utiliza para ejecutar todo, una maquina virtual basada en Java que se llama
Dalvik Virtual Machine. Bien, en el caso de aplicaciones deodexizadas, el fichero .dex que hay dentro del APK, es el que contiene la caché (codigo basé) de la aplicacion y que es utilizado por la DALVIK. En el caso de las aplicaciones ODEXIZADAS, la DALVIK utiliza el archivo .odex, que es la version mejorada y optimizada del archivo .dex. Requisito de este método es que el archivo .odex debe de estar en el mismo directorio que el APK y llamarse igual. Éste último, es el método usado por Android por defecto.
Cuando Android arranca, la caché de la
maquina virtual DALVIK se llena con los archivos .odex, lo que
permite a Android saber con antelación qué aplicaciones se cargaran y, como ya hemos comentado que el .odex es parte del código de la aplicación optimizado, se cargará todo mas rapidamente. DEODEXIZANDO los APK, como ya hemos comentado antes, permite tener TODO el codigo de la aplicacion en un mismo sitio, sin entrar en conflicto con el entorno de ejecución de ANDROID
¿Ventajas y Desventajas de la DEODEXIZACION?
Llegados a este punto, las ventajas o desventajas estan mas bien claras... Como ventajas tenemos las de poder personalizar/modificar las aplicaciones de sistema. Esto para los desarrolladores es vital y bastante importante... sobre todo para los que se dedican tematizar firmwares y aplicaciones de sistema.
Como deventaja, evidentemente, tenemos que el sistema tardaría mas en arrancar. Pero hay un
PERO en esto, y es que esta demora en la carga del sistema solo sería la primera vez que se enciende el movil. Se sobreentiende, que la primera vez es cuando lo compras o cuando flasheas el firmware y enciendes el movil.
¿porqué solo la primera vez? pues resulta que la cache de la Dalvik, se queda escrita desde la primera vez que arrancamos Android, por lo que este proceso solo se realiza una vez... Ahora ya no parece tanta desventaja verdad?
-------------------------------------------------------
Espero que os haya servido de ayuda, a mi me ha hecho entender algo mas de como funciona Android. Que lo disfruteis