web-dev-qa-db-fra.com

configurer le périphérique pour le développement (????????????? aucune autorisation)

J'utilise un téléphone Samsung Galaxy () (plate-forme Android 4.).

Je développe l'application Android sur le système d'exploitation Linux Ubuntu. Je souhaite exécuter mon application directement sur le combiné Samsung. J'ai donc effectué les étapes de configuration suivantes:

  1. dans mon fichier de projet AndroidManifest.xml, ajouté Android:debuggable="true" à l'élément <application>

  2. Sur le périphérique, dans le Paramètres> Sécurité activé Sources inconnues

  3. Sur le périphérique, dans le Paramètres> Options du développeur activé débogage USB

  4. Sur mon ordinateur, j'ai créé le fichier /etc/udev/rules.d/51-Android.rules avec le contenu suivant:

    SUBSYSTEM=="usb", ATTR{idVendor}=="04E8", MODE="0666", GROUP="plugdev" 
    
  5. Sur mon ordinateur, exécutez la commande chmod a+r /etc/udev/rules.d/51-Android.rules

Ensuite, sur mon ordinateur, j'ai ouvert un terminal et exécuté la commande adb devices.

List of devices attached 
????????????    no permissions

Comme je n'ai pas vu mon périphérique mais uniquement ???????????? no permissions, j'ai alors exécuté les commandes suivantes:

 adb kill-server
 adb start-server
 adb devices

Mais j'ai encore:

List of devices attached 
????????????    no permissions

Pourquoi? Qu'est-ce que je rate?

270
Leem.fin

Ce qui fonctionne pour moi est de tuer et de redémarrer le serveur adb. Sur linux: Sudo adb kill-server puis Sudo adb start-server. Ensuite, il détectera presque tous les périphériques hors de la boîte.

441
WarrenFaith

Rien n'a fonctionné pour moi jusqu'à ce que j'ai finalement trouvé la réponse ici: http://ptspts.blogspot.co.il/2011/10/how-to-fix-adb-no-permissions-error-on.html

Je copie le texte ici au cas où il disparaîtrait à l'avenir.

Créez un fichier nommé /tmp/Android.rules avec le contenu suivant (les numéros de fournisseur hexadécimaux ont été extraits de la page de la liste des fournisseurs):

SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="413c", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0489", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2116", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="17ef", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="22b8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2080", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2257", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1d4d", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04da", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="05c6", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1f53", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="04dd", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1bbb", MODE="0666"

Exécutez les commandes suivantes:

Sudo cp /tmp/Android.rules /etc/udev/rules.d/51-Android.rules
Sudo chmod 644   /etc/udev/rules.d/51-Android.rules
Sudo chown root. /etc/udev/rules.d/51-Android.rules
Sudo service udev restart
Sudo killall adb

Débranchez le câble USB entre le téléphone et l'ordinateur.

Reconnectez le téléphone.

Exécutez adb devices pour confirmer que maintenant, il est autorisé à accéder au téléphone.

Veuillez noter qu'il est possible d'utiliser , USER="$LOGINNAME" au lieu de , MODE="0666" dans le fichier .rules, en remplaçant $LOGINNAME par votre nom de connexion, c'est-à-dire ce que id -nu imprime.

Dans certains cas, il peut être nécessaire de donner au fichier de règles udev un nom proche de la fin, tel que z51-Android.rules.

340
grebulon

Entrez les commandes suivantes:

adb kill-serverSudo ./adb start-serveradb devices

Le problème est que votre serveur adb ne fonctionne pas en tant que root.

76
iancrowther

Essayé tous ci-dessus, aucun a fonctionné .. a finalement fonctionné quand je commute connecté à partir de MTP à la caméra (PTP).

50
Sabeer Mohammed

Il y a beaucoup de mauvaises réponses à cette question, allant d'insister pour que adb soit exécuté comme root (qui ne devrait pas être présenté comme la solution unique ou même recommandée) à la résolution de problèmes totalement indépendants les uns des autres.

Voici la recette la plus courte et la plus universelle pour gérer les autorisations pour tous les adb et fastboot :

echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:ff420?:*", MODE="0666"' | Sudo tee /etc/udev/rules.d/99-Android.rules
Sudo udevadm control --reload-rules
Sudo udevadm trigger --verbose --action=add --subsystem-match=usb

Ou vous pouvez utiliser une version légèrement plus longue que j'ai posté à cette Gist .

En ce qui concerne la chose spécifique que OP a mal faite dans sa question - il ne s'agissait pas de recharger les règles udev après avoir modifié le fichier .rules.

En outre, OP n'a pas précisé quelle Android version (ROM) il avait sur son téléphone. La valeur idVendor est définie dans le logiciel et dépend donc de la ROM. Ainsi, la valeur de 04E8 qu'il avait utilisée dans sa règle d'origine n'aurait fonctionné que pour les appareils dotés de ROM standard Samsung. Mais ceci n’est pas un problème pour cette règle udev - elle correspond à tous les périphériques dotés des interfaces adb ou fastboot quel que soit leur VendorID .

28
Alex P.

Dans Archlinux, cela peut arriver de temps en temps. Le correctif:

$ Sudo -s
# adb kill-server
# adb start-server
16
Keenan Verbrugge

Pour ceux qui utilisent debian, le guide pour configurer un périphérique sous Ubuntu afin de créer le fichier "/etc/udev/rules.d/51-Android.rules" ne fonctionne pas. J'ai suivi les instructions de ici . Posant la même chose ici pour référence.

Editer ce fichier en tant que superutilisateur

Sudo nano /lib/udev/rules.d/91-permissions.rules

Trouvez le texte semblable à ceci

# usbfs-like devices 
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0664″

Puis changez le mode en 0666 comme ci-dessous

# usbfs-like devices 
SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, \ MODE=”0666″

Cela permet à adb de fonctionner, mais nous avons encore besoin de configurer le périphérique pour qu'il puisse être reconnu. Nous devons créer ce fichier en tant que superutilisateur,

Sudo nano /lib/udev/rules.d/99-Android.rules

et entrez

SUBSYSTEM==”usb”, ENV{DEVTYPE}==”usb_device”, ATTRS{idVendor}==”0bb4″, MODE=”0666″

la ligne ci-dessus est pour HTC, suivez le post de @ grebulon pour une liste complète.

Enregistrez le fichier puis redémarrez udev en tant que super utilisateur.

Sudo /etc/init.d/udev restart

Connectez le téléphone via USB et il devrait être détecté lorsque vous compilez et exécutez un projet.

8
jaga

J'ai eu le même problème, la solution est comme camarade: (au fait, vous n'avez pas besoin de rooter votre appareil.)

  1. Tapez "su" pour passer en super utilisateur.
  2. votre-chemin/adb kill-server.
  3. votre-chemin/serveur de démarrage adb.
  4. Si aucune erreur ne se produit, vous pouvez voir la liste des périphériques avec "périphériques your-path/adb" dans le compte root.
  5. Quittez le super utilisateur.
  6. Maintenant, vous pouvez effectuer des "appareils adb" dans votre compte.

Prendre plaisir.

5
Jeffrey Yang

J'ai eu le même problème avec mon Galaxy S3. Mon problème était que la idVendor valeur 04E8 n'était pas la bonne. Pour trouver le bon, connectez votre smartphone à l'ordinateur et exécutez lsusb dans le terminal. Il listera votre smartphone comme ceci:

Bus 002 Device 010: ID 18d1:d002 Google Inc.

La valeur idVendor correcte est donc 18d1. Et la ligne dans le /etc/udev/rules.d/51-Android.rules doit être:

SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

Puis je lance Sudo udevadm control --reload-rules et tout fonctionne!

4
Ulli

Je sais que cela pourrait être un peu tard, mais voici un très bon article sur la façon d'ajouter manuellement Android ADB USB Driver. Ajout manuel de Android Pilote USB ADB dans Ubuntu 14.04 LTS

Modifié pour ajouter du contenu de lien

Pas

Remarque: Assurez-vous d'avoir connecté votre périphérique Android au débogage USB . mode

Ouvrez le terminal (CTRL + ALT + T) et entrez la commande: lsusb

Vous pouvez maintenant obtenir une réponse similaire à ceci:
Bus 002 Device 013: ID 283b:1024

Note: En référence à ceci Bus 002 Device 008: ID 283b:1024
{idVendor}==”283b” {idProduct}==”1024″

Maintenant, entrez la commande suivante: Sudo gedit /etc/udev/rules.d/51-Android.rules
Ceci crée le fichier de règles Android (51-Android.rules) ou ouvre le fichier existant à l'emplacement spécifié (/etc/udev/rules.d).

Ajouter une nouvelle ligne à ce fichier:
SUBSYSTEM==”usb”, ATTRS{idVendor}==”283b”, ATTRS{idProduct}==”1024″, MODE=”0666″

Remarque Éditez les valeurs idVendor & idProduct avec les valeurs de votre appareil. Sauver et fermer.

Maintenant, entrez la commande suivante:
Sudo chmod a+rx /etc/udev/rules.d/51-Android.rules - accorder l'autorisation de lecture/exécution
Sudo service udev restart - Redémarrez le service udev

Nous devons maintenant ajouter la idVendor à adb_usb.ini. Entrez les commandes suivantes:
cd ~/.Android
gedit adb_usb.ini

Ajoutez la valeur suivante 0x283b

Ce n'est rien d'autre que 0x (valeur idVendor). Alors remplacez la valeur par. respect de la valeur de votre appareil Enregistrez et fermez le fichier.

Maintenant, entrez la commande suivante:
Sudo service udev restart

Débranchez le périphérique Android et reconnectez-le à nouveau.
Maintenant, entrez la commande suivante:
adb kill-server
adb devices

Voilà! Votre appareil doit être répertorié.

Copié à partir de Ajout manuel de Android Pilote USB ADB dans Ubuntu 14.04 LTS

Travaillé pour moi.

4
dc-aoxn

Utilisez le M0Rf30/Android-udev-rules La communauté GitHub a maintenu les règles udev

https://github.com/M0Rf30/Android-udev-rules/blob/master/51-Android.rules

C’est la liste de règles udev la plus complète que j’ai vue jusqu’à présent, bien plus que la recommandation actuellement recommandée Sudo apt-get install Android-tools-adbsur la documentation officielle , et le problème a été résolu pour moi.

  1. Suivez les instructions à la page http://developer.Android.com/guide/developing/device.html
  2. Remplacez l’identifiant de fournisseur de "0bb4" par "18d1" dans /etc/udev/rules.d/51-Android.rules. Ou ajoutez une autre ligne indiquant: SOUS-SYSTEME == "usb", SYSFS {idVendor} == "18d1", MODE = "0666"
  3. redémarrez l'ordinateur ou redémarrez simplement le service udev.
2
krishnendu

Vous ne devez PAS exécuter adb serveur en tant que root, comme le suggèrent d’autres réponses. À la place, si vous utilisez Arch Linux, procédez comme suit:

  1. Installer le package Android-udev avec Pacman
  2. Recharger les règles udev:

    # udevadm control --reload-rules
    
  3. Ajoutez-vous au groupe adbusers, puis déconnectez-vous et connectez-vous:

    # usermod -aG adbusers $LOGNAME
    

Source: https://wiki.archlinux.org/index.php/Android#Configuring_adb

1
Babken Vardanyan

Sans débrancher

Toutes les réponses fournies supposent que vous puissiez débrancher et reconnecter le câble USB. Dans les cas où cela n’est pas possible (par exemple, lorsque vous êtes à distance), vous pouvez procéder comme suit pour faire essentiellement ce que les règles udev suggérées feraient lors d’une nouvelle connexion:

lsusb

Trouvez l'appareil qui vous intéresse, par exemple:

Bus 003 Device 005: ID 18d1:4ee4 Google Inc. Nexus

Prenez note du numéro de bus sur lequel il est allumé, puis exécutez-le, par exemple. pour le bus 003:

Sudo chmod a+w /dev/bus/usb/003/*

Clairement, cela peut être plus permissif que vous le souhaitez (il peut y avoir plus de périphériques connectés que celui-ci), mais vous avez l’idée.

1
Christian Fritz

Mon appareil est POSITIVO et mon système opérationnel est Ubuntu 14.04 LTS Mon problème était donc dans le nom de la variable

Je crée le fichier /etc/udev/rules.d/51-Android.rules et mets SUBSYSTEM=="usb", SYSFS{idVendor}=="1662", MODE="0666"

J'ai déconnecté le périphérique et exécuté:

$ Sudo udevadm control --reload-rules
$ Sudo service udev restart

après cela, j’ai connecté à nouveau le périphérique Android en mode développeur et

$ adb devices

List of devices attached 
1A883XB1K   device
1
luciana

Lorsque vous redémarrez udev, arrêtez le serveur adb et démarrez-le. Allez à Android chemin d'installation de sdk et faites tout sur Sudo. puis lancez les périphériques adb, cela résoudra le problème des permissions.

1

Dans mon cas sur Ubuntu 12.04 LTS, je devais changer le mode USB de mon HTC Incredible de charge en média, puis l'appareil apparaissait sous adb. Bien sûr, le débogage était déjà en cours dans les deux cas.

0
Alan

Essayez au lieu de GROUP="plugdev" utilisez le groupe principal de votre utilisateur.

0
Yury

Veuillez NE PAS suivre les solutions suggérant d'utiliser Sudo (Sudo adb start-server)! Cette exécution adb en tant que root (administrateur) et il n'est pas supposé fonctionner comme ça !!! C'est une mauvaise solution de contournement !

Tout ce qui fonctionne en tant que root peut faire n'importe quoi sur votre système. S'il crée ou modifie un fichier, il peut changer son autorisation pour être utilisé uniquement par root. Encore une fois, NE PAS!

La bonne chose à faire est configurée de sorte que l'utilisateur puisse obtenir l'autorisation, consultez ce guide j'ai écrit sur comment le faire correctement.

0
Daniele Segato