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:
dans mon fichier de projet AndroidManifest.xml
, ajouté Android:debuggable="true"
à l'élément <application>
Sur le périphérique, dans le Paramètres> Sécurité activé Sources inconnues
Sur le périphérique, dans le Paramètres> Options du développeur activé débogage USB
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"
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?
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.
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
.
Entrez les commandes suivantes:
adb kill-server
Sudo ./adb start-server
adb devices
Le problème est que votre serveur adb ne fonctionne pas en tant que root.
Essayé tous ci-dessus, aucun a fonctionné .. a finalement fonctionné quand je commute connecté à partir de MTP à la caméra (PTP).
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 .
Dans Archlinux, cela peut arriver de temps en temps. Le correctif:
$ Sudo -s
# adb kill-server
# adb start-server
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.
J'ai eu le même problème, la solution est comme camarade: (au fait, vous n'avez pas besoin de rooter votre appareil.)
Prendre plaisir.
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!
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
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écutionSudo 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.
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-adb
sur la documentation officielle , et le problème a été résolu pour moi.
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:
Android-udev
avec PacmanRecharger les règles udev:
# udevadm control --reload-rules
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
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.
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
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.
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.
Essayez au lieu de GROUP="plugdev"
utilisez le groupe principal de votre utilisateur.
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.