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
Vous devez vous connecter pour publier un commentaire.
J'ai le même problème et je le résoudre à le faire dans le ndk, la modification de /proc/bus/usb pour où usb est monté dans votre cas. Espérons que cela aide.
Il y a un peu de méthode, de libusb de l'équipe de développeur. pour mon cas, je sélectionne la première méthode.
à partir de:https://github.com/libusb/libusb/blob/master/android/README
Edit:
Après re-lecture de la question, il est clair que j'ai mal compris que la machine hôte est en cours d'exécution Android. Comme udev n'existe pas sous Android, la réponse ci-dessous ne permet pas de répondre à la question. Je quitte cette réponse ici au cas où quelqu'un est à la recherche d'informations sur les appareils Android reconnue par un non-Android linux PC hôte.
Fin Modifier
Les autorisations par défaut sur les pilotes (/dev/bus/usb/###/###) sont déterminés par udev. En particulier, il analyse les fichiers de configuration dans /etc/udev/rules.d et /lib/udev/rules.d dans l'ordre numérique pour déterminer les valeurs par défaut.
Pour remplacer les valeurs par défaut, vous devrez créer votre propre udev .fichier de règles. Pour ce faire, vous avez besoin de l'ID de fournisseur de l'appareil que vous souhaitez accorder l'autorisation d'. lsusb affichera l'id de périphérique pour un instrument en particulier, et si vous voulez une liste de tous les fournisseurs, vous pouvez essayer cette.
Dans votre /etc/udev/rules.d/99-android.les règles de fichier, remplissez la ligne suivante pour chaque fournisseur que vous souhaitez soutenir:
Notez que dans l'exemple lié ci-dessus, ils utilisent = au lieu de := et SYSFS au lieu de ATTRS. Je ne sais pas pourquoi, mais j'ai trouvé que ce fichier ne fonctionne pas mot à mot sur ma machine.
Après l'écriture du fichier,
et re-brancher votre appareil. Il devrait maintenant par défaut à 666 autorisations.
J'ai trouvé la solution sans l'enracinement de l'appareil.
Testé sur Android 4.2.2 version de Noyau 3.3.39
Tout ce que vous devez faire est d'ajouter votre application dans le groupe "usb"
Sans racine, vous pouvez utiliser les autorisations de fichier /system/etc/permissions/platform.xml
Choisir une autorisation que vous n'utilisez pas, par exemple "android.la permission.L'APPAREIL photo".
Modifier /system/etc/permissions/platform.xml comme ceci:
Ajoutez
<uses-permission android:name="android.permission.CAMERA" />
pour votre fichier de manifeste d'application, et de profiter de libusb usb accessible!