React-Native, Android, Genymotion: ADB-Server hat nicht bestätigt


167

Ich arbeite mit React-Native, Android und Genymotion auf dem Mac. Wenn ich laufe, react-native run-androidbekomme ich diese Zeilen am Ende des Startvorgangs:

...
04:54:40 E/adb: error: could not install *smartsocket* listener: Address already in use
04:54:40 E/adb: ADB server didn't ACK
04:54:40 E/ddms: '/Users/paulbrie/Library/Android/sdk/platform-tools/adb,start-server' failed -- run manually if necessary
04:54:40 E/adb: * failed to start daemon *
04:54:40 E/adb: error: cannot connect to daemon
:app:installDebug FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:installDebug'.
> com.android.builder.testing.api.DeviceException: Timeout getting device list.
...

Gibt jedoch adb devicesFolgendes zurück:

List of devices attached
192.168.59.101:5555 device

Bisher habe ich keine Lösung gefunden, um meine App auf dem Emulator auszuführen. Hat jemand das gleiche Problem festgestellt?

Danke, Paul


Dieser Fehler kann unabhängig von der Ausführung von Genymotion auftreten.
IgorGanapolsky

Antworten:


319

Nach weiteren Recherchen habe ich festgestellt, dass Genymotion standardmäßig seine eigene ADB verwendet.

Geben Sie hier die Bildbeschreibung ein

Ich habe zu meiner Haupt-ADB gewechselt (die auch von React-Native verwendet wird) und das Problem wurde behoben. Ich denke, weil Genymotions ADB zuerst gestartet wurde, bekam ich die Address already in useFehlermeldung.


4
Vielen Dank für die Veröffentlichung. Ich hatte fast einen Herzinfarkt, ich habe letzte Nacht meine Android Studios 2.1 auf Preview 3 aktualisiert und Genymotion wird keine Verbindung mehr herstellen. Dies hat mir geholfen, es zu lösen.
Simon

7
Ich habe diese Lösung ausprobiert, aber ich habe immer noch den gleichen Fehler erhalten. Gibt es alternative Lösungen?
Calclavia

1
@ user2254679 hast du diesen Thread auch überprüft? stackoverflow.com/questions/5703550/…
Paul

@Paul Könnten Sie bitte näher erläutern, welchen Weg Sie einschlagen? Wo befindet sich diese ADB, die von React-Native verwendet wird? Ich versuche, den Pfad meines Android SDK anzugeben, aber es funktioniert nicht. auf Englisch wäre am besten.
K Pal

@KPal, der Pfad ist spezifisch für Ihr eigenes Setup. In meinem Fall war es der Standardpfad der Android-Installation auf dem Mac zu dieser Zeit : /Users/$yourName/Library/Android/sdk. Wenn Sie Android installiert haben, sollten Sie anhand der Android-Version / Ihrer Plattform nach Ihrem Pfad suchen.
Paul

45

Ich verwende Genymotion, aber Pauls Lösung allein hat den Fehler nicht behoben (für Mac).

Ich musste:

Aktualisieren Sie das Android SDK über den SDK-Manager auf die neueste Version (24.4.1)

Geben Sie androiddie Befehlszeile ein

Suchen Sie im SDK-Manager die neuesten SDK-Tools und installieren Sie sie.

Nach der Installation sollte der SDK-Pfad den neuen SDK-Speicherort wie unten beschrieben aktualisieren.

Geben Sie hier die Bildbeschreibung ein

Aktualisieren Sie dann $ ANDROID_HOME, um das neue SDK zu verwenden

export ANDROID_HOME=/usr/local/Cellar/android-sdk/24.4.1_1

export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Bestätigen Sie, dass es hinzugefügt wurde, indem Sie Ihren Pfad mit anzeigen echo $PATH

Machen Sie dann in genymotion das, was @Paul oben sagt, und zeigen Sie auf genymotion ADB, um dasselbe SDK zu verwenden

Geben Sie hier die Bildbeschreibung ein


Es funktioniert für Ubuntu 16.04. Aus irgendeinem Grund dachte ich, dass ein $ANDROID_HOME/toolsVerzeichnis im Klassenpfad nicht notwendig wäre. Sie müssen hinzufügen, um eine Verbindung zu adb herzustellen.
Orar

10

System: Windows 10

Mein Problem: Das Festlegen von Genymotion auf das benutzerdefinierte SDK hatte keine Auswirkungen. Ich habe immer noch erhalten:

Projekt konnte unter Android nicht gestartet werden: Smartsocket-Listener konnte nicht installiert werden: Kann nicht an 127.0.0.1:5037 gebunden werden: Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll / Netzwerkadresse / Port) zulässig. (10048) konnte nicht OK von ADB Server lesen * Daemon konnte nicht gestartet werden * Fehler: Verbindung zum Daemon nicht möglich

Was ich entdeckte, war, dass es einen Unterschied in den ADB-Versionen gab, die im gesamten System verwendet wurden. Hier ist der Befehl, mit dem ich sie gefunden habe:

where /r C:\ adb.exe

Dies ergab die Ergebnisse:

C:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe
C:\Program Files\Genymobile\Genymotion\tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe
C:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb backup\adb.exe

Zu jedem Verzeichnis navigieren und ausführen:

adb.exe version

Ich durfte sehen, dass auf der Expo die ADB-Version ausgeführt wurde:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

Während Genymotion mit dem benutzerdefinierten SDK die Version hatte (c: \ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

Als Test habe ich die adb-Dateien (adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll) von genommen

c:\Users\kyle\AppData\Local\Android\Sdk\platform-tools\adb.exe

und legte sie in einen Sicherungsordner. Ich habe dann die ADB-Dateien verschoben, die sich unter befinden

c:\Program Files\Expo XDE\resources\app\node_modules\xdl\binaries\windows\adb\adb.exe

in den gleichen Ort. Ich habe adb getötet mit:

adb kill-server

Dies führte automatisch zu einem Neustart des ADB-Servers, da mein Genymotion-Gerät bereits ausgeführt wurde. Ich drückte auf die Schaltfläche "Neustart" in der Expo XDE und es begann sofort zu funktionieren. Hier ist das Protokoll, in dem ich um 01:13:04 Uhr auf die Schaltfläche zum Neustart geklickt habe:

12:45:53 AM
could not install *smartsocket* listener: cannot bind to 127.0.0.1:5037: Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)
could not read ok from ADB Server
* failed to start daemon *
error: cannot connect to daemon
1:13:04 AM
Restarting project and clearing packager cache (Hold shift while clicking restart to avoid clearing cache).
1:13:11 AM
Starting React Native packager...
1:13:17 AM
Scanning 543 folders for symlinks in C:\Users\kyle\git\betalog\node_modules (49ms)
1:13:17 AM
1:13:19 AM
Couldn't adb reverse: closed
1:13:20 AM
Project opened! You can now use the "Share" or "Device" buttons to view your project.
1:13:26 AM
Couldn't adb reverse: closed
1:13:26 AM
Downloading latest version of Expo
1:13:28 AM
Installing Expo on device
1:13:33 AM
Opening on Android device
1:13:56 AM
Building JavaScript bundle: finished in 59643ms.
1:14:01 AM
Dependency graph loaded.
1:14:03 AM
Your JavaScript transform cache is empty, rebuilding (this may take a minute).

Fazit: Genymotion und Expo müssen möglicherweise dieselbe Version von adb verwenden, damit Expo ordnungsgemäß mit dem simulierten Gerät kommunizieren kann. Wenn Sie Genymotion auf Ihren Android SDK-Standort verweisen und sicherstellen, dass Expo XDE dieselbe Version hat, können Sie korrekt zwischen Geräten kommunizieren. Ich habe die Expo XDE-Version an den SDK-Speicherort verschoben, aber Sie können möglicherweise auch in die andere Richtung gehen (nehmen Sie die SDK-ADB-Dateien und platzieren Sie sie am Speicherort der Expo XDE-Ressource).

PS Ich habe alle Stackoverflow-Beiträge zu diesem Problem durchgesehen. Nur damit ihr wisst, dass mein Task-Manager drei Instanzen von adb.exe anzeigt. Wenn Sie einen von ihnen töten, kommen sie einfach zurück.

Hoffe das hilft / jubelt


8

Möglicherweise stimmen Ihre ADB-Versionen nicht überein

Prüfen:

adb version 

Dann:

cd /Path/to/Android/Sdk/platform-tools && ./adb version

Wenn diese beiden unterschiedlich sind, haben Sie hier einen Fehler. Entfernen Sie einfach adb aus sys und kopieren Sie das in den Plattform-Tools enthaltene nach / usr / bin /


4

Wenn Sie Ihr System sauber halten möchten, können Sie Genymotion auch ohne Android Studio verwenden :

  1. Finden Sie Genymotions Kopie von adb. Unter macOS ist dies normalerweise der Fall/Applications/Genymotion.app/Contents/MacOS/tools/ .
  2. Fügen Sie das Verzeichnis der Genymotion-Tools zu Ihrem Pfad hinzu - führen Sie die Zeile export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATHzu Ihrem ~/.bash_profileoder aus ~/.bash_rc.
  3. Stellen Sie sicher, dass Sie adb von Ihrem Terminal aus ausführen können.

(Von https://docs.expo.io/versions/latest/workflow/genymotion )


4

Die ADB-Version auf Ihrem System unterscheidet sich von der ADB-Version auf den Android SDK-Plattform-Tools. Der folgende Vorschlag ist Arbeit für mich für Linux-Betriebssystem

  1. Überprüfen Sie die sys adb-Version. Führen Sie den folgenden Befehl aus

ADB-Version

Android Debug Bridge Version 1.0.39

  1. Überprüfen Sie die SDK-ADB-Version

cd / root / Android / Sdk / Plattform-Tools

./adb Version

Android Debug Bridge Version 1.0.32

  1. Kopieren

rm / usr / bin / adb

[Hinweis: Mit dem obigen Befehl wird die vorhandene ADB entfernt und die ADB aus dem Verzeichnis sdk / platform-tools kopiert.]

sudo cp / root / Android / Sdk / Plattform-Tools / adb / usr / bin / adb

Führen Sie dann das Projekt mit diesem Befehl aus

React-Native Run-Android


Dies ist eine gute Lösung für Linux, es funktioniert mit oder ohne Android Studio installiert
Maroof Shittu

3

Ich hatte das gleiche, als ich versuchte, von der Expo-Benutzeroberfläche aus zu laufen. Hat die gleichen Dinge getan, wie in den Antworten beschrieben, aber die App lief nicht. Beim einmaligen Versuch, exp androidüber die Befehlszeile (im Projektordner) ausgeführt zu werden, wurde die Anwendung erfolgreich ausgeführt, und das nächste Mal wurde die Ausführung über die Expo-Benutzeroberfläche erfolgreich ausgeführt.


2

Ich hatte ein ähnliches Problem.

Zuerst habe ich die App deinstalliert. Dann habe ich GenyMotion auf das von Android Studio bereitgestellte Android SDK verwiesen. Als nächstes habe ich "adb kill-server" in das Terminal ausgeführt. Schließlich habe ich "React-Native Run-Android" erneut ausgeführt und einen Build-Erfolg erzielt.


2

Die Schritte, die für mich gearbeitet haben, sind:

  • $ adb kill-server

  • $ adb Startserver

  • $ cd android

  • $ ./gradlew sauber

  • $ cd ..

  • $ React-Native Run-Android


2

Für Ubuntu

Für mich geht das!!

  1. Überprüfen Sie die sys adb-Version

ADB-Version

Android Debug Bridge Version 1.0.39

2 Überprüfen Sie die SDK-ADB-Version

cd / home / benutzername / Android / sdk / platform-tools

./adb Version

Android Debug Bridge Version 1.0.32

  1. Kopieren

sudo cp / home / benutzername / Android / sdk / plattform-tools / adb / usr / local / bin

das ist alles! Es wird jetzt funktionieren.


1

1.Verwenden Sie den benutzerdefinierten SDK-Pfad in Genymotion. (Angenommen, dieser Pfad funktioniert nicht. Versuchen Sie, den zweiten auszuführen.)

2. Verwenden Sie diesen Befehl manuell, um ihn auszuführen (SDK PATH / adb sie startet -n / Paketname / MainActivity).

C: \ Benutzer \ AppData \ Local \ Android \ Sdk / platform-tools / adb Sie startet -n com.example / com.example.ManiActivity

Und versuchen Sie, die Anwendung mit React-Native Run-Android auszuführen.


1

Dies sind die Schritte

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.