i am developing an Application that uses libusb via jni. this application is currently targeted only to rooted, usb-host Android 3+ machines.
the scenario is as follows:
<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>
all the .so native libraries are part of an infrastructure that i install (as root) on /system/lib, which then can be used by java Activities, run by the simple users.
that means that the whole usb communication must be done from the native side.
i got everything to work fine, except for one issue - the usb permissions: the default permissions of /dev/bus/usb/ entries are (0660, uid= root, gid= usb).
obviously, a standard java process running a native code does not meet any of the above requirements, forcing me to "chmod 666" the corresponding /dev entry, to get this working.
this solution is not so good, though, because it does not survive reboot, or unplugging/replugging of the device (permissions go back to 0660).
the solution i'm looking for needs to:
- survive reboot/replugging
- be installed ~once~ by the root, and not involve bothering the user every time to gain permissions
- be generic and run on all (/most) android 3+ machines
- [not mandatory] gives the minimal credentials necessary
directions i thought of:
- changing permissions in /init.rc or /ueventd.rc --> both are overridden on every reboot
- mounting usbfs /proc/bus/usb with devmode=0666 --> survives replugging, but not reboot
- making my process join the "usb" group? --> i tried android.permission.ACCESS_USB, but it doesnt work/supported... :/
any ideas? :-)
thanks!