La columna 80

El blog técnico-personal de Ángel J. Vico… en español

Instalación de una máquina virtual Android

Posted by Ángel J. Vico en 28 de abril de 2013

Cuando desarrollamos para Android nos vemos en la necesidad de probar nuestras aplicaciones en diversos dispositivos, para garantizar su correcto funcionamiento en configuraciones diferentes. Salvo que dispongamos de muchos y variados dispositivos reales, no nos quedará más remedio que emularlos.

El SDK de Android nos permite crear AVDs (Android Virtual Devices) para diversas versiones del sistema operativo y con variadas características hardware. Pero, seamos realistas, su rendimiento deja bastante que desear, incluso en máquinas potentes.

A medida que van saliendo nuevas versiones de Android el esfuerzo que tiene que realizar el software para emularlas es cada vez mayor, lo que provoca que se ejecuten con bastante lentitud. Y mejor no hablemos de tabletas. Para arrancar un AVD con configuración de tableta hay que armarse de paciencia.

Afortunadamente, tenemos otra opción para emular Android obteniendo un mayor rendimiento: usar una máquina virtual que ejecuta la versión para procesadores Intel x86 de Android. Hay varios proyectos que buscan la mejor forma de realizar esta tarea. Yo me voy a centrar en AndroidVM, que es una de las soluciones más sencillas.

Descargando todo lo necesario

Lo primero que hay que descargar es la imagen de la máquina que vamos a instalar. Lo podemos hacer desde http://androvm.org/blog/download/. Hay varias versiones:

  • Versión para emular teléfonos: vbox86p

  • Versión para emular tabletas: vbox86t

  • Versión para emular tabletas con capacidades de teléfono: vbox86tp

Además, de cada una de ellas hay una versión básica y otra que incluye las aplicaciones de Google, Houdini (un emulador de ARM) y soporte Flash. Lo del emulador de ARM se debe a que las imágenes son de Android para x86 y algunas aplicaciones se ejecutan en modo nativo y están compiladas para ARM (por ejemplo, el reproductor flash).

La imagen la descargamos en formato OVA (Open Virtualization Appliance), que es un paquete OVF (Open Virtualization Format) comprimido. El paquete contiene varias imágenes de disco y un fichero descriptor en formato XML. Las imágenes de disco de estos paquetes AndroVM están en formato VMDK (Virtual Machine Disk). Es el formato que utilizan los productos de VMware, pero también lo soporta VirtualBox, que es el que utilizaré en este post.

En esa misma página también es recomendable descargar la aplicación AndroVM Player, que nos servirá para que la máquina virtual utilice el hardware gráfico de la máquina anfitriona. Conviene descargar la versión que se corresponda con la versión de Windows que tengamos, 32 o 64 bits. No requiere instalación, basta con descomprimirla en un directorio.

Instalación de la máquina virtual

Instalar la imagen que hemos descargado es fácil y rápido. Basta con hacer doble click sobre ella o seleccionar Archivo | Importar servicio virtualizado en VirtualBox. Aceptamos las opciones predeterminadas y ya tenemos la máquina instalada.

Sencillo, ¿verdad?

Configuración de VirtualBox

La última versión de AndroVM Player es capaz de configurar la máquina virtual de forma automática la primera vez que se ejecuta, por lo que podemos saltarnos este apartado y los dos siguientes y pasar directamente a la configuración de AndroVM Player.

Aún así, como las cosas no siempre funcionan como debieran, explicaré aquí la forma “manual” de hacerlo, por si tuviéramos que recurrir a ella.

Para poder comunicarnos con la máquina virtual desde la anfitriona necesitamos un adaptador sólo-anfitrión (host-only). Para ver qué adaptadores tenemos configurados abrimos VirtualBox y seleccionamos Archivo | Preferencias. En la ventana que se abre seleccionamos Red:

Configuración de red de VirtualBox

Seguramente habrá uno ya creado y podremos utilizarlo. Si no hay ninguno, o si no queremos mezclar redes, podemos añadir uno (usando el botón superior de la derecha). Lo importante es que tenga activo el servidor DHCP. Para comprobarlo hay que abrir los detalles del adaptador, haciendo doble click sobre él. Luego pulsamos en la pestaña Servidor DHCP:

Detalles de red sólo-anfitrión - AdaptadorDetalles de red sólo-anfitrión - Servidor DHCP

Hay que seleccionar Habilitar servidor y rellenar los datos. Se escoge una dirección para el servidor, se pone una máscara de tipo C (255.255.255.0) y luego se establece un rango de direcciones para las máquinas virtuales, teniendo cuidado de que no incluya la asignada al servidor.

Configuración de la máquina virtual

El siguiente paso es configurar la máquina virtual. La seleccionamos en VirtualBox y pulsamos el botón Configuración. Hay que seleccionar Red en el menú de la izquierda.

La máquina virtual viene configurada con dos adaptadores de red. Uno lo utiliza para conectarse a Internet y el otro está disponible para poder conectarlo con la máquina anfitriona. Este último viene desactivado, así que tenemos que configurarlo. Para ello, en la pestaña Adaptador 1 hay que cambiar la lista desplegable Conectado a de No conectado a Adaptador sólo-anfitrión. Luego, en Nombre seleccionamos el adaptador que configuramos antes.

Confiuración de red de androVM en VirtualBox

Aceptamos los cambios, y ya estamos listos para iniciar la máquina. Al hacerlo arrancará Android, de forma muy similar a como lo hacen los AVD que se crean con el SDK:

androVM Phone ejecutándose en VirtualBox

Si no se ve la pantalla entera, podemos activar el modo ajustado, usando la tecla anfitrión (Host) + A. También podemos usar la misma configuración para salir de ese modo.

Configuración de la máquina Android

Tal y como viene configurada la máquina, el renderizado gráfico se realiza por software. Para que utilice el hardware gráfico de la máquina virtual hay que ejecutar la aplicación androVM Configuration. Es importante comprobar que en la parte superior de la aplicación se muestre la IP que se le ha asignado a la máquina Android. Si no aparece, habrá que revisar la configuración del adaptador 1, porque algo habremos hecho mal.

Para activar la aceleración hardware hay que seleccionar la opción Hardware OpenGL y pulsar Save. Nos pedirá reiniciar. Hay que pulsar No. Luego apagamos la máquina (desde el botón de cerrar de la ventana Windows en la que se ejecuta). Nota: Enviar la señal de apagado no sirve de nada, hay que apagarla.

Configuración de androVM Phone

Configuración de AndroVM PLayer

Ahora hay que configurar AndroVM Player. Al ejecutarlo se muestra la siguiente ventana:

AndroVM Player - Primer arranque

La aplicación permite escoger las dimensiones y la densidad de píxeles de la máquina Android, bien seleccionando una configuración típica o bien introduciendo los datos manualmente. En la parte inferior hay otra lista desplegable para escoger la máquina virtual que queremos iniciar.

Si la aplicación no ha sido capaz de localizar la carpeta donde está instalado VirtualBox, tendremos que indicárselo nosotros. Para ello pulsamos el botón Settings de la esquina inferior derecha.

En la ventana de opciones tenemos que seleccionar el ejecutable VBoxManage.exe, que se encuentra en la carpeta de VirtualBox (de forma predeterminada, C:/Archivos de programa/Oracle/VirtualBox/). Pulsamos el botón Browse y lo localizamos.

AndroVM Player Settings

También podemos escoger si queremos que la máquina virtual se ejecute dentro de una ventana de VirtualBox (In a GUI) o no (Headless). Lo mejor es escoger Headless, dado que la pantalla de la máquina Android se verá dentro de la aplicación AndroVM Player, por lo que no necesitamos tener también la ventana de VirtualBox.

Cerramos la ventana de opciones y cerramos también la aplicación AndroVM Player si sigue indicando que no encuentra VBoxManage. Al abrirla de nuevo debería haber desaparecido el mensaje. Ya podemos seleccionar la resolución y la máquina virtual en las listas desplegables:

AndroVM Player - Conectado a VirtualBox

Ejecución desde AndroVM Player

Para ejecutar la máquina virtual hay que pulsar el botón Run. Si nos hemos saltado algunos pasos y no hemos activado la aceleración gráfica, AndroVM Player se dará cuenta y nos ofrecerá la opción de activarla por nosotros:

AndroVM Player - Activar aceleración hardware

Pulsamos Enable hardware acceleration para continuar. Si tampoco tenemos VirtualBox correctamente configurado, nos saldrá otro aviso:

AndroVM Player - Configurar VirtualBox

Ahora tenemos que pulsar Setup VirtualBox. Si no tenemos un adaptador sólo-anfitrión creado, AndroVM Player lo creará por nosotros. Dependiendo de la versión de Windows, puede que se nos soliciten credenciales de administración (incluso varias veces). Si es el caso, se las otorgamos y seguimos.

Nota

Las credenciales son necesarias para crear un adaptador de red virtual en Windows. El interfaz es necesario para hacer de puente entre el equipo real y la red virtual que VirtualBox crea para las máquinas.

La siguiente comprobación que realiza AndroVM Player es si el adaptador de red de la máquina virtual está conectado al adaptador sólo-anfitrión. Si no es así, mostrará una nueva advertencia:

AndroVM Player - Configurar adaptador de red

Nuevamente se ofrece a hacer el trabajo por nosotros, así que pulsamos Setup Network Adapter para terminar la configuración de la máquina virtual.

Nota

Hay que tener en cuenta que todos estos pasos sólo hay que hacerlos la primera vez que se arranca la máquina y sólo si no la hemos configurado manualmente. Las siguientes veces, la máquina arrancará directamente.

Si todo está bien configurado la máquina virtual se ejecuta con aceleración gráfica hardware. Además, AndroVM Player proporciona una barra que incluye los botones habituales de un teléfono Android:

AndroVM Player en ejecución

Además de la interfaz de AndroVM Player, también podemos utilizar algunas teclas para simular algunos de los botones físicos de los terminales Android:

  • Inicio: realiza la función del botón HOME, que sirve para regresar al lanzador de aplicaciones.

  • ESC: equivale al botón ATRÁS.

  • F1 o F10: botón MENÚ.

  • F3: botón BUSCAR.

  • F4 o Fin: botón de encendido (POWER).

  • F11: pasar a pantalla completa (F11 de nuevo para volver a ventana).

Si usamos el botón de apagado de la botonera de AndroVM Player para apagar la máquina Android, se cerrará la máquina virtual, pero la aplicación AndroVM Player seguirá en ejecución. Es mejor usar el botón de cierre de la ventana AndroVM Player. Al pulsarlo se muestran dos opciones: una para cerrar la máquina virtual y la aplicación (Shutdown VM and Exit) y otra para cerrar sólo la aplicación dejando la máquina virtual en funcionamiento (Exit). Si vamos a necesitar la máquina más adelante, es mejor no cerrarla.

AndroVM Player - Apagar máquina virtual

La aplicación no da la opción de crear una instantánea de la máquina virtual para no tener que arrancarla cada vez (algo que tarda algunos minutos). Aunque podríamos crear esa instantánea desde la interfaz principal de VirtualBox, luego no podremos abrir la máquina desde AndroVM Player (da un error de estado incorrecto). Esto es debido a la aceleración hardware, cuyo estado no se puede almacenar y recuperar.

Nota

A veces da algún error y dice que no puede comunicarse con la máquina. Desde la interfaz principal de VirtualBox podemos ver si la máquina ha arrancado realmente o no. Si esperamos a que esté lista y pulsamos Run de nuevo debería funcionar. También puede ocurrir que se muestre la interfaz de la aplicación AndroVM Player, pero con la pantalla en blanco, quedándose así indefinidamente. En este caso hay que cerrar la aplicación sin cerrar la máquina virtual y volver a ejecutarla. Si sigue sin funcionar, habrá que cerrar la máquina virtual desde VirtualBox y después volver a ejecutar AndroVM Player.

Ni que decir tiene que la versión tableta se configura exactamente de la misma forma (la resolución mínima para que se active la interfaz de tabletas es 1024×768):

AndroVM Player - Tableta

Enlace de la máquina Android con el SDK

Para poder usar la máquina para desarrollar, tenemos que conectarla al PC. Para ello hay que usar la línea de comandos y ejecutar

adb connect <IP>

donde <IP> es la IP de la máquina virtual. La IP se muestra en la ventana junto al nombre de la aplicación AndroVM Player (si no lo vemos en la propia ventana, podemos dejar el cursor del ratón sobre el icono de la barra de tareas para que se muestre completo).

Conexión con el ADB

Podemos comprobar que la máquina se ha conectado con el comando adb devices. Si se muestra la IP de la máquina junto a la etiqueta device, todo estará listo para ejecutar nuestras aplicaciones. A partir de aquí funciona como un AVD o como un dispositivo real conectado al PC.

Compartir archivos

AndroVM Player proporciona acceso de forma automática a las carpetas que se comparten con la máquina virtual desde VirtualBox si se marcan para que se monten automáticamente.

Para compartir una carpeta en VirtualBox hay que abrir la configuración de la máquina virtual Android y seleccionar Carpetas compartidas en el menú lateral:

Configuración de carpetas compartidas

Añadimos una nueva carpeta pulsando en el botón Agregar carpeta compartida (el que tiene un signo de suma de color verde). En Ruta carpeta hay que seleccionar la carpeta de la máquina anfitriona que queremos compartir (pulsando en la flecha y seleccionando Otro) y en Nombre carpeta hay que escribir el nombre que se le asignará en la máquina virtual. Finalmente, hay que seleccionar la casilla de verificación Automontar (imprescindible). Pulsamos Aceptar para compartir la carpeta y luego otra vez Aceptar para cerrar las opciones.

Agregar carpeta compartida

Las carpetas configuradas de esta forma se montan en la máquina Android en la ruta /mnt/shared, por lo que podemos acceder a ellas desde cualquier explorador de archivos (la máquina AndroVM incluye Astro):

AndroVM  - Accediendo a la carpeta compartida

Limitaciones

Con todo esto ya tenemos lista una máquina virtual Android con aceleración gráfica y con un rendimiento bastante superior al de los AVDs que se crean con el SDK de Android. Pero hay que tener en cuenta que tenemos algunas limitaciones respecto a estos últimos.

Para empezar no tenemos un botón para rotar la pantalla, ni tampoco parece haber una combinación de teclas que permita hacerlo (como en los AVDs). Si una aplicación rota la pantalla, la máquina se rota correctamente, por lo que podemos usar una aplicación que fuerce una orientación.

Otra opción es utilizar las resoluciones manuales de AndroVM Player para invertir las dimensiones y arrancar la máquina en modo apaisado. Así podremos probar las aplicaciones en ambas orientaciones.

También hay que tener en cuenta que no podemos tener cualquier versión de Android. Ahora mismo la versión de AndroVM disponible es la 4.1.1, por lo que si queremos probar nuestras aplicaciones en versiones anteriores tendremos que crearnos AVDs o utilizar dispositivos reales con esas versiones (si disponemos de ellos).

No obstante, aunque no podamos hacer pruebas de compatibilidad con diversas versiones, sí que podemos probar toda la funcionalidad de nuestra aplicación en una de las versiones de Android más recientes, con posibilidad de depurar y con una mejor respuesta que la que podemos tener con los AVDs. Merece la pena, ¿no?

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s