Der Befehl adb Geräte funktioniert nicht

86

Ich verwende Ubuntu 10.10 64 Bit. Ich habe ia32-libs zusammen mit Android Debug Bridge Version 1.0.26 installiert.

Meine Probleme):

  1. adb devices>>> ???????????? Keine Berechtigungen
  2. sudo adb devices >>>> sudo: adb: Befehl nicht gefunden
  3. adb shell >>> Fehler: Unzureichende Berechtigungen für Gerät

Ich denke, diese sind alle verwandt. Hier sind die relevanten Informationen.

$ echo $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/android-sdk-linux_x86/tools:/opt/android-sdk-linux_x86/platform-tools

$ which adb
/opt/android-sdk-linux_x86/platform-tools/adb

$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
????????????    no permissions

$ sudo adb devices
sudo: adb: command not found

$ adb shell
error: insufficient permissions for device

Ich erhalte die gleichen Ergebnisse mit einem gerooteten Moto Droid mit CM6.1 und einem verwurzelten G-Tab mit einem CM7-basierten ROM.

Ich habe die folgenden verwandten Beiträge überprüft:

Ich habe die meisten (nicht alle) Vorschläge ausprobiert und konnte mein Problem nicht lösen. Die Dinge, die ich nicht ausprobiert habe, schienen unangemessen. Ich würde mich über ein paar weitere Tipps freuen und werde die Fehlerbehebung fortsetzen.

Eine Sache, die ich nicht versucht habe, war das Bearbeiten von /etc/udev/rules.d/70-android.rules. Ist das wahrscheinlich das Problem? Ich kann nicht sehen, wie dies zu "sudo: adb: Befehl nicht gefunden" führen würde. Vielleicht hängen meine Probleme nicht alle zusammen. An diesem Punkt denke ich jedenfalls, dass ich etwas Input von anderen Leuten brauche, weil ich nicht glaube, dass ich ein Pfadproblem oder die anderen häufigen Probleme habe, die in diesen anderen Beiträgen diskutiert werden.

EDIT: Gelöst dank EboMike und RivieraKid. Das waren eigentlich zwei verschiedene Probleme:

  1. Punkt 2 oben (sudo: adb: Befehl nicht gefunden) wurde gelöst, indem ein Symlink wie folgt erstellt wurde:

    $ sudo ln -s /opt/android-sdk-linux_x86/platform-tools/adb /usr/local/sbin/adb

    Dadurch konnte ich dann tun, was EboMike vorgeschlagen hatte, und diese Lösung verwenden . Dies war für meinen Moto Droid erforderlich. ( Für mein Viewsonic G-Tablet war es jedoch nicht erforderlich, adb als sudo auszuführen.)

  2. Meine beiden anderen Probleme wurden gelöst, indem die udev-Regel implementiert wurde, wie von RivieraKid vorgeschlagen (über diesen Link ).

MountainX
quelle
Mögliches Duplikat von Ubuntu: Android-Geräte-Debug
EboMike
Punkt 1 hat mir wirklich geholfen. Nicht sicher über Artikel # 2
Francisco Quintero
Mögliches Duplikat des für die Entwicklung eingerichteten Geräts (?????? keine Berechtigungen)
Ciro Santilli 法轮功 冠状 病 六四 事件 21

Antworten:

87

Eine Sache, die ich nicht versucht habe, war das Bearbeiten von /etc/udev/rules.d/70-android.rules. Ist das wahrscheinlich das Problem?

Gibt es einen bestimmten Grund, warum Sie das nicht getan haben? Um die Frage zu beantworten - JA! Die udev-Regeln informieren Ubuntu über Ihr Gerät und ermöglichen User-Space-Tools den Zugriff darauf.

Sie können adb nicht verwenden, ohne die Anweisungen korrekt zu befolgen .

In diesem Sinne sagen Sie jedoch nicht, welche Ubuntu-Version Sie verwenden, aber ich hatte Probleme mit 10.10 - lassen Sie mich wissen, wenn ich den Inhalt meiner Regeldatei veröffentlichen muss.

Mach dir keine Sorgen, dass du adb über sudo laufen lässt, du brauchst es nicht. Mit MODE="0666"der udev-Regel können Sie als beliebiger Benutzer auf das Gerät zugreifen.


BEARBEITEN:

Vergessen Sie nicht, die Regeln neu zu laden:

sudo udevadm control --reload-rules

EDIT # 2:

Wie @Jesse Glick richtig hervorhebt, müssen Sie adb, wenn es bereits im Daemon-Modus ausgeführt wird, auch neu starten, damit dies funktioniert:

sudo adb kill-server

Ich habe hier sudo verwendet, da dies garantiert, dass adb getötet wird, und es ist die offiziell unterstützte Methode, um den Server zu stoppen. Es wird bei der nächsten Verwendung von adb automatisch neu gestartet, diesmal jedoch mit der richtigen Umgebung.

RivieraKid
quelle
1
Danke für den Link . Ich bin mir nicht sicher, wie ich die Tatsache übersehen habe, dass diese Anweisungen offiziell waren. Ich dachte, die Leute machen das als Workaround. Ich habe den Herstellercode für mein Viewsonic GTablet gefunden und die udev-Regel hinzugefügt, und jetzt funktioniert es! Vielen Dank.
MountainX
1
Aus irgendeinem Grund kann ich das Motorola Droid nicht mit ADB-Geräten anzeigen lassen. Jetzt kann ich das GTab und einen Emulator anzeigen lassen, aber nicht den Droid.
MountainX
Siehe oben. Das Ausführen von adb als root führte dazu, dass der Moto Droid angezeigt wurde.
MountainX
$ cat /etc/udev/rules.d/51-android.rules SUBSYSTEM == "usb", SYSFS {idVendor} == "22b8", MODE = "0666" SUBSYSTEM == "usb", SYSFS {idVendor} = = "0955", MODE = "0666"
MountainX
1
… Und Sie müssen den adbDaemon neu starten , wenn er zuvor ausgeführt wurde.
Jesse Glick
22

Sie müssen den ADB-Server als Root neu starten. Siehe hier .

EboMike
quelle
hat nicht funktioniert. Details: me@desktop:/opt/android-sdk-linux_x86/platform-tools$ sudo adb kill-server sudo: adb: command not found me@desktop:/opt/android-sdk-linux_x86/platform-tools$ adb kill-server me@desktop:/opt/android-sdk-linux_x86/platform-tools$ sudo adb start-server sudo: adb: command not found
MountainX
adbist nicht im Weg Ihres Superusers. Geben Sie ein which adb, um herauszufinden, in welchem ​​Pfad es sich befindet, und fügen Sie diesen dem Pfad von root hinzu.
EboMike
Hoffe du kannst das lesen. (Ich weiß nicht, wie ich Kommentare so formatieren soll, dass sie Zeilenumbrüche enthalten.) Adb IS befindet sich im Pfad meines Root-Benutzers. Ich habe den Befehl which adb in meinen ursprünglichen Beitrag eingefügt. Der Pfad lautet / opt / android-sdk-linux_x86 / platform-tools / adb. $ sudo -s root @ desktop: # echo $ PATH / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / X11R6 / bin: / opt / android-sdk-linux_x86 / tools: / opt / android-sdk-linux_x86 / platform-tools
MountainX
1
Hier ist eine seltsame Sache. Ich erhalte unterschiedliche Ergebnisse von "which adb", je nachdem, ob ich es als root oder mit sudo ausführe. Hier ist Ausgabe $ sudo, die adb $
MountainX
Geben Sie dann den vollständigen Pfad an, wenn Sie adb als root ausführen.
EboMike
13

Auf meinem Gentoo / Funtoo-Linux-System habe ich ähnliche Probleme:

Ich habe immer nicht die richtige Gerätebeschreibung und unzureichende Berechtigungen:

# sudo ./adb devices
List of devices attached 
????????????    no permissions
# ./adb usb
error: insufficient permissions for device

Für mich hilft das Howto von Google. In meinem Fall musste ich die udev-Regel hinzufügen:

# cat /etc/udev/rules.d/51-android.rules 
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev" 

und Einrichten der Dateisystemrechte

# chmod a+r /etc/udev/rules.d/51-android.rules

Nach dem erneuten Einstecken meines Smartphones war der Zugriff auf das Telefon erfolgreich. Es wird jetzt auch in der Android-Geräteauswahl von Eclipse angezeigt:

# sudo ./adb devices
List of devices attached 
3XXXXXXXXXXXXXC device
# sudo ./adb usb
restarting in USB mode

Sie müssen auch die Mitgliedschaft Ihres Benutzers in der plugdev- Gruppe überprüfen .

Larkee
quelle
3

Jede Antwort, die ich gelesen habe, zeigt das an SUBSYSTEM=="usb". Mein (vielleicht alter) Udev brauchte dies jedoch zu ändern DRIVER=="usb". Endlich kann ich den ADB-Server als Nicht-Root-Benutzer ausführen ... yay.

Es kann lehrreich sein, die Ausgabe von udevmonitor --env zu betrachten, gefolgt von der Ausgabe von

udevinfo -a -p <DEVICE_PATH_AS_REPORTED_BY-udevmonitor>
anon
quelle
Wenn udevmonitorund udevinfogibt es nicht auf Ihrem Computer, verwenden udevadm monitorund udevadm info -a -p ...stattdessen.
Ash
2

Bitte beachten Sie, dass IDEs wie IntelliJ IDEA dazu neigen, einen eigenen ADB-Server zu starten.

Selbst das manuelle Beenden des Servers und das Ausführen einer neuen Instanz mit sudo hilft hier erst, wenn Ihre IDE den Server selbst beendet.

Sebastianwagner
quelle
2

Der Neustart des ADB-Servers als Root hat bei mir funktioniert. sehen:

derek@zoe:~/Downloads$ adb sideload angler-ota-mtc20f-5a1e93e9.zip 
loading: 'angler-ota-mtc20f-5a1e93e9.zip'
error: insufficient permissions for device
derek@zoe:~/Downloads$ adb devices
List of devices attached
XXXXXXXXXXXXXXXX    no permissions

derek@zoe:~/Downloads$ adb kill-server
derek@zoe:~/Downloads$ sudo adb start-server
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
derek@zoe:~/Downloads$ adb devices
List of devices attached
XXXXXXXXXXXXXXXX    sideload
keredson
quelle
Ich auch: Linux Mint Serena 18.1 mit HTC Sensation. Noob Alarm: Ich habe 2 Tage lang damit rumgespielt, also ist das Zeug mit ziemlicher Sicherheit snafu'd
Aethelbald
0

HTC One m7 mit frischem Cyanogenmod 11.

Das Telefon ist über USB angeschlossen und verbindet meine Datenverbindung.

Dann bekomme ich diese Überraschung:

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb shell
error: insufficient permissions for device

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb devices
List of devices attached
????????????    no permissions

LÖSUNG: Schalten Sie das Tethering am Telefon aus.

cinder@ultrabook:~/temp/htc_m7/2015-11-11$ adb devices
List of devices attached
HT36AW908858    device
Cinderman
quelle
-3

Ich habe gerade die gleiche Situation, das Zurücksetzen der Werksdaten hat bei mir gut funktioniert.

Andrii Krokhin
quelle
Sicher ist das ein Kommentar?
Matthew Taylor
mein Fehler. Ich wollte sagen, dass das Zurücksetzen des Geräts und das Reinigen der Daten bei mir gut funktioniert haben.
Andrii Krokhin