我想在我的Android应用(java GUI + native(C++)核心)中使用libusb。我已经编译了libusb并尝试调用其函数,但是libusb_open返回LIBUSB_ERROR_ACCESS。我想USB访问权限有问题,但是我不知道如何解决该问题。因此,这里有2个问题:
1)如何使libusb在 Root过的Android 3.1设备上运行?
2)是否可以在无根的工厂默认设备上使用libusb?
提前致谢。
P. S.关于问题1,我已经尝试将chmod 666用于/dev/bus/usb,但是它显示“权限被拒绝”(请注意,我的设备已 Root )。
P.P.S.挂载usbfs none/proc/bus/usb -o devmode = 0666甚至不执行,好像我拼错了什么(但我没有)。
我知道有可能让libusb在带有USB主机的有根Android设备上运行,但是我从未对其进行管理,因此我不得不将应用程序限制为Android 3.1+并使用USB API。
最佳答案
在android中,您无法使用libusb直接打开USB设备(这是您得出的结论:)。
为什么您无法打开?
您需要获得Android系统(!=内核)的许可才能打开设备。
用Java来做:
当您请求时,会向用户显示一个弹出窗口以接受或拒绝。
因此,您需要在Java中打开设备,并使用Java提取fd并传递给libusb,以便它可以与设备通信。
现在libusb将如何建立fd的句柄?
更新:我维护了一个特定于Android的libusb版本(具有更多修复程序-经过测试/在Android 5.1及更低版本上运行)。见https://gitlab.com/madresistor/libusb/blob/android/README
OLD LINK(DEAD LINK)这里的解决方案:
https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993
关于android-ndk - 在Android应用程序: how to allow application to access USB中使用libusb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7469518/