Подтвердить что ты не робот

Использование файлов хостов Android

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Я сделал это:

  • Используя Busybox, скопируйте файл hosts в редактируемое местоположение с помощью cp /etc/hosts /mnt/sdcard/hosts.new;
  • Измените /mnt/sdcard/hosts.new с помощью предустановленного текстового редактора, добавив две записи, которые мне нужны. Я использовал IP, затем неквалифицированное имя хоста, затем FQDN, например 192.168.2.81 siva siva.myinventeddomain.org.au, но в теории также должны работать другие форматы;
  • В BusyBox снова, su для root;
  • /system по умолчанию ro, поэтому мне пришлось сделать rw с помощью mount -o remount,rw /system;
  • Чтобы сохранить ввод позже, cd /etc (после чего приглашение оболочки показало /system/etc, а не /etc, что заставляет меня подозревать symlink shenanigans);
  • Создайте резервную копию файла hosts по умолчанию (который содержит только 127.0.0.1 localhost) с mv hosts hosts.old;
  • Установить новый файл hosts с помощью mv /mnt/sdcard/hosts.new hosts;
  • Выполнить sync (просто потому, что я параноик - это не обязательно);
  • Remount /system fs ro с mount -o remount,ro /system;
  • Выход из BusyBox;
  • Запущен веб-браузер (FireFox) и ввел siva в комбинированное поле URL/search thingy (siva, являющееся одной из двух записей хостов, которые я добавил).

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

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

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

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

Ответ 3

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

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

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