Emulador Android: Acceder a la web en desarrollo en la propia máquina (localhost)
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».
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
¿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
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
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