我想在我的 Android 应用程序(java GUI + 本机(C++)核心)中使用 libusb。我已经编译了libusb并尝试调用它的函数,但是libusb_open返回LIBUSB_ERROR_ACCESS。我认为 USB 访问权限有问题,但我不知道如何解决该问题。所以,这里有两个问题:
1) 如何让 libusb 在已 root 的 Android 3.1 设备上运行?
2) 是否可以在未 root 的出厂默认设备上使用 libusb?
提前致谢。
P.S. 至于问题 1,我已经尝试对 /dev/bus/usb 执行 chmod 666,但它显示“权限被拒绝”(请注意,我的设备已 root)。
附言mount usbfs none /proc/bus/usb -o devmode=0666 甚至不执行,就好像我拼错了一些东西(但我没有)。
我确信可以让 libusb 在具有 USB 主机的 root 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 https://gitlab.com/madresistor/libusb/blob/android/README
旧链接(死链接)这里是解决方案:https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993 https://github.com/martinmarinov/rtl_tcp_andro-/blob/master/jni/libusb-andro/libusb/core.c#L993
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)