Pull to refresh

Android Emulator и локальный веб-сервер (Denwer)

Reading time2 min
Views19K
imageЯ продолжу делиться некоторыми кейсами разработки под Android и теперь хочу рассказать о том, как просто заставить работать приложение, запущенное в эмуляторе, с вашим же серверным API, которое лежит на локальном веб-сервере. Простыми словами — как общаться приложению из эмулятора по http с localhost. Это не советы профессионала, а не более чем пример конкретного рабочего решения.

Начну с условий задачи. Моему приложению, которое я описывал в прошлый раз, понадобилась возможность публикации рисунков в телефона в онлайн-галерею. В моем случае галерея — это свой собственный сайт, который в 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
Tags:
Hubs:
+34
Comments7

Articles