我正在开发一个通过 jni 使用 libusb 的应用程序。此应用程序目前仅针对有根、USB 主机的 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>
所有 .so 本机库都是我在 /system/lib 上安装(以 root 身份)的基础架构的一部分,然后可由简单用户运行的 java 活动使用。
这意味着整个 USB 通信必须从本机端完成。
我得到了一切正常工作,除了一个问题 - USB 权限:/dev/bus/usb/ 条目的默认权限是(0660,uid=root,gid=usb)。
显然,运行本机代码的标准 java 进程不满足上述任何要求,迫使我“chmod 666”相应的 /dev 条目,以使其正常工作。
但是,此解决方案不是很好,因为它无法在重新启动或拔出/重新插入设备后继续存在(权限返回 0660)。
我正在寻找的解决方案需要:
- 在重新启动/重新插入后幸存
- 由root安装~一次~,而不是每次都打扰用户获得权限
- 通用并在所有(/大多数)android 3+机器上运行
- [非强制性] 提供必要的最少凭据
我想到的方向:
- 更改 /init.rc 或 /ueventd.rc 中的权限 --> 每次重新启动时都会覆盖两者
- 使用 devmode=0666 安装 usbfs /proc/bus/usb --> 可以重新插入,但不能重新启动
- 让我的进程加入“usb”组?--> 我尝试了 android.permission.ACCESS_USB,但它不起作用/不支持...:/
有任何想法吗?:-)
谢谢!