J'ai un HTC Desire sur lequel j'aimerais déboguer et exécuter mon application Android. Mais lorsque je sous Eclipse obtient la fenêtre où je peux choisir entre les appareils, mon HTC Desire est répertorié avec uniquement des points d'interrogation (????????). Qu'est-ce que je fais mal?
J'ai essayé ceci:
Activation du débogage USB sur mon périphérique et activation du débogage dans le fichier Manifest.xml de mon application.
Dans le terminal, je fais ceci:
Quoi d'autre pourrais-je essayer ou avoir oublié?
Vous devez exécuter adb manuellement à l'aide de Sudo. Si vous exécutez simplement adb sans Sudo (ou si vous laissez Eclipse/ADT le faire pour vous), il ne disposera pas des autorisations nécessaires pour voir vos appareils.
S'il est déjà en cours d'exécution, alors Sudo adb kill-server et Sudo adb start-server.
Je sais que c'est un vieux fil de question, mais je suis tombé sur lui en essayant de résoudre le même problème. Cependant, la réponse acceptée était incorrecte. Il ne devrait pas être nécessaire d’exécuter le serveur adb en tant que root une fois que vos règles udev sont correctement définies.
L'étape 3 de http://developer.Android.com/tools/device.html vous donne la résolution correcte. Plus précisément, ajoutez ou modifiez /etc/udev/rules.d/51-Android.rules avec la ligne suivante:
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0666", GROUP="plugdev"
Dans ce cas, 0bb4 est l'identifiant du fournisseur pour HTC. 0fff est l'identifiant du produit pour Nexus One. Utilisez le tableau au lien ci-dessus ou lsusb pour identifier l'ID de fournisseur et l'ID de produit de votre périphérique. par exemple
$ lsusb
Bus 001 Device 006: ID 18d1:4e22 Google Inc. Nexus S (debug)
18d1 est l'identifiant du fournisseur de ce périphérique particulier et 4e22 l'identifiant du produit. Vous pouvez désactiver la définition "GROUP" si vous souhaitez activer l'accès à cet appareil à tous les utilisateurs. Sinon, assurez-vous de vous ajouter au groupe plugdev si vous n'y êtes pas déjà. Après avoir créé ce fichier, redémarrez ou rechargez udev.
udevadm control --reload-rules
Si vous deviez vous ajouter à un groupe, vous devrez vous déconnecter puis vous reconnecter.
Tuez tous vos anciens serveurs adb avec "adb kill-server", branchez votre appareil et lancez "adb devices". Cela va redémarrer le serveur et vous devriez maintenant voir votre appareil. L'exécution de adb en tant que root, même pour démarrer le serveur adb, n'est pas obligatoire. C’est aussi généralement une mauvaise idée d’exécuter des tâches en tant que root, sauf si cela est absolument nécessaire.
l'identifiant de périphérique dans la commande adb devices
utilise en fait le numéro de série des périphériques usb Android.
Donc, si vous obtenez une chaîne nulle à partir du numéro de série, il affichera ???????????
Dans le code source du serveur adb:
static size_t format_transport(atransport *t, char *buf, size_t bufsize,
int long_listing)
{
const char* serial = t->serial;
if (!serial || !serial[0])
serial = "????????????";
Donc, il se peut que votre serveur adb ne fonctionne pas avec le privilège root ou que vos périphériques usb n'autorisent pas la lecture par le serveur adb. Une simple vérification consisterait à utiliser lsusb -v | grep iSerial pour voir si vous pouvez obtenir le champ iSerial de votre appareil Android.
En outre, il est probable que la chaîne iSerial ne soit pas bien préparée dans l'appareil. J'ai constaté qu'un grand nombre de produits d'ingénierie n'avaient pas du tout l'iSerial ou que tous les périphériques affichaient le même identifiant.
Parfois, le pilote lit une section de données dans le flash, qui est programmée de manière unique d’un périphérique à l’autre pour en faire un identifiant iSerial/périphérique.
J'ai réussi à faire fonctionner mon Nexus S "en brique" en reprenant ce qui est dit ici. Un petit ajout était toutefois nécessaire.
Lorsque vous faites une lsusb
et que le sous-système USB vous indique quel périphérique Android est connecté, le mien me rendait mon message:
$ lsusb
Bus 001 Device 006: ID 18d1:d001 Google Inc.
Notez le d001 et pas l'un des états connus, à savoir 4e20, 4e21 ou 4e22. Donc, ce que j'ai fait est d'ajouter une autre ligne dans 51-Android.rules
spécifiquement avec ceci inconnu Etat et marquez-le comme "recovery/debug".
Déconnectez et reconnectez Android. Vérifiez à nouveau lsusb
pour vous assurer qu'il est au moins vu. Et ... ça m'a donné ça
$ adb devices
List of devices attached
34353601BB2000EC recovery
au lieu de cela
$ adb devices -l
List of devices attached
???????????? no permissions usb:1-3
Après cela, j'ai simplement suivi le howto pour restaurer les images d'usine . J'espère que ça aide.
C'est parce que vous n'avez pas donné à votre annonce la permission d'accéder à votre matériel. Vous avez deux solutions:
temporaire -> tuer tous les processus adb existants et redémarrer avec le super utilisateur
ps -ef | grep adb | awk '{print $2}' | xargs kill
Sudo adb server-restart
ou
Sudo <your Android SDK path>/platform-tools/adb server-restart
permanent -> ajouter vos périphériques à la liste udev Ajouter la ligne suivante à votre /etc/udev/rules.d/51-Android.rules en tant que racine avec correct idVendor en utilisant cette liste .
SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666", GROUP="plugdev"
suivi de la commande suivante:
chmod a+r /etc/udev/rules.d/51-Android.rules
Si adb ne fonctionne pas, procédez comme suit:
Sudo ln -s <your Android SDK path>/platform-tools/adb /usr/local/sbin/adb
Assurez-vous d’avoir installé Sudo apt-get installer Android-tools-adb . Maintenant, cochez Sudo adb . L’aide de adb sera affichée.
Maintenant, s'il vous plaît, tuez/démarrez adb, utilisez les commandes suivantes -
Sudo adb kill-server Sudo adb start-server
Enfin, Appareils Sudo adb
Espérons que cela fonctionnera !!!