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