React-Native, Android, Genymotion: il server ADB non ha ACK


168

Sto lavorando con React-Native, Android e Genymotion su Mac. Quando corro react-native run-androidottengo queste righe alla fine dell'operazione di avvio:

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

Però, adb devices restituisce questo:

List of devices attached
192.168.59.101:5555 device

Finora non ho trovato alcuna soluzione per eseguire la mia app sull'emulatore. Qualcuno ha riscontrato lo stesso problema?

Grazie Paul


Questo errore può verificarsi indipendentemente dal funzionamento di Genymotion.
IgorGanapolsky,

Risposte:


319

Dopo ulteriori ricerche mi sono reso conto che Genymotion utilizza di default il proprio adb.

inserisci qui la descrizione dell'immagine

Sono passato al mio adb principale (lo stesso usato da React-native) e ho risolto il problema. Immagino che, poiché l'Adb di Genymotion è stato lanciato per primo, ho ricevuto il Address already in usemessaggio di errore.


4
grazie per aver postato questo. Ho quasi avuto un attacco di cuore, ho aggiornato i miei studi Android 2.1 alla Preview 3 la scorsa notte e genymotion non si collegherà più. Questo mi ha aiutato a risolverlo.
Simon

7
Ho provato questa soluzione, ma ho ancora avuto lo stesso errore. Ci sono soluzioni alternative?
Calclavia,

1
@ user2254679 hai controllato anche questa discussione? stackoverflow.com/questions/5703550/…
Paul

@Paul potresti per favore approfondire quale percorso stai fornendo? dove si trova questo adb che viene utilizzato da React-native? Sto cercando di fornire il percorso del mio Android SDK ma non funziona. in inglese sarebbe il migliore.
K Pal

@KPal, il percorso è specifico per la tua configurazione. Nel mio caso è stato il percorso standard dall'installazione Android nel Mac in quel momento: /Users/$yourName/Library/Android/sdk. Se hai installato Android, dovresti cercare il tuo percorso data la versione di Android / la tua piattaforma.
Paul,

45

Sto usando genymotion, ma la soluzione di Paul da sola non ha risolto l'errore (per Mac).

Dovevo:

Aggiorna Android SDK all'ultima versione (24.4.1) tramite il gestore SDK

Digita androidla riga di comando

Nel gestore SDK trova gli strumenti SDK più recenti e installa.

Una volta installato, il percorso dell'SDK dovrebbe aggiornare la nuova posizione dell'SDK come di seguito.

inserisci qui la descrizione dell'immagine

Quindi aggiornare $ ANDROID_HOME per utilizzare il nuovo SDK

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

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

Conferma che è stato aggiunto visualizzando il tuo percorso con echo $PATH

Quindi in genymotion fai ciò che @Paul dice sopra e indica ADB di genymotion per usare lo stesso sdk

inserisci qui la descrizione dell'immagine


Funziona con Ubuntu 16.04. Per qualche ragione ho pensato che la $ANDROID_HOME/toolsdirectory non fosse necessaria sul percorso di classe. Devi aggiungere per connetterti ad adb.
Orar,

10

Sistema: Windows 10

Il mio problema: impostare Genymotion in modo che punti all'SDK personalizzato non ha avuto alcun effetto. Ho ancora ricevuto il:

Impossibile avviare il progetto su Android: impossibile installare il listener smartsocket: impossibile associare a 127.0.0.1:5037: normalmente è consentito un solo utilizzo di ciascun indirizzo socket (protocollo / indirizzo di rete / porta). (10048) impossibile leggere ok dal server ADB * impossibile avviare il demone * errore: impossibile connettersi al demone

Quello che ho scoperto è che c'era una differenza nelle versioni ADB utilizzate in tutto il sistema. Ecco il comando che ho usato per trovarli:

where /r C:\ adb.exe

Ciò ha prodotto i risultati:

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

Navigazione verso ciascuna directory ed esecuzione:

adb.exe version

Mi ha permesso di vedere che Expo stava eseguendo la versione ADB:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

Mentre Genymotion usando l'SDK personalizzato aveva la versione (c: \ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

Come test ho preso i file adb (adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll) da

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

e li ha inseriti in una cartella di backup. Ho quindi spostato i file adb che si trovano in

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

in quella stessa posizione. Ho ucciso adb con:

adb kill-server

che ha causato automaticamente il riavvio del server adb a causa del mio dispositivo Genymotion già in esecuzione. Ho premuto il pulsante "Riavvia" all'interno di Expo XDE e ha subito iniziato a funzionare. Ecco il registro in cui ho premuto il pulsante di riavvio alle 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).

Conclusione: Genymotion ed Expo potrebbero dover utilizzare la stessa versione di adb per consentire a Expo di comunicare correttamente con il dispositivo simulato. Indicare Genymotion sulla posizione dell'SDK Android e assicurarsi che Expo XDE abbia la stessa versione consentirà una comunicazione corretta tra i dispositivi. Ho spostato la versione di Expo XDE nella posizione dell'SDK, ma potresti essere in grado di andare dall'altra parte (prendere i file sdk ADB e posizionarli nella posizione delle risorse di Expo XDE).

PS Ho passato tutti i post di StackOverflow relativi a questo problema. Solo così sapete che il mio task manager mostra tre istanze di adb.exe in esecuzione. Se uccidi qualcuno di loro, tornano indietro.

Spero che questo aiuti / applausi


8

Forse le tue versioni adb non corrispondono

Dai un'occhiata:

adb version 

Poi:

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

Se questi due sono diversi, hai un errore qui, basta rimuovere adb da sys e copiare quello che si trova negli strumenti della piattaforma in / usr / bin /


4

Se vuoi mantenere pulito il tuo sistema, puoi anche usare Genymotion senza Android Studio :

  1. Trova la copia di Genymotion di adb. Su macOS questo è normalmente /Applications/Genymotion.app/Contents/MacOS/tools/.
  2. Aggiungi la directory degli strumenti di Genymotion al tuo percorso - esegui / aggiungi la linea export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATH al tuo ~/.bash_profileo ~/.bash_rc.
  3. Assicurati di poter eseguire adb dal tuo terminale.

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


4

la versione adb sul tuo sistema è diversa dalla versione adb su android sdk platform-tools. Di seguito suggerimento è lavorare per me per il sistema operativo Linux

  1. controlla la versione di sys adb esegui il comando seguente

versione adb

Android Debug Bridge versione 1.0.39

  1. controlla la versione di sdk adb

cd / root / Android / Sdk / platform-tools

Versione ./adb

Android Debug Bridge versione 1.0.32

  1. copia

rm / usr / bin / adb

[Nota: il comando precedente rimuove l'adb esistente quindi copia l'adb dalla directory sdk / platform-tools]

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

Quindi eseguire il progetto utilizzando questo comando

reatt-native run-android


questa è una buona soluzione per Linux, funziona con o senza Android Studio installato
maroof shittu

3

Ho avuto la stessa cosa mentre provavo a correre dall'interfaccia utente dell'expo. Ha fatto le stesse cose, come descritto nelle risposte, ma l'app non era in esecuzione. Quando una volta tentato di eseguire exp androiddalla riga di comando (nella cartella del progetto), l'applicazione è stata eseguita correttamente e le esecuzioni successive dall'interfaccia utente di Expo sono state eseguite correttamente.


2

Ho avuto un problema simile.

Innanzitutto, ho disinstallato l'app. Quindi, ho indicato GenyMotion verso Android SDK fornito da Android Studio. Successivamente, ho eseguito "adb kill-server" nel terminale. Alla fine, ho rieseguito "reag-native run-android" e ho ottenuto un successo di build.


2

I passaggi eseguiti per me sono:

  • $ adb kill-server

  • $ adb start-server

  • $ cd android

  • $ ./gradlew clean

  • $ cd ..

  • $ reazioni-nativo run-android


2

Per Ubuntu

Per me funziona!!

  1. controlla la versione di sys adb

versione adb

Android Debug Bridge versione 1.0.39

2 controlla la versione di sdk adb

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

Versione ./adb

Android Debug Bridge versione 1.0.32

  1. copia

sudo cp / home / user_name / Android / sdk / platform-tools / adb / usr / local / bin

È tutto! Funzionerà ora.


1

1.utilizzare il percorso sdk personalizzato in genymotion (supponiamo che questo non funzioni, prova a eseguire il secondo)

2.Utilizzare manualmente questo comando per eseguire (PERCORSO SDK / adb lei inizierà -n / Nome pacchetto / MainActivity).

C: \ Users \ AppData \ Local \ Android \ Sdk / platform-tools / adb lei inizierà -n com.example / com.example.ManiActivity

E prova a eseguire l'applicazione usando run-android React-native.


1

Questi sono i passaggi

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.