Android USB debugging in VirtualBox

61,613

Solution 1

Brian, one workaround you might consider is to make your VM host an ADB host as well. Then you can just connect your VM client to it over TCP / IP. Here's the general idea for that setup:

  1. Install the Android SDK on the host machine. You should only require the platform-tools package which includes adb.
  2. Don't allow your VM client to take ownership of the Android device, so disable any VirtualBox USB filter rules you have and it also wouldn't hurt to then detach and reattach the device.
  3. From your VM client, run adb kill-server. Make it a tskill adb for certainty. If you have any running instances of Eclipse, you'll want to shut those down first because it'll actually launch adb in the background. Don't skip this step.
  4. From the host, execute adb devices. If all goes well (and it should), you'll see your device listed. It should look something like this (note the port number and sorry for the mangling):

    * daemon not running. starting it now on port 5037 *
    * daemon started successfully *
    List of devices attached
    015d2994ed200409    device
    

At this point, your host should have an ADB server running at port 5037. You can check this from the VM client by running telnet 10.0.2.2 5037, where 10.0.2.2 is the default IP for VirtualBox hosts and 5037 is the default ADB port noted above.

  1. Now you must either forward the ports from your host to your VM client, or otherwise connect ADB directly to your host IP:port. If you're like me, you'll find the ADBHOST and ANDROID_ADB_SERVER_PORT variables to be poorly documented and easy to screw up. For this reason, consider simple port fowarding over ssh (maybe via Cygwin) like so from the VM client:

    autossh -nNL5037:localhost:5037 -oExitOnForwardFailure=yes 10.0.2.2
    
  2. Finally, run adb devices from your VM client. If you see "daemon not running," it means your port fowarding is screwed up. Otherwise you should see your device and be able to logcat all day. One noteworthy point is that you won't have an adb daemon running on your VM client, except for when you're actually using the debug bridge, of course.

I've used a similar mechanism for debugging devices over the network that are connected to remote machines and it worked well.

Solution 2

Not sure what has changed in VirtualBox since the question was posted, but selecting the usb device from VirtualBox menu Devices -> USB -> DeviceName worked seamlessly. I am working on VirtualBox 5.1.2 r108956.

Solution 3

I was also having trouble with ADB running over VM. I had a Windows 10 host and an Ubuntu 14.04 client. The autossh method did not work for me. I found an easier solution from another StackOverflow question. It requires that both your PC and your device are on the same WiFi network.

  1. On your VM client run the following: adb tcpip 5555

    The device will disconnect from the VM because ADB is now in TCP mode instead of USB.

  2. For the next part you need the IP address of your device. To find it, simply run adb shell ip -f inet addr show wlan0

  3. Now you can connect to your device. On your VM client, run:

    adb connect <Device IP>:5555

From here all my adb shell, logcat, and monkey sessions ran without interruption!

Solution 4

I'm posting this here for people with a setup similar to mine:

  • Host OS: OSX (10.15.4 Catalina)
  • Client OS: Windows 10 Enterprise (v1903 build 18362.752)
  • VirtualBox v6.1.4
  • Android Studio v3.6.2

To allow Android Studio in client OS (Windows) to connect to an Android phone (using adb) via USB:

  1. Update to latest version of VirtualBox (currently 6.1.4)
  2. Install VirtualBox Extension Pack from here
  3. With the VM powered down, go to Settings > Ports > USB and make sure the USB 3.0 (xHCI) Controller is enabled, then click "OK"
  4. From the host OS (i.e. OSX) open up a terminal and start adb and confirm that the phone is connected by running adb devices
  5. Start up the VM, and from the VirtualBox menu select Devices > USB > [YOUR PHONE] to connect your host OS USB port to the VM
  6. Open up a terminal on the client OS (Windows) and run adb devices to confirm that the adb server is running and can find your phone. You might need to add the Android platform tools to your PATH (mine was at C:\Users\Username\AppData\Local\Android\Sdk\platform-tools). This step might be optional--I suspect that Android Studio might start up adb on its own.
  7. Start up Android Studio in the client OS (Windows) and go to File > Settings > Appearance and Behavior > System Settings > Android SDK > SDK Tools and make sure that the Google USB Driver is installed (see screenshot here)

After I did these things, Android Studio was able to detect my phone and run/debug apps using that device.

Hope this helps!

Solution 5

I had the same problem and it made me search for about 2 hours.I tried several approaches including all above solutions but none of them worked

My situation

My host was archlinux and the guest was windows 8.1 I was running flash builder in windows but the usb debugging wouldn't work and my connected device was nexus 5 so i followed these steps

  1. Enable USB controller from virtualbox menu Machine-->settings-->usb enable usb controller and enable USB 2.0 (EHCI) controller then add your device(click on + button on right side) then start your virtual machine
  2. Now you should download the latest google usb drivers from here and extract it
  3. Go to control panel device manager right click on your device go to driver tab and click on Update driver there should be two option one search automaticly ... and another browse my computer choose the second one and give the extracted file path(check the Included subfolders option) after this your device should be recognized by windows and there will be a message in your android device for allowing access to your device

In my case i should copy the drivers to flashbuilder android drivers path too but maybe for your situation this isn't necessary

Share:
61,613

Related videos on Youtube

Brian
Author by

Brian

Lead Bioinformatics and computer vision developer in the Greater New Haven Area.

Updated on September 04, 2020

Comments

  • Brian
    Brian over 3 years

    I am trying to get mono for android (aka monodroid) working within a windows 7 virtual machine on virtualbox but I am having issues with the adb connection to my phone. When I run "adb devices" to list the devices present it show up no problem, but when I attempt to run an "adb install", logcat, or push it hangs. Currently there is a bug in virtualbox which applies to this but I was hoping someone more knowledgeable than myself would have a workaround.

    https://www.virtualbox.org/ticket/6620

    Of coarse non of this would be an issue if Xamarin released a linux port of their product or if I got familiar with Java, but I suppose those are slightly different issues.

  • Stephen Niedzielski
    Stephen Niedzielski over 11 years
    As an alternative workaround to using ssh / autossh, I think there should be a way to use VirtualBox NAT port forwarding rules but I can't seem to get those working in the guest to host direction.
  • chmac
    chmac almost 11 years
    I use two networks, one NAT to give the VM internet access and the second Host-Only to allow host -> guest and vice versa. Maybe that'd work for you? I have it on a totally different subnet and it works fine, even if the host is not online.
  • user210504
    user210504 almost 11 years
    We were able to get the same result using socat as well
  • Adrien Luxey
    Adrien Luxey over 6 years
    For me, passing the USB device to the Windows client through Virtualbox worked fine. I had to add myself to the vboxusers group like so: stackoverflow.com/a/20066190/5935455
  • Alvin567
    Alvin567 about 3 years
    Hi there, I need help with the particular setup: 1) Kali Linux VM on Virtualbox 2) Android 4.4 VM on VirtualBox How do I even at least get an ADB shell on it?