Desde el código hasta la ejecución de píxeles en el tiempo de ejecución de Android | por Esmond | julio de 2021
Técnicamente hablando, la salida dex2oat
Es un archivo en formato ELF, aunque su extensión o denominación pueden implicar algo. El archivo OAT dedicado existe bajo el contenedor de formato ELF. El formato exacto del archivo OAT es diferente al de varias versiones de Android, pero la idea es que contenga código nativo / de máquina compilado para una arquitectura de hardware específica y se pueda ejecutar directamente sin interpretación. Recomiendo este artículo para obtener más información sobre los formatos ELF y OAT.
El formato ELF es significativo porque se usa para código ensamblador en Linux y es compatible con herramientas del sistema como el enlazador en Bionic.Obtenga más información sobre Bionic y su enlazador aquí
Además del código de la máquina local, el archivo OAT generalmente contiene el archivo DEX original como respaldo o para depuración. Esto ha cambiado en Android O, usa un nuevo formato,
.vdex
, Guarde el archivo DEX
Cabe resaltar que oat
Los nombres de las extensiones de archivo a veces pueden resultar confusos. .odex
Las extensiones de archivo utilizadas en otros artículos (especialmente artículos antiguos) pueden referirse específicamente a archivos de versiones anteriores (tiempo de ejecución de Dalvik) dex2opt
Esto es diferente del formato de archivo oat. Sin embargo, en el contexto del arte, .odex
La extensión del archivo también puede ser un archivo oat, ¡no lo confunda mirando la documentación oficial!
Siempre que se lanza una nueva aplicación, Android primero clona un archivo llamado Cigoto. Zygote se crea poco después del inicio y contiene todas las bibliotecas necesarias que se han cargado en la memoria. Estos códigos son comúnmente utilizados por las aplicaciones de Android, por lo que «copiar» de este proceso es más efectivo que generar código nuevo desde cero para cada aplicación. El proceso recién clonado adopta el nuevo ID de proceso y se ramifica para convertirse en el proceso que inicia la aplicación. Internamente, el kernel de Linux utiliza tecnología de copia en escritura, por lo que cada nuevo proceso en sí no es técnicamente una copia. Para obtener más información sobre el proceso de arranque de Zygote y Android, recomiendo este artículo, es realmente útil.
Ahora que tenemos nuestro propio proceso de Android, el tiempo de ejecución comenzará a cargar archivos de clase en la memoria.Recordemos que en la APK hemos compilado classes.dex
Luego se convierte en archivos de formato oat, que es para optimizar la carga rápida y la ejecución del código durante el tiempo de ejecución de Android. Con la creación de un nuevo proceso, el tiempo de ejecución de Android puede cargar directamente el código nativo / máquina de oat en el proceso y prepararse para comenzar la ejecución.
En este punto, la CPU ejecuta las instrucciones del código de la máquina, lo cual está más allá del alcance y propósito de este artículo. Aunque este artículo es breve, muestra e introduce los componentes que intervienen en el inicio y la ejecución de un APK. Puede ser considerado como un puente o middleware importante Desde una perspectiva arquitectónica, es un puente entre el código empaquetado y todo lo que el usuario finalmente experimenta en el dispositivo.
Estén atentos para la próxima serie, exploraré cómo Android presenta la interfaz de usuario y las vistas que vemos en el dispositivo. Como siempre, este tema está abierto a discusión, ¡gracias por leer!