Android-хосты используют файл

У меня есть следующая проблема:

Я создаю собственный файл hosts, чтобы протестировать некоторые функции моего приложения, а затем помещаю его в мой эмулятор Android. Дело в том, что эти настройки вступают в силу не сразу. Я должен ждать около 10 минут, прежде чем они станут активными.

Итак, мой вопрос: как сделать новый файл хостов активным мгновенно? У меня много разных настроек для тестирования, и я не могу ждать 10 минут каждый раз.

3 ответа

Решение

Java поддерживает свой собственный внутренний кеш DNS. Операционная система немедленно отобразит новый файл hosts (убедитесь, что с ping в командной строке), но вам нужно будет указать java, что ничего не нужно кэшировать. Добавьте эти строки в ваше тестовое приложение:

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

Для получения дополнительной информации об этих свойствах см. Здесь: http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

Я только что отредактировал файл hosts на своем рутированном Samsung Galaxy S, и изменения вступили в силу немедленно. Возможно, проблема, которую вы видите, связана с АБР?

Я сделал это:

  1. Используя Busybox, скопируйте файл hosts в редактируемое место с cp /etc/hosts /mnt/sdcard/hosts.new;
  2. редактировать /mnt/sdcard/hosts.new используя предустановленный текстовый редактор, добавив две записи, которые мне нужны. Я использовал IP, затем неполное имя хоста, затем FQDN, например 192.168.2.81 siva siva.myinventeddomain.org.au, но другие форматы должны теоретически работать;
  3. Снова в BusyBox, su укорениться;
  4. /system по умолчанию это ro, поэтому мне пришлось сделать это с mount -o remount,rw /system;
  5. Чтобы сохранить ввод позже, cd /etc (после чего подсказка оболочки показала /system/etc скорее, чем /etc, что заставляет меня подозревать мошенничество);
  6. Создайте резервную копию файла hosts по умолчанию (который содержал только 127.0.0.1 localhost) с mv hosts hosts.old;
  7. Установите новый файл hosts с помощью mv /mnt/sdcard/hosts.new hosts;
  8. казнить sync (только потому, что я параноик - в этом не должно быть необходимости);
  9. восходить /system фс ро с mount -o remount,ro /system;
  10. Выход из BusyBox;
  11. Запустил веб-браузер (FireFox) и вошел siva в комбинированном поле URL/ поискаsiva будучи одним из двух записей хостов, которые я добавил).

До этих изменений шаг 11 приводил к глупому поиску в Google по запросу "siva" или что-то еще; сразу после них, как я и ожидал, я получаю первую полосу моего http http vhost.

Прошло не более 10 минут между тем, как он работал, и он не работал.

Ссылка на Java-доку Sun может быть или не иметь отношения (вероятно, это не так). Android вообще не содержит Java VM, не говоря уже о Sun. Он запускает другую виртуальную машину под названием Dalvik - см. Статью в Википедии: http://en.wikipedia.org/wiki/Dalvik_%28software%29

Тот факт, что вы можете программировать телефоны Android на языке, который очень похож на Java, не имеет значения.

Я не пробовал использовать файл hosts; но я попытался использовать пользовательский DNS...

  1. Запустите DNS-сервер где-нибудь (вы можете загрузить DD-WRT, иметь модный маршрутизатор или запустить демон на своем ПК).
  2. ДОПОЛНИТЕЛЬНО: Настройте локальный маршрутизатор (DHCP-сервер) с указанием местоположения работающего DNS-сервера (сделайте его первым в списке DNS-серверов).
  3. IF SKIPPING # 2: Настройте свой телефон для статического IP (Настройки Wi-Fi-> Кнопка меню-> Дополнительно). Установите DNS1 в качестве вашего сервера.
  4. Подключите телефон к этой сети через WIFI.

Вы сделали! Теперь вы можете управлять DNS-именами /IP-адресами, а также временем аренды (например, телефон будет обновлять IP каждые 30 секунд, если вам нужно). Немного сложно, но вам не нужно загружать файл hosts на телефон:-).

Другие вопросы по тегам