
Начну с условий задачи. Моему приложению, которое я описывал в прошлый раз, понадобилась возможность публикации рисунков в телефона в онлайн-галерею. В моем случае галерея — это свой собственный сайт, который в POST-запросе получает изображение и некоторые текстовые переменные. На windows-машине для эмуляции веб-сервера запущен Denwer, доступ к проекту галереи по http организован по урлу _http://dev.gallery.
И так, проблема состоит в том, что эмулятор не видит ваш собственный hosts с описаниями хостов и, соответственно, не знает про _http://dev.gallery. Попытки разместить проект в localhost/dev.gallery тоже ни к чему не приводят, поскольку 127.0.0.1 для эмулятора — это он сам. Проблема решается внесением изменений в hosts эмулятора. А конкретно — строки
10.0.2.2 dev.gallery
. Именно этот адрес нужно использовать, если вы хотите обращаться к сервисам, размещенным на вашей машине. Полный список адресов адресного пространства есть здесь.Для того чтобы внести соответствующие изменения:
- Запускаем руками эмулятор командой
emulator -avd ИмяУстройства -partition-size 128
- В новом окне консоли выполняем
adb remount
- Копируем hosts с устройства в корень диска
adb pull /system/etc/hosts c:\hosts
- Открываем полученный файл текстовым редактором и вносим нужные правки. К слову, если нужно дать доступ ко всей папке localhost — можно сменить адрес в строке
127.0.0.1 localhost
(скорее всего это будет единственная строка данных в файле) на10.0.2.2 localhost
, но это будет не кошерно. - Выкладываем наш hosts на устройство
adb push c:\hosts /system/etc
После этого вы можете смело стучаться на свой веб-сервер. Если вы перезапустите эмулятор — замену hosts придется выполнить заново. Для ускорения работы удобно создать и использовать один cmd-файл, запускающий эмулятор с нужными параметрами и второй, подменяющий при необходимости hosts на заранее подготовленный.
Все это использовалось при отладке работы приложения PaintUp и галереи PaintUp.net