Cualquiera que intente programar en Android verá que un problema importante es el del emulador de Android. Tarda en cargar y es lento (casi independientemente de la máquina que tengas) lo que hace probar y depurar en Android una auténtica odisea.

Aquí usamos Eclipse + el ADT de Android para el desarrollo de apps para móviles. Con Eclipse estamos muy contentos (aunque ya estamos probando el nuevo IDE de Google, Android Studio de momento en edición pre-beta, sólo para testers, basado en IntelliJ IDEA, a ver cómo resulta) pero la emulación de dispositivos Android… esa es otra historia.

Buscando alternativas a esta emulación nos hemos encontrado con varias alternativas, algunas dentro del propio ADT (las nuevas opciones Host GPU) y otras externas. Las más interesantes son el empleo de los emuladores específicos de Intel (disponibles para varias versiones: aquí podéis encontrar el último) y el uso de las máquinas virtuales con el Oracle VM Virtual Box.

En este post trataremos sobre la instalación de una máquina virtual en Oracle Virtual Box para ejecutar nuestras aplicaciones Android.

INSTALACIÓN Y USO DE VIRTUAL BOX

Primeramente nos descargaremos la aplicación de Oracle desde el enlace anterior y la instalaremos (ojo al dato: es conveniente desconectar la wifi del PC o del portátil durante la instalación, por alguna misteriosa razón universal se han reportado, nosotros incluido, cuelgues durante la instalación si está activada).

Tendremos entonces que descargar la imagen del S.O. Android que queramos emular. Aquí por ejemplo, estamos usando ahora este, un 4.0, de Buildroid blog. Podéis encontrar muchas más iso en android-x86.

Con el programa instalado, lo arrancamos y configuramos según lo siguiente:

  • O.S. Type: Linux
  • Versión: Linux 2.6
  • 512 Mb de RAM (cuanta más pongáis mejor).
  • De momento le decimos que no cree ningún HD, luego lo haremos.
  • Finalizar y listo.

Ya tendremos una nueva VM creado en la parte izquierda de la página principal. La seleccionamos y pinchamos sobre configurar. Modificamos los parámetros según la siguientes imágenes:

  1. Configuramos el arranque del SO virtual, es necesario dejar el CD seleccionado para poder cargar la imagen.Conf_VM_System
  2. Configuramos el Disco Duro. Con el botón creamos un HDD del tamaño que queramos (en nuestro caso 1Gb). En las preferencias de Oracle VM podemos configurar la carpeta dónde se creará esta imagen.Conf_VM_HDD1
  3. Configuramos el CD apuntando a la ISO que acabamos de descargar.Conf_VM_CdImage

Listos para ejecutar la nueva VM.

Cuando se lance nos saldrá un menú de opciones de instalación (habremos de manejarnos con las teclas cursor, olvidémonos de momento del ratón) y seleccionamos “Installation – Install Android-x86 to harddisk”.

A continuación:

  1. Seleccionamos “Create/Modify Partitions” para entrar en cfdisk.
  2. Seleccionamos “New”.
  3. Seleccionamos “Primary”.
  4. Seleccionamos el tamaño de partición (será por defecto el del disco duro creado antes).
  5. Seleccionamos “Bootable”.
  6. Seleccionamos “Write” y ahora escribimos yes.
  7. Finalmente “Quit” para volver al menu anterior.
  8. Escogemos la partición recién creada para instalar la imagen.
  9. Formateamos en tipo ext3 y lo confirmamos con yes.
  10. Yes a instalar Grub.
  11. Yes a montar como read-write.
  12. Creamos una “fake SD” por si necesitamos instalar programas ahí o hacer pruebas. Escoge el tamaño.
  13. Reboot !!!

Ahora en el menú de la pantalla del nuevo SO, seleccionamos Dispositivos + CD y deseleccionamos la imagen para que el nuevo arranque se haga desde nuestra imagen en el disco duro.

Como tal la imagen ya debería funcionar pero vemos que se simula un tablet!!. Habremos de introducir configuraciones para nuestros dispositivos preferidos. Esto lo haremos desde el prompt de windows yendo a la carpeta de instalación de VM de Oracle y usando la función VBoxManage, con la siguiente cadena:

VBoxManage setextradata Nombre_de_nuestra_VM "CustomVideoMode1" "480x800x16"

para un Galaxy S i9000, y hacemos esto para cada configuración nueva cambiando el nombre del CustomVideoMode 1, por 2, 3 y así sucesivamente según cuantas configuraciones queramos.

Para comprobar si las configuraciones se han guardado correctamente, puede realizarse con el comando:

VboxManage getextradata Nombre_de_nuestra_VM enumerate

que nos dará todas los datos extra guardados para esa iso.

Para cargar esta configuración podemos reiniciar la maquina virtual, cuando estemos en el seleccionador de carga grub, pulsamos “a” y al final de la línea de arranque, anexamos “vga=ask” (ojo, es el teclado americano, el signo = está en el ¡ del teclado español). Pulsamos enter y otra vez enter para acceder al menú de resoluciones. Aquí notaremos que las últimas resoluciones son las nuestras. Después de los dos puntos podemos poner el número de modo (360 en mi caso, que es un valor hexadecimal) y cargará con esta configuración.

Si queremos que cargue siempre de inicio con una configuración predeterminada, nos anotamos el número de modo y reiniciamos el la VM en modo debug. Una vez estemos en línea de comandos remontamos la partición para poder cambiar la configuración de Grub:

mount -o remount,rw /mnt
vi /mnt/grub/menu.lst

y añadimos las nuevas configuraciones según las ya incluidas, incluyendo los nuevos parámetros:

root=sin_cambio androidboot_hardware=generic_x86 acpi_sleep=sin_cambio DPI=240 UVESA_MODE=480x800 SRC=sin_cambio vga=número_modo_anotado_pasado_a_decimal

Os recuerdo que estaremos en el editor Vi de Linux. Para aquellos no entrenados en vi, aquí están los comandos básicos. El primer elemento será el que se ejecute por defecto. Para poder introducir texto pulsáis Insert en vuestro teclado. Para salvar los cambios, pulsar ESC para entrar en modo comando en Vi y luego “:wq” (write and quit, los dos puntos se encuentran son shift+ñ).

Después desmontamos así:

cd /
umount /mnt
reboot -f

También se puede realizar la edición “en tiempo de ejecución” simplemente añadiendo un “vga=ask” al primer elemento sin incluir otros detalles y así cada vez que carguemos la VM, podremos escoger configuración de pantalla que más nos interese.

Y listo, ya tendremos una imagen funcional Android sensiblemente más rápida que la emulación de Eclipse.

Pero, ¿por qué es más rápido este sistema que la emulación en Eclipse? Básicamente porque no estamos trabajando en un emulador sino en un simulador. A diferencia del primero, que emula un procesador ARM en nuestro procesador del ordenador, lo cual se ve que es muy lento, el simulador simplemente usa el procesador Intel para simular un entorno Android pero con las instrucciones x86 de Intel. Esto no supone básicamente diferencia para las principales aplicaciones aunque no nos atreveríamos a decir tanto si programamos aplicaciones con librerías C propias. De hecho, si instalamos en este simulador aplicaciones Gapps muchas de ellas fallarán cerrándose con errores extraños durante la ejecución.

Finalmente, nos queda linkar este simulador con el AVD y Eclipse.

CONECTAR EL SIMULADOR VIRTUALBOX A AVD Y ECLIPSE

La conexión es sencilla. Realizaremos los siguientes pasos:

  1. Comprobamos que en la configuración de Red del Virtual Box (File + Preferences + Network) tenemos configurado Host only Adapter.
  2. Relanzamos la VM.
  3. Cargamos un terminal desde el menú de las aplicaciones del emulador.
  4. Introducimos “su” para hacernos root y luego “netcfg” para ver las conexiones de red. Anotamos la IP 192.168.x.x.
  5. Abrimos un terminal Windows (cmd) y vamos a la carpeta platform-tools dentro de android-sdk en la instalación de eclipse.
  6. Ahora usamos “adb connect <dirección ip>” para conectar el AVD de eclipse a la VM que hemos creado.
  7. Dentro de Eclipse abrimos Run y Run configurations y nos aseguramos que dentro de Android Application, en target, seleccionamos “Always prompt….” para que nos pregunte qué AVD queremos usar.
  8. Y ya podemos darle a Run. Nos saldrá, en la parte superior, un dispositivo en Red (nuestra VM) que podremos seleccionar para ejecutar la aplicación.

Edit: He encontrado un video muy interesante que explica someramente este proceso:

de Raúl Carlos Rodrigo Sierra

Y hasta aquí la historia. Esperamos que os haya funcionado la simulación. Ya nos contaréis.

Más fuentes de información (en inglés):

http://www.nuxeo.com/blog/development/2011/10/speeding-up-the-android-emulator/

http://www.bobbychanblog.com/2011/07/faster-android-emulator-alternative-using-virtualbox/

http://www.kirsle.net/blog/kirsle/android-4-0-in-virtualbox

http://androvm.org/blog/ex-buildroid/2012/01/25/android-x86-virtualbox-support/

Anuncios