2010-11-13 15 views
11

Tengo el siguiente problema:anfitriones Android archivo Uso de

hago un archivo de hosts personalizados para probar algunas de las características de mi solicitud y luego empujarlo a mi emulador de Android. El hecho es que estas configuraciones no surten efecto de inmediato. Tengo que esperar unos 10 minutos antes de que se activen.

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

+0

No he intentado esperar 10 minutos, pero sí veo que mis cambios no son efectivos inmediatamente (cuando se actualizan a través de 'adb pull/etc/hosts', edición local,' adb push hosts/etc/hosts'). ¡Buscando ayuda similar sobre este tema! –

+2

@Matt Una peculiaridad es que la entrada del host debe terminar en un LineFeed o Android lo ignorará. No es un CR/LF y no puede dejar el LF en la última entrada. Eso me confundió por un tiempo. No veo un retraso de 10 minutos, los cambios que hago parecen tener lugar de inmediato. – mhenry1384

Respuesta

5

Java mantiene su propio caché de DNS interno. El sistema operativo reflejará el nuevo archivo de hosts inmediatamente (verifíquelo con ping en la línea de comandos) pero deberá indicar a java que no almacene en caché nada. Añadir 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

+0

Esto funciona muy bien para mí. – Lee

0

No he intentado utilizar el archivo de hosts; pero he intentado usar DNS personalizado ...

  1. Inicie un servidor DNS en alguna parte (puede cargar DD-WRT, tener un enrutador elegante 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. IF SKIPPING # 2: configure su teléfono para IP estática (Configuración de Wi-Fi-> Botón de menú-> avanzado). Establezca el DNS1 para ser su servidor.
  4. Haga que su teléfono se conecte a esta red a través de WIFI.

Su hecho! Ahora puede administrar los nombres DNS/parings de IP junto con los tiempos de arrendamiento (por ejemplo, para que el teléfono actualice la IP cada 30 s si es necesario). Algo complicado, pero no tienes que cargar el archivo de hosts en el teléfono :-).

+0

Esto no funcionará. Java está almacenando en caché las búsquedas de DNS internamente, ni siquiera molestará en consultar el servidor DNS personalizado. –

2

que acaba de editar mi archivo de hosts en mi arraigada Samsung Galaxy S, y el los cambios tomaron efecto inmediatamente. Quizás el problema que está viendo es algo relacionado con ADB?

Hice esto:

  1. Usando Busybox, copiar el archivo hosts en una ubicación editable con cp /etc/hosts /mnt/sdcard/hosts.new;
  2. Edite /mnt/sdcard/hosts.new usando el editor de texto preinstalado, agregando las dos entradas que necesito.Utilicé IP, luego nombre de host no calificado, luego FQDN, por ejemplo 192.168.2.81 siva siva.myinventeddomain.org.au, pero otros formatos deberían funcionar también en teoría;
  3. En BusyBox otra vez, su a la raíz;
  4. /system es ro por defecto, así que tuve que hacerlo rw con mount -o remount,rw /system;
  5. Para guardar la escritura más tarde, cd /etc (con lo cual el intérprete de comandos del shell mostró /system/etc en lugar de /etc, lo que me hace sospechar shenanigans de symlink);
  6. Realice una copia de seguridad del archivo de hosts predeterminado (que solo contenía 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 sync (simplemente porque soy paranoico, esto no debería ser necesario);
  9. Remontar /system fs ro con mount -o remount,ro /system;
  10. Salir de BusyBox;
  11. Descargó el navegador web (FireFox) e ingresó siva en el campo combinado URL/campo de búsqueda (siva siendo una de las dos entradas de host que agregué).

Antes de estos cambios, el paso 11 daba como resultado 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.

Hubo menos de 10 minutos transcurridos entre que funcionó y no funcionaba.

El enlace al doco Java de Sun puede o no ser relevante (probablemente no lo sea). Android no contiene una VM de Java en absoluto, y menos la de Sun. Funciona una máquina virtual diferente llamada Dalvik - vea la entrada de Wikipedia: http://en.wikipedia.org/wiki/Dalvik_%28software%29

El hecho de que usted puede programar teléfonos Android en un lenguaje que se parece mucho a Java no viene al caso.