Я занимаюсь разработкой приложения, которое использует libusb через jni.в настоящее время это приложение предназначено только для корневых компьютеров Android 3+ с USB-хостом.
сценарий выглядит следующим образом:
<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 являются частью инфраструктуры, котораяЯ устанавливаю (как root) в / system / lib, который затем может быть использован java Activity, запущенным простыми пользователями.
, что означает, что вся связь через usb должна выполняться с нативной стороны.
у меня все работает нормально, кроме одной проблемы - разрешений usb: разрешения по умолчанию для / dev / bus / usb / records (0660, uid = root, gid = usb).
очевидно, что стандартный процесс Java, работающий с нативным кодом, не удовлетворяет ни одному из перечисленных выше требований, вынуждая меня выполнить команду "chmod 666" для соответствующей записи / dev.
это решение не так хорошотем не менее, поскольку он не переживает перезагрузку или отключение / повторное подключение устройства (разрешения возвращаются к 0660).
решение, которое я ищу, должно:
- пережить ребoot / replugging
- быть установленным ~ один раз ~ корневым пользователем, и не требовать, чтобы пользователь каждый раз получал разрешения
- быть универсальным и работать на всех (/ большинстве) устройствах Android 3+
- [не обязательно] дает минимальные необходимые учетные данные
указания, о которых я думал:
- изменение разрешений в /init.rc или /ueventd.rc --> оба переопределяются при каждой перезагрузке
- монтирование usbfs / proc / bus / usb с помощью devmode = 0666 -> переживает повторное подключение, но не перезагружается
- , заставляя мой процесс присоединиться к группе "usb"?-> Я попробовал android.permission.ACCESS_USB, но он не работает / поддерживается ...: /
Есть идеи?: -)
спасибо!