Uso de los archivos de hosts de Android

Tengo el siguiente problema:

Hago un archivo de hosts personalizado para probar algunas características de mi aplicación y luego empujarlo a mi emulador de Android. La cosa es que estos ajustes no surten efecto inmediatamente. Tengo que esperar unos 10 minutos antes de que se conviertan en activos.

Así que mi pregunta es: ¿cómo hacer que el nuevo archivo de hosts activo al instante? Tengo muchos ajustes diferentes para probar y no puedo esperar 10 minutos cada vez.

Java mantiene su propia caché DNS interna. El sistema operativo reflejará inmediatamente el nuevo archivo hosts (verifique que con ping en la línea de comandos), pero necesitará decirle a java que no almacene nada en caché. Agregue estas líneas a su aplicación de prueba:

System.setProperty("networkaddress.cache.ttl" , "0"); System.setProperty("networkaddress.cache.negative.ttl" , "0");

Para obtener más información sobre estas propiedades, consulte aquí: http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

Acabo de editar mi archivo de hosts en mi arraigado Samsung Galaxy S, y los cambios entraron en vigor de inmediato. Tal vez el problema que está viendo es algo que ver con ADB?

Hice esto:

  1. Utilizando Busybox, copie el archivo hosts en una ubicación editable con cp /etc/hosts /mnt/sdcard/hosts.new ;
  2. Edite /mnt/sdcard/hosts.new utilizando el editor de texto preinstalado, agregando las dos entradas que necesito. Utilicé IP, luego nombre de host no cualificado, luego FQDN, por ejemplo 192.168.2.81 siva siva.myinventeddomain.org.au , pero otros formatos deberían en teoría funcionar también;
  3. En BusyBox de nuevo, su a raíz;
  4. /system es ro de forma predeterminada, por lo que tuve que hacer rw con mount -o remount,rw /system ;
  5. Para guardar la escritura más tarde, cd /etc (con lo que el prompt de la shell mostró /system/etc lugar de /etc , lo que me hace sospechar shenanigans de enlace simbólico);
  6. Copia de seguridad del archivo hosts predeterminado (que contenía sólo 127.0.0.1 localhost ) con mv hosts hosts.old ;
  7. Instale el nuevo archivo de hosts con mv /mnt/sdcard/hosts.new hosts ;
  8. Ejecutar la sync (simplemente porque soy paranoico – esto no debería ser necesario);
  9. Remount /system fs ro con mount -o remount,ro /system ;
  10. Salir de BusyBox;
  11. Encendida navegador web (FireFox) y entró siva en la URL combinada / campo de búsqueda thingy ( siva es una de las dos entradas de los anfitriones que agregó).

Antes de estos cambios, el paso 11 resultó en una estúpida búsqueda en Google de 'siva' o algo así; Inmediatamente después de ellos, obtengo la página principal de mi LAN httpd vhost, como espero.

Había mucho menos de 10 minutos transcurridos entre el trabajo y no funcionaba.

El enlace al Java doco de Sun puede o no ser relevante (probablemente no lo es). Android no contiene una VM Java en absoluto, y mucho menos una de Sun. Funciona con un VM diferente llamado Dalvik – vea la entrada de Wikipedia: http://en.wikipedia.org/wiki/Dalvik_%28software%29

El hecho de que pueda programar teléfonos Android en un idioma que se parece mucho a Java está al lado del punto.

No he intentado usar el archivo de anfitriones; Pero he intentado usar DNS personalizado …

  1. Inicie un servidor DNS en algún lugar (puede cargar DD-WRT, tener un enrutador de fantasía o ejecutar un daemon en su PC).
  2. OPCIONAL: Configure su enrutador local (servidor DHCP) con la ubicación del servidor DNS en ejecución (hágalo primero en la lista de servidores DNS).
  3. SI SKIPPING # 2: Configure su teléfono para IP estático (Wi-Fi Settings-> Menu button-> advanced). Establezca DNS1 como su servidor.
  4. Haga que su teléfono se conecte a esta red a través de WIFI.

¡Terminaste! Ahora puede administrar nombres DNS / IP parings junto con tiempos de arrendamiento (por ejemplo, el teléfono actualizará el IP cada 30 si es necesario). Algo complicado, pero no tienes que cargar el archivo hosts en el teléfono :-).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.