React-Native, Android, Genymotion: serwer ADB nie ACK


168

Pracuję z React-Native, Android i Genymotion na Macu. Kiedy uruchamiam react-native run-android, pod koniec operacji uruchamiania otrzymuję następujące linie:

...
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.
...

Jednak adb deviceszwraca to:

List of devices attached
192.168.59.101:5555 device

Jak dotąd nie znalazłem rozwiązania, aby uruchomić moją aplikację na emulatorze. Czy ktoś napotkał ten sam problem?

Dzięki, Paul


Ten błąd może wystąpić niezależnie od działania Genymotion.
— Igor Ganapolsky

Odpowiedzi:


319

Po dalszych badaniach zdałem sobie sprawę, że Genymotion domyślnie używa własnego adb.

wprowadź opis obrazu tutaj

Przerzuciłem się na mój główny adb (ten sam, którego używa React-Native) i rozwiązałem problem. Myślę, że ponieważ adb Genymotion został uruchomiony jako pierwszy, otrzymałem Address already in usekomunikat o błędzie.


4
Dziękuję za wysłanie tego. Prawie dostałem zawału serca, zaktualizowałem wczoraj wieczorem moje studia Android 2.1 do wersji Preview 3 i genymotion nie będzie już się łączyć. To pomogło mi go rozwiązać.
— Simon

7
Wypróbowałem to rozwiązanie, ale nadal pojawia się ten sam błąd. Czy istnieją alternatywne rozwiązania?
— calclavia

1
@ user2254679 czy sprawdziłeś też ten wątek? stackoverflow.com/questions/5703550/…
— Paul

@Paul, czy mógłbyś wyjaśnić, jaką ścieżkę oferujesz? gdzie znajduje się ten adb, który jest używany przez React-Native? Próbuję podać ścieżkę do mojego zestawu SDK systemu Android, ale nie działa. w języku angielskim byłoby najlepiej.
— K Pal

@KPal, ścieżka jest specyficzna dla twojej własnej konfiguracji. W moim przypadku to była średnia droga z Androidem instalacji w systemie Mac w tym czasie: /Users/$yourName/Library/Android/sdk. Jeśli zainstalowałeś Androida, powinieneś poszukać ścieżki, biorąc pod uwagę wersję Androida / platformę.
— Paul

45

Używam genymotion, ale samo rozwiązanie Paula nie naprawiło błędu (na Macu).

Musiałem:

Zaktualizuj Android SDK do najnowszej wersji (24.4.1) za pomocą menedżera SDK

Wpisz androidwiersz poleceń

W menedżerze SDK znajdź najnowsze narzędzia SDK i zainstaluj.

Po zainstalowaniu ścieżka SDK powinna zaktualizować nową lokalizację SDK, jak poniżej.

wprowadź opis obrazu tutaj

Następnie zaktualizuj $ ANDROID_HOME, aby używał nowego SDK

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

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

Potwierdź, że został dodany, wyświetlając swoją ścieżkę za pomocą echo $PATH

Następnie w genymotion zrób to, co @Paul mówi powyżej i wskaż genymotion ADB, aby używał tego samego sdk

wprowadź opis obrazu tutaj


Działa na ubuntu 16.04. Z jakiegoś powodu pomyślałem, że $ANDROID_HOME/toolskatalog nie będzie potrzebny w ścieżce klas. Musisz dodać, aby połączyć się z adb.
— Orar

10

System: Windows 10

Mój problem: ustawienie Genymotion tak, aby wskazywało na niestandardowy zestaw SDK, nie miało żadnego wpływu. Nadal otrzymałem:

Nie można uruchomić projektu na Androidzie: nie można zainstalować nasłuchiwania smartsocket: nie można powiązać z 127.0.0.1:5037: Normalnie dozwolone jest tylko jedno użycie każdego adresu gniazda (protokołu / adresu sieciowego / portu). (10048) nie można odczytać ok z serwera ADB * nie udało się uruchomić demona * błąd: nie można połączyć się z demonem

Odkryłem, że istnieje różnica w wersjach ADB używanych w całym systemie. Oto polecenie, którego użyłem, aby je znaleźć:

where /r C:\ adb.exe

Dało to wyniki:

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

Przechodzenie do każdego katalogu i uruchamianie:

adb.exe version

Pozwolił mi zobaczyć, że Expo działa w wersji ADB:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

Podczas gdy Genymotion używający niestandardowego zestawu SDK miał wersję (c: \ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

W ramach testu wziąłem pliki adb (adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll) z

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

i umieścił je w folderze kopii zapasowych. Następnie przeniosłem pliki adb znajdujące się pod adresem

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

do tej samej lokalizacji. Zabiłem adb z:

adb kill-server

co spowodowało automatyczne ponowne uruchomienie serwera adb z powodu już uruchomionego mojego urządzenia Genymotion. Nacisnąłem przycisk „Uruchom ponownie” wewnątrz Expo XDE i natychmiast zaczęło działać. Oto dziennik, w którym nacisnąłem przycisk restartu o 1:13:04:

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).

Wniosek: Genymotion i Expo może wymagać użycia tej samej wersji adb, aby Expo mogło poprawnie komunikować się z symulowanym urządzeniem. Wskazanie Genymotion na lokalizację Android SDK, a także zapewnienie, że Expo XDE ma tę samą wersję, umożliwi poprawną komunikację między urządzeniami. Przeniosłem wersję Expo XDE do lokalizacji SDK, ale być może będziesz mógł przejść w drugą stronę (weź pliki SDK ADB i umieść je w lokalizacji zasobów Expo XDE).

PS Przeszedłem przez wszystkie posty związane z tym problemem. Abyście wiedzieli, mój menedżer zadań pokazuje trzy uruchomione instancje adb.exe. Jeśli zabijesz któregoś z nich, po prostu wrócą.

Mam nadzieję, że to pomoże / na zdrowie


8

Może Twoje wersje adb są niezgodne

Czek:

adb version 

Następnie:

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

Jeśli te dwa są różne, masz tutaj błąd, po prostu usuń adb z sys i skopiuj ten, który jest w narzędziach platformy do / usr / bin /


4

Jeśli chcesz utrzymać system w czystości, możesz również użyć Genymotion bez Android Studio :

  1. Znajdź kopię programu Genymotion adb. W systemie macOS jest to normalne /Applications/Genymotion.app/Contents/MacOS/tools/.
  2. Dodaj katalog narzędzi Genymotion do swojej ścieżki - wykonaj / dodaj linię export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATHdo swojego ~/.bash_profilelub ~/.bash_rc.
  3. Upewnij się, że możesz uruchomić adb z terminala.

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


4

Wersja adb w twoim systemie różni się od wersji adb na platformie Android SDK-Tools. Poniżej propozycja działa dla mnie na system operacyjny Linux

  1. sprawdź wersję sys adb, uruchom poniższe polecenie

wersja adb

Android Debug Bridge w wersji 1.0.39

  1. sprawdź wersję sdk adb

cd / root / Android / Sdk / platform-tools

Wersja ./adb

Android Debug Bridge w wersji 1.0.32

  1. Kopiuj

rm / usr / bin / adb

[Uwaga: powyższe polecenie usuwa istniejący adb, a następnie skopiuj adb z katalogu sdk / platform-tools]

sudo cp / root / Android / Sdk / platform-tools / adb / usr / bin / adb

Następnie uruchom projekt za pomocą tego polecenia

reaguj natywnym run-android


to jest dobre rozwiązanie dla Linuksa, działa z zainstalowanym Android Studio lub bez niego
— maroof shittu

3

Miałem to samo, gdy próbowałem uciec z interfejsu expo. Zrobił to samo, co opisano w odpowiedziach, ale aplikacja nie działała. Kiedy raz spróbowano uruchomić exp androidz wiersza poleceń (w folderze projektu), aplikacja została uruchomiona pomyślnie, a następnym razem uruchomiono z interfejsem Expo.


2

Miałem podobny problem.

Najpierw odinstalowałem aplikację. Następnie wskazałem GenyMotion na android SDK dostarczony z Android Studio. Następnie uruchomiłem "adb kill-server" na terminalu. W końcu ponownie uruchomiłem „Reaguj-natywny system android” i udało mi się zbudować.


2

Kroki zadziałały dla mnie:

  • $ adb kill-server

  • $ adb start-server

  • $ cd android

  • $ ./gradlew czysty

  • $ cd ..

  • $ react-native run-android


2

Dla Ubuntu

Mi to pasuje!!

  1. sprawdź wersję sys adb

wersja adb

Android Debug Bridge w wersji 1.0.39

2 sprawdź wersję sdk adb

cd / home / nazwa_użytkownika / Android / sdk / platform-tools

Wersja ./adb

Android Debug Bridge w wersji 1.0.32

  1. Kopiuj

sudo cp / home / nazwa_użytkownika / Android / sdk / platform-tools / adb / usr / local / bin

to wszystko! Teraz zadziała.


1

1. użyj niestandardowej ścieżki sdk w genymotion. (Przypuśćmy, że ta nie zadziała oznacza, spróbuj wykonać drugą)

2.Ręcznie użyj tego polecenia, aby wykonać (SDK PATH / adb she ll am start -n / Package name / MainActivity).

C: \ Users \ AppData \ Local \ Android \ Sdk / platform-tools / adb ll am start -n com.example / com.example.ManiActivity

I spróbuj uruchomić aplikację za pomocą reaktywnego run-android.


1

Oto kroki

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.