Gerät für Entwicklung einrichten (???????????? keine Berechtigungen)
Lesezeit: 9 Minuten
Leem.fin
Ich verwende ein Samsung Galaxy Nexus-Telefon (Android 4.0 Plattform).
Ich entwickle eine Android-App auf Ubuntu Linux OS. Ich möchte meine Anwendung direkt auf dem Samsung-Mobilteil ausführen, daher habe ich die folgenden Einrichtungsschritte ausgeführt:
in meinem Projekt AndroidManifest.xml Datei, hinzugefügt android:debuggable="true" zum <application> Element
Auf dem Gerät, in der Einstellungen > Sicherheit aktiviert Unbekannte Quellen
Auf dem Gerät, in der Einstellungen > Entwickleroptionen aktiviert USB-Debugging
Auf meinem Computer erstellt die /etc/udev/rules.d/51-android.rules Datei mit folgendem Inhalt:
Führen Sie auf meinem Computer die chmod a+r /etc/udev/rules.d/51-android.rules Befehl
Dann habe ich auf meinem Computer ein Terminal geöffnet und die ausgeführt adb devices Befehl bekam ich:
List of devices attached
???????????? no permissions
Da habe ich mein Gerät aber nur nicht gesehen ???????????? no permissionsführe ich dann die folgenden Befehle aus:
adb kill-server
adb start-server
adb devices
Aber ich habe noch:
List of devices attached
???????????? no permissions
Warum? Was vermisse ich?
nach dem Ausführen von adb kill-server bekamen Sie die Meldung, dass * daemon not running. Starten Sie es jetzt auf Port 5037 * * Daemon erfolgreich gestartet * — Wenn nicht, versuchen Sie es, bis Sie diese Nachricht erhalten
– Andro Selva
9. Februar 2012 um 11:44 Uhr
Versuchen Sie zu überprüfen, ob Ihr Benutzer angemeldet ist plugdev Gruppe.
– Sergej Glotow
9. Februar 2012 um 11:58 Uhr
Führen Sie => sudo adb start-server aus (verwenden Sie Root-Zugriff, um adb auszuführen)
Bitte sehen Sie sich mein 2022-Update zu diesem Problem unten an und einen kurzen Kommentar, dass einige der wirklich alten Lösungen hier ein Linux-System blockieren können.
– Basautner
10. Januar um 15:38 Uhr
WarrenFaith
Was für mich funktioniert, ist, den Adb-Server zu beenden und erneut zu starten. Unter Linux: sudo adb kill-server und dann sudo adb start-server. Dann wird es fast jedes Gerät sofort erkennen.
Ich benutze root, um den Befehl “adb devices” unter /platform-tool/ auszuführen, ich bekomme “No command ‘adb’ found”, warum?
– Leem.fin
9. Februar 2012 um 12:11 Uhr
Stellen Sie sicher, dass Ihr Adb +x hat -rwxrwxr-x 1 martin martin 156K 2011-11-09 15:40 adb. Versuchen Sie, direkt in das Verzeichnis zu wechseln und über “sudo ./adb devices” zu starten. Wenn Sie das ohne sudo ausführen können, sollten Sie es mit sudo ausführen können … Ich bin mir nicht sicher, was Ihr Problem sein könnte …
– WarrenFaith
10. Februar 2012 um 9:45 Uhr
Sie sollten adb nicht als root ausführen müssen, wenn Ihre udev-Berechtigungen richtig eingestellt sind. Siehe die Antwort von Grebulons unten oder verweisen Sie auf die Android-Dokumentation: developer.android.com/tools/device.html
– gnac
6. Januar 2013 um 19:57 Uhr
Ein wichtiger Vorschlag ist, das USB-Kabel zu trennen, also adb zurückzusetzen, das Kabel anzuschließen und es funktioniert. In meiner Situation funktioniert es bei mir nicht, obwohl ich das Verfahren mit angeschlossenem Kabel durchgeführt habe.
– Androidevil
17. November 2013 um 8:12 Uhr
Und die Befehle sind: adb kill-serversudo adb start-server überprüfen: adb devices
Trennen Sie das USB-Kabel zwischen Telefon und Computer.
Verbinden Sie das Telefon erneut.
Laufen adb devices um zu bestätigen, dass es jetzt die Berechtigung hat, auf das Telefon zuzugreifen.
Bitte beachten Sie, dass die Verwendung möglich ist , USER="$LOGINNAME" anstatt , MODE="0666" in dem .rules Datei, ersetzen $LOGINNAME für Ihren Login-Namen, dh was id -nu Drucke.
In manchen Fällen kann es notwendig sein, der udev-Regeldatei einen Namen zu geben, der am Ende steht, wie z z51-android.rules.
Hinweis: Für Ubuntu Precise lautet der Dateiname 70-android.rules laut diesem Beitrag: esausilva.com/2010/05/13/…. Kudos auch dafür, dass Sie uns wissen lassen, dass Sie neu starten müssen udev und alle adb-Prozesse beenden. Lief wie am Schnürchen!
Das hat gut funktioniert, aber wie von @luciana in einer anderen Antwort erwähnt, müssen Sie möglicherweise anrufen sudo udevadm control --reload-rules um die udev-Regeln zu aktualisieren, wenn ein Neustart des Servers nicht ausreicht.
– serjlee
17. November 2014 um 14:54 Uhr
Dies sollte als die richtige Antwort markiert werden, da sudo-ing adb keine Voraussetzung für Linux sein sollte
– Zac
15. Januar 2017 um 19:23 Uhr
Dies ist die einzig richtige Antwort hier. Danke dafür! Außerdem können wir die lsusb-Ausgabe sehen, um sicherzustellen, dass der erforderliche Anbieter enthalten ist. Am merkwürdigsten ist, dass nur eines meiner Geräte (OnePlus One) nach dem Upgrade auf Android 7.1.2 plötzlich nicht mehr funktioniert (selbst wenn adb als root ausgeführt wird), nachdem wie oben beschrieben udev-Regeln hinzugefügt wurden, funktioniert es wieder.
– Benutzer1209216
18. April 2017 um 7:27 Uhr
iancrowther
Geben Sie die folgenden Befehle ein:
# cd to adb for sudo
cd `which adb | sed -e "s/adb//"`
adb kill-server
sudo ./adb start-server
./adb devices
This happens when you are not running adb server as root.
Obwohl die Idee dieselbe ist wie in der akzeptierten Antwort, hat mir diese aufgrund des bereitgestellten Beispiels nur geholfen. Danke
– Dmitri Koroliow
12. Juni 2014 um 18:05 Uhr
@ user907860 es ist eigentlich besser als die akzeptierte Antwort, weil es erklärt, warum Sie sudo schreiben sollten 🙂 (was ich nicht getan habe, als ich die akzeptierte Antwort gesehen habe)
– stan0
22. April 2015 um 12:40 Uhr
übrigens irgendeine idee warum adb als root laufen sollte?
– stan0
22. April 2015 um 12:41 Uhr
Entschuldigung, nein, ich erinnere mich nicht
– iancrowther
27. April 2015 um 12:16 Uhr
adb sollte NICHT als root laufen. Wenn dies erforderlich ist, ist Ihr System falsch konfiguriert. Hören Sie auf, “sudo” vor alles zu werfen, es hat enorme Auswirkungen auf die Sicherheit.
– Hackel
1. September 2015 um 21:50 Uhr
Säbel
Alles oben versucht, keiner hat funktioniert. Endlich hat es funktioniert, als ich die Verbindung von MTP auf Kamera (PTP) umschalte.
Alex P.
Es gibt viele schlechte Antworten auf diese Frage, die von dem Beharren auf dem Laufen reichen adb als root (was nicht als die einzige oder gar empfohlene Lösung angepriesen werden sollte) bis hin zur Lösung völlig unabhängiger Probleme.
Hier ist das kürzeste und universellste Rezept, um sich um Berechtigungen für alle zu kümmern adb und fastboot Geräte auf einmal:
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
Oder Sie könnten eine etwas längere Version verwenden, die ich hier gepostet habe Kern.
Was die spezifische Sache betrifft, die OP in seiner Frage falsch gemacht hat – es wurde nicht neu geladen udev Regeln nach dem Bearbeiten der .rules Datei.
Außerdem sagte OP nicht, welchen Android-Build (auch bekannt als ROM) er auf seinem Telefon hatte. Die idVendor Der Wert wird in der Software festgelegt und hängt daher vom ROM ab. Also der Wert von 04E8 die er in seiner ursprünglichen Regel verwendete, hätte nur für Geräte mit Samsung-Stock-ROMs funktioniert. Aber das ist kein Problem dafür udev Regel – es stimmt mit allen Geräten überein adb oder fastboot Schnittstellen unabhängig von ihrer Hersteller-ID.
Der einzige fehlende Schritt, um zu sehen, dass es funktioniert, ist adb kill-server vor adb-Geräten.
– merkwürdig
2. November 2017 um 0:06 Uhr
Unter Android 8.1 scheint das nicht mehr zu funktionieren. Wie haben Sie herausgefunden, was adb als Geräte-ID meldet?
– Cachapa
3. Januar 2018 um 9:51 Uhr
Funktionierte für mich auf Android 7.1.2
– Amerzilla
16. Januar 2018 um 15:50 Uhr
@Cachapa, es funktioniert mit allen Android-Versionen. Sogar das neueste (als ich dies schreibe) Android P Preview 4 verwendet dieselben ADB-Schnittstellen-IDs – android.googlesource.com/platform/system/core/+/…
In Archlinux kann dies gelegentlich vorkommen. Die Reparatur:
$ sudo -s
# adb kill-server
# adb start-server
Der einzige fehlende Schritt, um zu sehen, dass es funktioniert, ist adb kill-server vor adb-Geräten.
– merkwürdig
2. November 2017 um 0:06 Uhr
Unter Android 8.1 scheint das nicht mehr zu funktionieren. Wie haben Sie herausgefunden, was adb als Geräte-ID meldet?
– Cachapa
3. Januar 2018 um 9:51 Uhr
Funktionierte für mich auf Android 7.1.2
– Amerzilla
16. Januar 2018 um 15:50 Uhr
@Cachapa, es funktioniert mit allen Android-Versionen. Sogar das neueste (als ich dies schreibe) Android P Preview 4 verwendet dieselben ADB-Schnittstellen-IDs – android.googlesource.com/platform/system/core/+/…
Für diejenigen, die Debian verwenden, funktioniert die Anleitung zum Einrichten eines Geräts unter Ubuntu zum Erstellen der Datei “/etc/udev/rules.d/51-android.rules” nicht. Ich habe die Anweisungen von befolgt Hier. Dasselbe hier als Referenz niederlegen.
Dadurch kann adb funktionieren, aber wir müssen das Gerät noch so einrichten, dass es erkannt werden kann. Wir müssen diese Datei als Superuser erstellen,
nach dem Ausführen von adb kill-server bekamen Sie die Meldung, dass * daemon not running. Starten Sie es jetzt auf Port 5037 * * Daemon erfolgreich gestartet * — Wenn nicht, versuchen Sie es, bis Sie diese Nachricht erhalten
– Andro Selva
9. Februar 2012 um 11:44 Uhr
Versuchen Sie zu überprüfen, ob Ihr Benutzer angemeldet ist
plugdev
Gruppe.– Sergej Glotow
9. Februar 2012 um 11:58 Uhr
Führen Sie => sudo adb start-server aus (verwenden Sie Root-Zugriff, um adb auszuführen)
– Verwirrt
23. Januar 2016 um 13:41 Uhr
Endlich habe ich die Lösung gefunden, die in diesem Link für mich funktioniert hat github.com/snowdream/51-android
– Abdulrahman Gamal
13. September 2019 um 21:23 Uhr
Bitte sehen Sie sich mein 2022-Update zu diesem Problem unten an und einen kurzen Kommentar, dass einige der wirklich alten Lösungen hier ein Linux-System blockieren können.
– Basautner
10. Januar um 15:38 Uhr