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

Paweł
źródło
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.

Paweł
źródło
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

smj2393
źródło
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

Kyle S.
źródło
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 /

Aldo RVV
źródło
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 )

cseelus
źródło
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

Hoque MD Zahidul
źródło
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.

Aleksandr Suhhinin
źródło
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ć.

VocoJax
źródło
2

Kroki zadziałały dla mnie:

  • $ adb kill-server

  • $ adb start-server

  • $ cd android

  • $ ./gradlew czysty

  • $ cd ..

  • $ react-native run-android

Ragnar
źródło
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.

Rajat vindru
źródło
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.

Priyanga
źródło
1

Oto kroki

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
Muhammed Nazil
źródło