Cuando desarrollamos aplicaciones para móviles o tablets y no tenemos acceso a un dispositivo físico, o queremos probar nuestra aplicación en distintos tamaños de pantalla o densidades tenemos dos alternativas principales: los “simuladores”, como el que incluye el SDK de iOS, y los emuladores, como el del SDK de Android.
Un simulador sólo simula el entorno software en que se ejecutará la aplicación. Cuando ejecutamos una aplicación en el simulador de iOS, lo que ocurre realmente es que la aplicación se compila a código máquina nativo y se simulan las llamadas de sistema de iOS. Como la aplicación se ejecuta de manera nativa, es extremadamente rápida, pero a cambio, el resultado es menos fidedigno.
Por otro lado el emulador de Android, que básicamente es una versión modificada de QEMU con un frontend, emula todo el entorno software y hardware de un tablet o teléfono Android, a excepción de que no puede hacer llamadas. Esto permite hacernos una idea mucho más certera de cómo se comportará nuestra aplicación en un dispositivo real, pero a cambio, también es mucho más lento, sobre todo si activamos las funciones de depuración. Tanto es así que, gracias a lo sencillo y conveniente que es un utilizar un dispositivo físico para probar nuestro código en Android, muchos desarrolladores terminan desechando el emulador totalmente y utilizando teléfonos y tablets reales exclusivamente.
Aunque es una información que se recoge en el sitio web de Android para desarrolladores y numerosas páginas se hacen eco, mucha gente no es consciente de que es posible utilizar imágenes de Android basadas en x86 y hacer uso de la GPU de nuestra máquina y las funciones de virtualización de las CPUs más modernas para mejorar dramáticamente el rendimiento del emulador de Android.
Como ejemplo de cómo pueden afectar estas opciones al rendimiento del emulador, sin ningún tipo de valor estadístico y sólo como curiosidad, aquí tenéis los tiempos obtenidos en el test SunSpider activando cada una de estas opciones de forma consecutiva:
Las imágenes de Android para x86 están disponibles a través del SDK Manager. Sólo es necesario desplegar la rama correspondiente a la versión de Android que estemos utilizando e instalar el paquete “Intel x86 Atom System Image”. Una vez instalado el paquete tendremos la opción de utilizar “Intel Atom (x86)” como CPU/ABI al crear un nuevo AVD.
Si disponemos de un procesador Intel con la tecnología VT-x podemos mejorar aún más el rendimiento utilizando virtualización basada en el propio hardware. Sólo tenemos que descargar el paquete “Intel x86 Emulator Accelerator (HAXM)” mediante el SDK Manager y ejecutar el instalador que encontraremos en \sdk\extras\intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe una vez terminada la descarga.
Por último, para activar la aceleración mediante la GPU sólo tenemos que activar la opción “Use Host GPU” al crear un nuevo AVD.
Otras opciones que pueden ayudarnos a mejorar el rendimiento del emulador son utilizar versiones más antiguas de Android, usar resoluciones más bajas o aumentar la RAM que se le da al AVD, si contamos con memoria suficiente.
Emuladores vs simuladores
Un simulador sólo simula el entorno software en que se ejecutará la aplicación. Cuando ejecutamos una aplicación en el simulador de iOS, lo que ocurre realmente es que la aplicación se compila a código máquina nativo y se simulan las llamadas de sistema de iOS. Como la aplicación se ejecuta de manera nativa, es extremadamente rápida, pero a cambio, el resultado es menos fidedigno.
Por otro lado el emulador de Android, que básicamente es una versión modificada de QEMU con un frontend, emula todo el entorno software y hardware de un tablet o teléfono Android, a excepción de que no puede hacer llamadas. Esto permite hacernos una idea mucho más certera de cómo se comportará nuestra aplicación en un dispositivo real, pero a cambio, también es mucho más lento, sobre todo si activamos las funciones de depuración. Tanto es así que, gracias a lo sencillo y conveniente que es un utilizar un dispositivo físico para probar nuestro código en Android, muchos desarrolladores terminan desechando el emulador totalmente y utilizando teléfonos y tablets reales exclusivamente.
Acelerar el emulador de Android
Aunque es una información que se recoge en el sitio web de Android para desarrolladores y numerosas páginas se hacen eco, mucha gente no es consciente de que es posible utilizar imágenes de Android basadas en x86 y hacer uso de la GPU de nuestra máquina y las funciones de virtualización de las CPUs más modernas para mejorar dramáticamente el rendimiento del emulador de Android.
Como ejemplo de cómo pueden afectar estas opciones al rendimiento del emulador, sin ningún tipo de valor estadístico y sólo como curiosidad, aquí tenéis los tiempos obtenidos en el test SunSpider activando cada una de estas opciones de forma consecutiva:
Las imágenes de Android para x86 están disponibles a través del SDK Manager. Sólo es necesario desplegar la rama correspondiente a la versión de Android que estemos utilizando e instalar el paquete “Intel x86 Atom System Image”. Una vez instalado el paquete tendremos la opción de utilizar “Intel Atom (x86)” como CPU/ABI al crear un nuevo AVD.
Si disponemos de un procesador Intel con la tecnología VT-x podemos mejorar aún más el rendimiento utilizando virtualización basada en el propio hardware. Sólo tenemos que descargar el paquete “Intel x86 Emulator Accelerator (HAXM)” mediante el SDK Manager y ejecutar el instalador que encontraremos en \sdk\extras\intel\Hardware_Accelerated_Execution_Manager\IntelHaxm.exe una vez terminada la descarga.
Por último, para activar la aceleración mediante la GPU sólo tenemos que activar la opción “Use Host GPU” al crear un nuevo AVD.
Otras opciones que pueden ayudarnos a mejorar el rendimiento del emulador son utilizar versiones más antiguas de Android, usar resoluciones más bajas o aumentar la RAM que se le da al AVD, si contamos con memoria suficiente.
0 comentarios:
Publicar un comentario