1

我有一个内置 USB 主机支持的三星 Galaxy SII,还有一个也有 USB 主机“被入侵”的摩托罗拉 Droid(原版)。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 构建一个独立的应用程序,它就可以工作。

4

0 回答 0