Я понимаю, что этот вопрос действительно старый, но я решил проблему немного по-другому, и мне потребовалось некоторое время, чтобы найти это тривиальное решение.
Обычно я использую ПК или ноутбук с Windows7 (в зависимости от того, где я работаю) в качестве внешнего интерфейса, потому что мне нравится графический интерфейс, однако я предпочитаю выполнять все мои правки / компиляции / отладки на сервере без Ubuntu, так как всей командной строки, которую он обеспечивает. Моя цель - сделать каждую систему Windows максимально тонким клиентом без каких-либо дополнительных служб (таких как sshd) или дыр в брандмауэре.
Так вот сенарио:
- Система A: система Windows7 с запущенным эмулятором Android
- System-B: сервер Ubuntu с установленным SDK
Проблема, как описано ранее, заключается в том, что эмулятор в System-A привязывается к локальному узлу, а не к внешнему интерфейсу Ethernet, поэтому adb в System-B не может получить доступ к эмулятору в System-A. Все, что вам нужно сделать, это настроить переадресацию удаленных портов в PuTTY для вашего SSH-соединения с System-B. Хитрость заключается в проверке переключателя «Remote», когда вы создаете два туннеля, чтобы направление туннеля изменилось (туннелирование с сервера, на котором вы входите, на клиент, с которого вы входите).
Наконец, подключитесь с помощью adb к «localhost» в 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 и загружать на него изображения из System-B. Чтобы это работало, перед началом сеанса SSH необходимо убедиться, что сервер adb работает в System-A, а не в System-B:
Сначала запустите сервер 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