如何为libusb android应用程序提供/ dev/bus/usb权限?

Nul*_*def 14 permissions usb android libusb android-ndk

我正在开发一个通过jni使用libusb的应用程序.此应用程序目前仅针对root,usb-host Android 3+计算机.

方案如下:

<java Activity>
       loads <jni_wrapper.so>
               which wraps <my_main_lib.so>
                       that uses <libusb.so>
                               that needs rw access to: /dev/bus/usb/<device>
Run Code Online (Sandbox Code Playgroud)

所有.so本机库都是我在/ system/lib上安装(作为root)的基础结构的一部分,然后由简单用户运行的java Activities可以使用它们.

这意味着整个USB通信必须从原生方面完成.

我得到了一切正常工作,除了一个问题 - usb权限:/ dev/bus/usb/entries的默认权限是(0660,uid = root,gid = usb).

显然,运行本机代码的标准java进程不符合上述任何要求,迫使我"chmod 666"相应的/ dev条目,以使其正常工作.

但是,这个解决方案并不是那么好,因为它不会在重新启动或拔出/重新插入设备后继续存在(权限会回到0660).

我正在寻找的解决方案需要:

  • 生存重启/重新插入
  • 由root安装〜一次〜而不是每次都要打扰用户获取权限
  • 是通用的,并在所有(/大多数)android 3+机器上运行
  • [非强制性]提供必要的最低凭证

我想到的方向:

  • 更改/init.rc或/ueventd.rc中的权限 - >每次重新启动时都会覆盖这两个权限
  • 安装usbfs/proc/bus/usb与devmode = 0666 - >幸存重新插入,但不能重启
  • 让我的进程加入"usb"组? - >我试过android.permission.ACCESS_USB,但它不起作用/支持......:/

有任何想法吗?:-)

谢谢!

Ped*_*aca 1

我有同样的问题,我在 ndk 中解决了这个问题,更改 /proc/bus/usb 作为你的情况下安装 usb 的位置。希望能帮助到你。

r = system("su -c \"chmod -R 777 /proc/bus/usb/\"");
if(r!=0) {
    LOGD("Could not grant permissions to USB\n");
    eturn CANT_GRAN_PERMISSION_USB;
}
Run Code Online (Sandbox Code Playgroud)