Разработвам приложение, което използва libusb чрез jni. това приложение в момента е насочено само към вкоренени, 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 са част от инфраструктура, която инсталирам (като 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, но не работи/поддържа се... :/
някакви идеи? :-)
Благодаря!