gpt4 book ai didi

android - 如何为 libusb android 应用程序授予/dev/bus/usb 权限?

转载 作者:可可西里 更新时间:2023-11-01 19:07:08 25 4
gpt4 key购买 nike

我正在开发一个通过 jni 使用 libusb 的应用程序。此应用程序目前仅针对 root,usb-hostAndroid 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>

所有 .so native 库都是我在/system/lib 上安装(以根用户身份)的基础架构的一部分,然后可以由简单用户运行的 java Activity 使用。

这意味着整个 USB 通信必须从 native 端完成。

除了一个问题 - USB 权限外,我一切正常:/dev/bus/usb/条目的默认权限是 (0660, uid= root, gid= usb)。

显然,运行 native 代码的标准 java 进程不满足上述任何要求,迫使我“chmod 666”相应的/dev 条目,以使其正常工作。

不过,这个解决方案并不是很好,因为它无法在重启或拔下/重新插入设备(权限返回到 0660)后继续存在。

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

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

我想到的方向:

  • 更改/init.rc 或/ueventd.rc 中的权限 --> 每次重新启动时都将被覆盖
  • 使用 devmode=0666 挂载 usbfs/proc/bus/usb --> 重新插入后仍然存在,但不会重启
  • 让我的进程加入“usb”组? --> 我试过 android.permission.ACCESS_USB,但它不工作/不支持...:/

有什么想法吗? :-)

谢谢!

最佳答案

我有同样的问题,我在 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;
}

关于android - 如何为 libusb android 应用程序授予/dev/bus/usb 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7415346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com