Emulador Android: Acceder a la web en desarrollo en la propia máquina (localhost)

octubre 20, 2010

En mi caso, cuando estoy desarrollando una aplicación web (o móvil) desarrollo en local sincronizando con un servidor svn. Para poder ir comprobando la web, creo un nuevo sitio en Apache y fuerzo la ip en el /etc/hosts a la propia máquina (localhost).

Este podría ser un ejemplo de configuración de una web para Apache. Todos los ejemplos de este post son para Ubuntu. Evidentemente tenemos que tener instalado un servidor Apache en nuestra máquina.

El archivo lo pondríamos en /etc/apache2/sites-available/ejemploweb

<VirtualHost *:80>
   ServerAdmin info@ejemploweb.com
   DocumentRoot /var/www/vhosts/ejemploweb
   ServerName ejemploweb.com
   ServerAlias *.ejemploweb.com
   ErrorLog /var/log/apache2/ejemploweb_error.log
   CustomLog /var/log/apache2/ejemplo_access.log common
   DirectoryIndex index.php
   <Directory "/var/www/vhosts/ejemploweb">
        Options Indexes FollowSymLinks
        Order Allow,Deny
        Allow from all
        AllowOverride all
   </Directory>
   </Directory>
</VirtualHost>

Suponiendo que el contenido de nuestra web se encuentra en el directorio /var/www/vhosts/ejemploweb.

Tenemos que hacer un enlace simbólico a /etc/apache2/sites-enabled

sudo ln -s /etc/apache2/sites-available/ejemploweb /etc/apache2/sites-enabled/ejemploweb

Y reiniciamos apache:

sudo /etc/init.d/apache2 restart

Ya lo tendríamos configurado. Ahora tenemos que forzar que el dominio que hayamos seleccionado lo busque en localhost o en la ip 127.0.0.1. Esto lo podemos hacer en nuestro archivo /etc/hosts

sudo nano /etc/hosts

Y añadimos la siguiente línea al final del archivo:

127.0.0.1 www.ejemploweb.com ejemploweb.com

Ahora, si en nuestro navegador vamos a la dirección http://ejemploweb.com, nos cargará la página que tenemos en local y hemos configurado anteriormente.

El objetivo de este post es poder acceder a esta web en desarrollo desde el emulador de Android. El emulador de Android no tiene en cuenta el archivo /etc/hosts, por lo que al intentar acceder a la web ejemploweb.com desde el emulador, nos mostrará un error indicando que no se ha encontrado la página o veremos la web que tenemos en producción (si está online) y no en desarrollo. El emulador Android no hace caso al archivo /etc/hosts, lo único que hace es extraer las DNS que tenemos configuradas en nuestra máquina y copiarlas al propio emulador.

Si queremos que el emulador nos resuelva la web que tenemos en nuestro ordenador, deberemos configurar el archivo /system/etc/hosts propio del emulador Android.

Para ello, vamos a la carpeta tools platform_tools donde tenemos descargado el sdk de Android:

cd /home/user/android-sdk-linux_86/platform_tools

Lo primero que hacemos es saber el “serial number” del emulador que tenemos abierto (por que tenemos que tener un emulador de Android iniciado, por ejemplo, desde eclipse)

./adb devices

Y obtendremos un salida parecida a esta:

List of devices attached 
emulator-5554	device

El “serial number” del emulador es “emulator-5554”. En todos los comandos que escribamos a continuación, tenemos que indicar a que emulador queremos realizar los cambios:

Llamamos al comando adb con la opción remount para que no nos dé fallos de escritura:

./adb -s emulator-5554 remount

A continuación importamos el archivo /system/etc/hosts original que tenemos en el emulador Android (en el ejemplo, lo importamos a nuestra carpeta personal):

./adb -s emulator-5554 pull /system/etc/hosts /home/user

Ahora hacemos los cambios en el archivo que hemos importado, incluyendo al final del mismo la siguiente linea:

10.0.2.2  www.ejemploweb.com ejemploweb.com

Podemos comprobar que la ip es 10.0.2.2, que es una ip especial del emulador la cual hace referencia a nuestra máquina local. La ip 127.0.0.1, hace referencia al propio emulador Android.

Guardamos el archivo y lo volvemos a copiar al emulador:

./adb -s emulator-5554 push /home/user/hosts /system/etc

Y ya lo tenemos hecho! Si vamos al navegador dentro del emulador Android y escribimos la dirección http://ejemploweb.com, deberemos ir a la web que tenemos en desarrollo en nuestra máquina local.

Actualización:

Si os suelta un error, al intentar copiar de nuevo el archivo hosts al emulador, del tipo:
failed to copy “hosts” to “/system/etc”: No space left on device
failed to copy “hosts” to “/system/etc”: Out of memory

Hay que iniciar el emulador con el parámetro -partition-size 128:

./emulator -avd nombre_de_nuestro_avd -partition-size 128 &

Terminamos la orden poniendo “&” para que se ejecute en segundo plano (entornos linux).
El comando ‘emulator’ está dentro de la carpeta tools donde tenemos instalado el SDK.

También podemos especificar este comando en el propio eclipse. Lo hacemos en “Run/Run configurations”, pestaña “target” y escribimos

-partition-size 128

en el campo “Additional Emulator Command Line Options”.

CompartirTweet about this on TwitterShare on TumblrShare on FacebookShare on LinkedInShare on Google+Email this to someone

Tags ; , , , ,

4 comentarios

    Antonio Ene 25, 2011

    Hola Jon Segador.

    He estado siguiendo los pasos para realizar la operacion pero tengo un inconveniente al hacer el pull. Estoy usando Windows 7 y la ruta equivalente es C:WindowsSystem32driversetchosts y me muestra el sig error: remote object ‘C:WindowsSystem32driversetchosts’ does not exist

    Responder
    Jon Feb 18, 2011

    ¿Qué comando utilizas? Nada tiene que ver el sistema operativo que utilices con el hosts del emulador. Te descargas el archivo hosts del emulador android, lo modificas y lo vuelves a subir:

    Debería ser algo así (para descargarlo):
    adb.exe -s emulator-5554 pull /system/etc/hosts ruta_donde_descargarlo

    Para subirlo de nuevo:
    adb.exe -s emulator-5554 push ruta_donde_se_encuentra_el_archivo /system/etc

    Responder
    Cesar Ago 13, 2011

    Hola Jon

    Yo acabo de ejecutar todos los pasos indicados, sin embargo me aparece este error

    failed to copy ‘c:temphosts’ to ‘/system/etc/hosts’: Directory not empty

    Aque se puede deber?

    Muchas gracias

    Responder
    Alejo Dic 26, 2012

    Excelente !!!!!, mas facil no se puede …
    si no estamos usando el emulador que es muy lento
    sino un virtualbox android solo hay que agregarle a estos pasos:

    ./adb connect [IP del dispositivo]

    y seguir los pasos.
    Gracias

    Responder

Escribe un comentario

Los comentarios son moderados y se utiliza rel="nofollow" para los enlaces.