【发布时间】:2011-11-16 22:31:12
【问题描述】:
我正在开发一个通过 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,但它不起作用/不支持...:/
有什么想法吗? :-)
谢谢!
【问题讨论】:
-
这里有同样的问题。对任何解决方案都非常感兴趣。
-
嗨,你让它工作了吗?我正在做类似的事情并使用无根电话。
标签: android permissions usb android-ndk libusb