将USB设备连接到Android模拟器?

37
我们一直在研究Android 3.1+及其连接到OTG/Host端口的USB设备读写能力。
我找到了一些代码示例,可以让我检测并读写USB HID设备,但目前我没有一个可用于部署和远程调试的物理3.1+兼容设备。
有人知道如何通过PC/Eclipse将我的HID设备连接到模拟器,以便应用程序可以检测并读写设备吗?
我尝试过列出当前连接的USB设备,但它没有显示任何设备,你们肯定会猜到的。
有任何想法吗?
谢谢。
4个回答

16

Android模拟器基于QEMU。即使模拟器版本很古老,似乎也支持从主机传递USB设备。但似乎并不适用于ARM设备,仿真的ARM机器没有USB控制器。(我已经尝试在基于Linux 3.4的goldfish_armv7内核上启用所有USB主机控制器,但没有成功。默认的emulator goldfish_armv7内核甚至没有启用Host USB。)

如果你不限于ARM设备并且可以使用x86,则建议查看http://www.android-x86.org/,其镜像可以与标准QEMU i386(或x86_64)机器一起使用。这也通过在Linux上使用KVM扩展获得更好的性能。

要通过设备ID为1234和设备ID为abcd的供应商ID传递USB设备,可以运行模拟器命令:

emulator -avd x86-machine -qemu -usb -usbdevice host:1234:abcd

或者,当使用 QEMU 时:

qemu-system-i386 -m 1G -cdrom android-x86.iso -usb -usbdevice host:1234:abcd

你需要对/dev/bus/usb/XXX/YYY具有读写权限,为此你可以创建一个udev规则,例如:

SUBSYSTEM!="usb", GOTO="end_skip_usb"
ATTRS{idVendor}=="1234", ATTRS{idProduct}=="abcd", TAG+="uaccess"
LABEL="end_skip_usb"
现在,插入USB设备后,您的模拟器应该能够识别USB设备。这是在安装了Android x86 4.3映像的Linux系统上进行测试的。

命令 qemu-system-x86_64 -device help 列出了所有可能的虚拟设备名称;当我像 -usb -readconfig .android/avd/intel-pch-xhci.cfg 这样加载它们时。 - Martin Zeitler
1
我认为明确指出-usbdevice主机选项仅适用于Linux会更好。来源:-https://qemu.weilnetz.de/doc/qemu-doc.html-2.3.3 USB选项 - Tom
正如@Lekensteyn所说,对我来说确实需要额外的驱动程序,我不得不重建内核并启用usb API:https://gist.github.com/Alabate/200f021e644baed84993dd6109811ba2 - Alabate
模拟器30.0.36允许在Windows上进行USB穿透。更多新功能和增强请参见https://developer.android.com/studio/releases/emulator#other_new_features_and_enhancements - Matthias Wiedemann
在Mac上,我可以转到“苹果菜单/关于本机/系统报告”获取供应商ID,但如何获取设备ID?我使用生产ID,但它会抛出错误“无法添加USB设备'host:0x0483:0x5740'”。 - thanhbinh84
显示剩余2条评论

9
据我所知,这是不可能的。 Android模拟器无法模拟真实设备中存在的许多功能...但这让我想起了一次尝试通过蓝牙运行ADB的尝试
这不是直接回答你的问题,但也许可以帮助你找到像我一样的解决方法:在物理x86上安装一个“模拟器”(双启动),并使用我的帖子中提到的链接通过WiFi或蓝牙完成你正在尝试做的事情。
希望这有所帮助。

3
使用VirtualBox或VM Player创建Android虚拟机,并使用此镜像连接USB并使用ADB连接(您的设备IP)与Eclipse进行连接。请参考下图:enter image description here

0

使用位于此处的android-x86-4.0-r1-eeepc.iso映像文件,在Windows 7宿主机上的Virtualbox中安装了Android虚拟机(由于我公司电脑锁定了BIOS,无法启用vt-x仿真,所以只能安装4.4之前的版本)。然后插入USB驱动器,在Virtualbox Manager中打开VM - Settings - USB,点击右边第二个带有加号标志的图标,选择USB驱动器。Virtualbox随后为USB驱动器安装驱动程序。完成后,启动Android虚拟机。启动OpenManager,转到mnt/USB,就能看到USB驱动器中的文件啦!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接