Можно ли написать код/компилировать приложение Android на одном компьютере и отлаживать его удаленно на эмуляторе, запущенном на другом? Я устал от эмулятора, постоянно ем половину моего процессора ноутбука.Удаленная отладка с эмулятором Android
ответ
я ранее не пытался (или даже заметил) в adb connect
команды, CMB упомянутой, но я могу подтвердить, что переадресация портов TCP самих — например, по SSH — работает отлично.
Эмулятор прослушивает два порта TCP для каждого экземпляра: 5554 для интерфейса telnet и 5555 для управления связью с такими инструментами, как DDMS. Таким образом, вы, вероятно, могли бы уйти только с переадресацией порта 5555 (хотя я только пробовал его до сих пор с обоими). Каждый последующий эмулятор принимает следующий доступный кортеж с четным + нечетным номером порта (думаю, примерно до 5580).
Для справки, я сделал следующие шаги на моей локальной машине:
ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 [email protected]
killall adb; adb devices
Я считаю, что эмулятор пытается уведомить местный ADB сервер при запуске; поэтому необходимо перезапустить adb, чтобы он мог исследовать локальные порты 5554+.
Обратите внимание, что localhost
в команде ssh ссылается на локальный интерфейс удаленной машины.
adb devices
показал новый эмулятор — emulator-5554
— и я мог бы использовать его, как будто он работает на моей локальной машине.
Я не имею вторую машину с SDK в руки, но я отмечаю, прослушивающие порты эмулятора (по умолчанию 5554, 5555) прослушивается 0.0.0.0
, т.е. достижимы с удаленных машин, и что adb --help
показывает команду connect <host>:<port>
, Я предполагаю, что он будет отображаться в adb devices
, так что на нем работают команды adb
. Для Eclipse попробуйте «Run/Run Configurations ...» и установите Target to Manual. Это дает вам «выбор устройства», который, как я предполагаю, будет включать в себя удаленный эмулятор, если к нему подключен adb. Стоит попробовать.
Телефон разработчика дешевле, чем дополнительный компьютер и может быть удален отлажен. У этого есть дополнительное преимущество наличия всех дополнительных датчиков, которые эмулятор не представляет по умолчанию.
Я настоятельно рекомендую приобрести телефон разработчика для тестирования.
Вот как я решил это на Windows. Я в значительной степени следовал примеру Кристофера, но я не могу редактировать, поэтому новый ответ должен будет сделать.
Проблема была в том, что АБР, а также эмулятор просто слушал 127.0.0.1, а не 0.0.0.0, для меня. В противном случае я бы использовал TCPMon. Я предполагаю, что это либо отличается от Windows, либо изменилось с последними версиями SDK. (Вы можете проверить с netstat -ban
.)
Я установил WinSSHD на компьютере, на котором работает эмулятор. (Я считаю, что он должен работать и с freeSSHd, но я не мог получить там регистрацию.)
Я открыл порт 22 (TCP) в брандмауэре Windows. (WinSSHD может это сделать для вас.)
Я создал виртуальную учетную запись в графическом интерфейсе WinSSHD.
Я создал новое соединение PuTTY от машины разработки к эмулятору и убедился, что могу подключиться.
Затем я создал туннелирование в PuTTY: Connection -> SSH -> Туннели
Source port: 5554
Destination: localhost:5554
Type: Local/Auto
Source port: 5555
Destination: localhost:5555
Type: Local/Auto
(Connect и сохранить Положил TY открыт, чтобы поддерживать туннель.)
Теперь я включил эмулятор на удаленной машине и убедился, что ADB там не работает.
Я перезапустил АБР на машине разработки (
adb kill-server
, затемadb start-server
).adb devices
и удаленный эмулятор отображаются какemulator-5554 device
. Теперь я могу развернуть и запустить приложение прямо из Eclipse/ADT, где эмулятор появился в Virtual Devices, как если бы это был локальный эмулятор.
Работал отлично! Спасибо за детали. –
Приятно, но я хотел бы уточнить: после шага 4 вам нужно закрыть замазку, затем на шаге 5 снова открыть ее, настроить туннели и снова подключиться. Шаги 6-8: первый эмулятор запуска, затем запустите adb (в хост-машине). Шаг 9: вы можете перезапустить adb на клиентской машине и ввести устройства adb, чтобы убедиться, что все в порядке. Также должны работать регулярные средства DDMS и eclipse. –
@MisterSmith Очень действительные баллы, почему вы не отправляете изменения? :) –
Я понимаю, что этот вопрос действительно старый, но я решил проблему немного по-другому, и мне потребовалось некоторое время, чтобы выяснить это тривиальное решение.
Обычно я использую компьютер или ноутбук Windows7 (в зависимости от того, где я работаю) в качестве своего интерфейса, потому что мне нравится графический интерфейс, однако я предпочитаю делать все свои изменения/компиляцию/отладки на безголовом сервере Ubuntu из-за всей предоставляемой им мощности командной строки. Моя цель состоит в том, чтобы сделать каждую систему Windows максимально возможной для тонкого клиента без каких-либо дополнительных услуг (например, sshd) или дыр в брандмауэре.
Так вот Senario:
- System-A: система Windows7 с андроид эмулятор работает
- System-B: сервер Ubuntu с SDK установлен
Проблема, как описано ранее, что эмулятор на System-A привязывается к localhost, а не к внешнему интерфейсу ethernet, поэтому adb на System-B не может получить доступ к эмулятору на System-A. Все, что вам нужно сделать, это настроить удаленное перенаправление портов в PuTTY для вашего SSH-подключения к System-B. Хитрость заключается в проверке переключателя «Удаленный» при создании двух туннелей, чтобы направление туннеля было отменено (туннелирование с сервера, на который вы входите, на клиента, с которого вы входите).
Наконец, соединиться с ADB на "локальный" на System-B после установления соединения SSH:
System-B$ adb connect localhost
connected to localhost:5555
System-B$ adb devices
List of devices attached
localhost:5555 device
Теперь вы можете загрузить изображения/отлаживать в обычном режиме, и это тривиальное чтобы переключиться на другую систему Windows, если вы хотите вытащить свой ноутбук и получить кофе.
Кроме того, путем туннелирования порта 5037 таким же образом вы можете переадресовать свое соединение с сервером adb, чтобы вы могли подключить реальное устройство Android через USB на System-A и загрузить изображения из системы-B. Чтобы это работало, вам необходимо убедиться, что сервер adb работает на System-A и не запускается в System-B перед началом сеанса SSH:
Сначала запустите сервер adb на System-A (командная строка)
C:\> adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
C:\> adb devices
List of devices attached
3435F6E6035B00EC device
Далее убить ADB сервера на System-B
System-B$ adb kill-server
Наконец, перезагрузите SSH сессию System-B и проверить
System-B$ adb devices
List of devices attached
3435F6E6035B00EC device
Есть ли способ сделать это, не установив sdk android на System-A? (Windows-машина?) –
Нет, поскольку для связи с устройством должны быть запущены драйверы сервера adb и usb на System-A. –
Я тоже это сделал с настройкой вроде: Windows 7 (работает эмулятор) -> Linux (требуется хоп, из-за сети ...) -> OS X работает Eclipse. Я могу видеть устройства с помощью «adb devices» и использовать эмулятор от Eclipse. Проблема в том, что он не распознает цель Android эмулятора, поэтому я должен выбрать цель при каждом запуске вручную. – Frank
Я нашел простой способ сделать это, если ваши две машины находятся в одной и той же частной сети и, следовательно, не нужно использовать SSH-шифрование (это обычный случай). Это может помочь, поскольку туннель SSH может быть довольно длинным и сложным в установке. Например, установка демона SSH под Cygwin/Windows в первый раз может привести к сдаче (ну, я сдался).
В Windows, что следует требует того, Cygwin установлен с пакетом HTTPTunnel. Это должно работать под Linux/httptunnel, но я не пробовал.
Запустите эмулятор на одной из машин (скажем, его имя хоста HostEmulator)
Запустите Eclipse на другой машине (назовем его HostEclipse)
Откройте терминал Cygwin на каждой машине, а затем
HostEmulator, введите следующие команды Cygwin:
hts -F localhost:5554 10000 hts -F localhost:5555 10001
HTS означает Http туннельный сервер.
Эти две команды создают два полумоста, которые прослушивают порты 10001 и 10001 и перенаправляют ввод/вывод этих портов на локальные порты 5554 и 5555, которые являются портами, используемыми эмулятором (на самом деле, первый эмулятор - если вы несколько из них, они будут использовать более высокие номера портов, как показано в других ответах на этой странице).
На HostEclipse введите эти одни:
htc -F 5554 HostEmulator:10000 htc -F 5555 HostEmulator:10001
означает HTC Http Tunnel Client.
Эти команды создают недостающие полумосты. Они слушают локальные порты 5554 и 5555 и перенаправляют ввод/вывод этих портов на полумосты, которые мы создали на HostEmulator непосредственно перед этим.
Затем еще на HostEclipse введите эти три команды:
adb kill-server adb start-server adb devices
перезапущена ADB, как он не обнаруживает удаленный эмулятор иначе. При запуске он должен выполнять сканирование. И затем он перечисляет устройства (доступные эмуляторы) только для проверки.
- И вот вы идете.
Вы можете работать с удаленным эмулятором, как если бы он был локальным. Вы должны держать терминалы Cygwin открытыми на обеих машинах, иначе вы бы убили половинные мосты, которые вы создали.
Здесь я использовал порты 10000 и 10001 для обмена машиной/машиной, но, конечно, вы можете использовать другие порты, если они еще не используются.
Мое решение для Windows + AndroVM (для которого требуется только хост-адаптер), когда моя служба ssh не запускалась. поэтому он не требует дополнительного программного обеспечения.
adb connect <Andro VM IP>
adp tcpip 555
В CMD стремительный бег как администратор:
netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP>
открыт TCP порт 5555 в брандмауэре Windows.
Затем от второго ПК:
adb connect <host ip>
Ни одно из предложенных решений не работал для меня. Я начал с решения Emirikol и усовершенствовал его, так как в новом Android API> 21 эмулятор появился в автономном режиме, и мне пришлось перейти в настройки Genymotion и оставить путь Android SDK пустым. А из командной строки:
netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP>
netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP>
источник: http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/ Отказ от ответственности, я автор.
- 1. Отладка HTTPResponse с эмулятором android
- 2. weinre отладка не работает с android-эмулятором
- 3. Удаленная отладка В Android-браузере
- 4. Удаленная отладка с информацией?
- 5. Удаленная отладка с gdbServer
- 6. Удаленная отладка с VS2015
- 7. Удаленная отладка с WingIDE
- 8. Удаленная отладка на Android с Chrome
- 9. Удаленная отладка webkit с Android 4.4 WebViews
- 10. Samsung Tab: удаленная отладка
- 11. Удаленная отладка Microsoft edge
- 12. Удаленная отладка для Android в XDK
- 13. Удаленная отладка PhpStorm с xdebug
- 14. Удаленная отладка с захватом экрана
- 15. Удаленная отладка с использованием Eclipse
- 16. Как удаленная отладка с RubyMine?
- 17. Eclipse Удаленная отладка с jboss
- 18. PhpStorm - Удаленная отладка с xDebug
- 19. Удаленная отладка с помощью GDB
- 20. Удаленная отладка tomcat с OpenShift
- 21. Удаленная отладка с помощью PhantomJS
- 22. Удаленная отладка с Squish IDE
- 23. phonegap/jquery мобильная удаленная отладка? (android)
- 24. iOS Удаленная отладка
- 25. Удаленная отладка через домены
- 26. Удаленная отладка в haskell
- 27. Удаленная отладка кода C++
- 28. Удаленная отладка Qt Creator
- 29. Cocos2d-x (JS) Удаленная отладка Android JavaScript
- 30. Удаленная отладка Android NDK программа от затмения
работает как шарм, даже с моей машины Windows 7 с пересылкой портов SSH шлюза. Спасибо. – gsbabil
@gsbabil Какова была команда для Putty SSH? –
@JimMcKeeth: На основании конфигурации сети выше, откройте Putty, перейдите в Connection> SSH> Tunnels. Теперь добавьте запись с Source-port: 5556 и Destination: localhost: 5554. Повторите то же самое с Source-port: 5557 и Destination: localhost: 5555. Ура! – gsbabil