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