Comment donner des permissions / dev / bus / usb pour les applications Android libusb?

je développe une Application qui utilise libusb via jni.
cette application est actuellement ciblé uniquement à enracinée, hôte usb
Android 3+ machines.

le scénario est comme suit:

<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>

tous les .donc bibliothèques natives font partie d'une infrastructure qui j'ai installer (en tant que root) sur /system/lib,
qui peuvent ensuite être utilisés par les Activités java, géré par les simples utilisateurs.

qui signifie que l'ensemble de la communication usb doit être fait à partir du natif de côté.

j'ai tout fonctionne bien, sauf pour une question - usb autorisations:
les autorisations par défaut de /dev/bus/usb/entrées sont (0660, uid= root, gid= usb).

évidemment, un standard de java processus de l'exécution d'un code natif ne satisfait à aucun des critères ci-dessus, m'obligeant à "chmod 666" le correspondant entrée /dev, pour faire ce travail.

cette solution n'est pas si bon, si, parce qu'il ne survivra pas à redémarrer, ou en débranchant/rebranchant de l'appareil (autorisations de revenir à 0660).

la solution, je suis à la recherche pour les besoins de:

  • survivre reboot/rebranchant
  • être installé ~une fois~ par la racine, et impliquent pas gêner l'utilisateur à chaque fois pour gagner des autorisations
  • être générique et fonctionnent sur toutes les (/plus) android 3+ machines
  • [pas obligatoire] donne le minimum d'informations d'identification nécessaires

les directions j'ai pensé:

  • de modifier les autorisations /init.rc ou /ueventd.rc --> les deux sont remplacées à chaque redémarrage
  • montage d'un nouveau nom: usbfs /proc/bus/usb avec devmode=0666 --> survit rebrancher, mais pas de redémarrage
  • faire mon processus de rejoindre le "usb" du groupe? --> j'ai essayé android.la permission.ACCESS_USB, mais il ne marche pas/pris en charge... :/

des idées? 🙂

merci!

source d'informationauteur Nulldef