Отладка 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.

  1. На вашей виртуальной adb tcpip 5555 запустите следующее: adb tcpip 5555

    Устройство отключится от виртуальной машины, потому что ADB теперь находится в режиме TCP вместо USB.

  2. Для следующей части вам понадобится IP-адрес вашего устройства. Чтобы найти его, просто запустите adb shell ip -f inet addr show wlan0

  3. Теперь вы можете подключиться к вашему устройству. На вашем виртуальном клиенте запустите:

    adb connect <Device IP>:5555

Отсюда все мои сеансы adb shell, logcat и monkey выполнялись без перерыва!