Отладка Android USB в VirtualBox
Я пытаюсь получить mono для android (aka monodroid), работающий в виртуальной машине Windows 7 на виртуальном боксе, но у меня возникают проблемы с подключением adb к моему телефону. Когда я запускаю "adb devices", чтобы отображать присутствующие устройства, это не проблема, но когда я пытаюсь запустить "adb install", logcat или нажимать, он зависает. В настоящее время есть ошибка в virtualbox, которая относится к этому, но я надеялся, что у кого-то более осведомленного, чем у меня, будет обходной путь.
https://www.virtualbox.org/ticket/6620
Из-за грубого не было бы проблем, если бы Xamarin выпустил порт Linux своего продукта или, если бы я познакомился с Java, но я полагаю, что это несколько разные проблемы.
Ответы
Ответ 1
Брайан, обходной вариант, который вы можете рассмотреть, - это сделать ваш хост VM также хостом ADB. Затем вы можете просто подключить свой VM-клиент к нему через TCP/IP. Вот общая идея для этой установки:
- Установите Android SDK на хост-машину. Вам нужен пакет пакетных инструментов, который включает
adb
.
- Не позволяйте клиенту вашей виртуальной машины владеть устройством Android, поэтому отключите любые правила фильтра USB VirtualBox, и вам также не помешает отсоединить и снова подключить устройство.
- С вашего клиента VM запустите
adb kill-server
. Сделайте это tskill adb
для уверенности. Если у вас есть какие-либо запущенные экземпляры Eclipse, вы сначала захотите закрыть их, потому что он фактически запустит adb
в фоновом режиме. Не пропустите этот шаг.
-
От хоста выполните adb devices
. Если все пойдет хорошо (и оно должно), вы увидите свое устройство в списке. Он должен выглядеть примерно так (обратите внимание на номер порта и извините за искажение):
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
015d2994ed200409 device
В этот момент ваш хост должен иметь сервер ADB, работающий на порту 5037. Вы можете проверить это с клиента VM, запустив telnet 10.0.2.2 5037
, где 10.0.2.2
является IP-адресом по умолчанию для хостов VirtualBox, а 5037
- порт ADB по умолчанию, указанный выше.
-
Теперь вы должны либо переслать порты с вашего хоста на ваш клиент VM, либо иным образом подключить ADB непосредственно к IP-порту вашего хоста. Если вы похожи на меня, вы обнаружите, что переменные ADBHOST и ANDROID_ADB_SERVER_PORT плохо документированы и легко завинчиваются. По этой причине рассмотрим простой перенос портов поверх ssh
(возможно, через Cygwin), как это происходит с клиентом VM:
autossh -nNL5037:localhost:5037 -oExitOnForwardFailure=yes 10.0.2.2
-
Наконец, запустите adb devices
с вашего клиента VM. Если вы видите, что "демон не работает", это означает, что ваш перенос портов запутан. В противном случае вы должны увидеть свое устройство и сможете логарифмировать весь день. Примечательно, что у вас не будет демона adb
, запущенного на вашем VM-клиенте, за исключением тех случаев, когда вы действительно используете мост отладки, конечно.
Я использовал аналогичный механизм для отладки устройств по сети, которые подключены к удаленным машинам, и он работал хорошо.
Ответ 2
Не уверен, что изменилось в VirtualBox, поскольку вопрос был отправлен, но выбор устройства USB из меню VirtualBox Устройства → USB → Имя устройства работал без проблем. Я работаю над VirtualBox 5.1.2 r108956.
Ответ 3
У меня была та же проблема, и это заставило меня искать около 2 часов. Я пробовал несколько подходов, включая все вышеупомянутые решения, но ни один из них не работал
Моя ситуация
Мой хост был archlinux, а гостем был windows 8.1. Я запускал Flash-конструктор в окнах, но отладка usb не работала, а мое подключенное устройство было nexus 5, поэтому я выполнил следующие шаги.
- Включить USB-контроллер из меню виртуальных камер. Машина → настройки → usb включить контроллер USB и включить контроллер USB 2.0 (EHCI), а затем добавить ваше устройство (нажмите кнопку + на правой стороне), затем запустите свою виртуальную машину.
- Теперь вы должны скачать последние версии драйверов usb google из здесь и извлечь его
- Перейдите к диспетчеру диспетчера панели управления правой кнопкой мыши на своем устройстве, перейдите на вкладку драйвера и нажмите "Обновить драйвер", где должно быть два варианта: один автоматический поиск... и другой просмотр моего компьютера выбирает второй и предоставляет извлеченный путь к файлу ( установите флажок Включенные вложенные папки), после чего ваше устройство должно быть распознано окнами, и в вашем устройстве Android появится сообщение о разрешении доступа к вашему устройству.
В моем случае я должен скопировать драйверы в путь для драйверов android drivers, но, возможно, для вашей ситуации это не обязательно
Ответ 4
У меня была такая же проблема с VirtualBox 5.0.14, и решение, предоставленное Стивеном Недзельским, не работало для меня. Если кто-то еще заинтересован, попробуйте это решение.
Моя среда:
- Операционная система: Mac OS 10.11
- гостевая ОС в VirtualBox: Ubuntu 14.04
- Устройство: Galaxy S5 работает Cyanomodgen 12.1
Запустите точку доступа wifi в операционной системе хоста и подключите устройство Android, или подключитесь как к маршрутизатору. В виртуальном режиме установите сетевой режим для гостевой ОС на "Мостовой адаптер", а затем выберите имя адаптера Wi-Fi. Таким образом, ОС хоста и Android-устройства находятся в одной сети.
Затем в устройстве Android активируйте "Режим разработчика" и включите "ADB через сеть", предоставленный Cyanomodgen. (Для устройств с оригинальной версией Android, Google, как использовать ADV по сети, если это возможно)
В хост-системе запустите "adb kill-server" и убедитесь, что ни один экземпляр ADB не запущен. Затем запустите команду "adb connect 192.168.2.12", ip устройства android.
Поздравляем:) Теперь вы можете использовать ADB с устройством Android, чтобы принимать логарифмы, вытягивать и выталкивать файлы.
Ответ 5
У меня также были проблемы с АБР, работающим на ВМ. У меня был хост Windows 10 и клиент Ubuntu 14.04. Метод autossh
у меня не сработал. Я нашел более простое решение из другого fooobar.com/info/8698/.... Это требует, чтобы ваш компьютер и ваше устройство были в одной сети WiFi.
-
На вашей виртуальной adb tcpip 5555
запустите следующее: adb tcpip 5555
Устройство отключится от виртуальной машины, потому что ADB теперь находится в режиме TCP вместо USB.
-
Для следующей части вам понадобится IP-адрес вашего устройства. Чтобы найти его, просто запустите adb shell ip -f inet addr show wlan0
-
Теперь вы можете подключиться к вашему устройству. На вашем виртуальном клиенте запустите:
adb connect <Device IP>:5555
Отсюда все мои сеансы adb shell, logcat и monkey выполнялись без перерыва!