我有三星Galaxy SII内置USB主机支持,还有摩托罗拉Droid(原版)也有USB主机“黑客入侵”.SGSII运行Android 3.x,Droid运行2.x.
我将libusb-compat移植到Android(主要是交叉编译它),这样我就可以插入一个外部设备并使用它,它有一个驱动需要libusb-compat。驱动程序也移植到Android并链接到我的libusb-compat端口。最重要的是一个具有JNI接口的应用程序,可以使用驱动程序和libusb-compat。
在运行Android 2.x的Droid上,所有这一切都很完美。我可以用我的移植驱动程序初始化设备,它可以使用libusb-compat来做它的事情。
但是,在运行3.x的SGSII上,调用libusb-compat列出USB设备,查询它们等都失败了。从我的应用程序中运行的Libusb-compat能够找到根USB总线,但USB设备列表总是空的,对它们的查询失败。
现在,如果我编译一个链接到libusb-compat的简单独立可执行文件,只是尝试列出USB设备并在我的应用程序的外部运行它(例如,在adb shell中),它能够在SGSII上找到根总线和所有USB设备。这让我相信应用程序在Android 3.x上运行的沙箱阻止了libusb-compat访问USB设备。可能是支持USB主机的设备上的权限问题。
我尝试将此添加到我的清单中,但它没有帮助:
<uses-feature android:name="android.hardware.usb.host" />
我做错了什么或者需要添加libusb-compat才能在我的应用程序中工作?同样,如果我使用使用libusb-compat驱动程序的ndk构建一个独立的应用程序,它就可以工作。