React-Native, Android, Genymotion: le serveur ADB n'a pas ACK

168

Je travaille avec React-Native, Android et Genymotion sur Mac. Quand je cours, react-native run-androidj'obtiens ces lignes à la fin de l'opération de lancement:

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

cependant, adb devices renvoie ceci:

List of devices attached
192.168.59.101:5555 device

Jusqu'à présent, je n'ai trouvé aucune solution pour exécuter mon application sur l'émulateur. Quelqu'un at-il rencontré le même problème?

Merci, Paul

Paul
la source
Cette erreur peut se produire indépendamment de l'exécution de Genymotion.
IgorGanapolsky

Réponses:

319

Après plus de recherches, j'ai réalisé que Genymotion utilise par défaut son propre adb.

entrez la description de l'image ici

Je suis passé à mon adb principal (le même utilisé par react-native) et cela a résolu le problème. Je suppose que parce que l'adb de Genymotion a été lancé en premier, j'ai reçu le Address already in usemessage d'erreur.

Paul
la source
4
Merci d'avoir posté ceci. J'ai failli avoir une crise cardiaque, j'ai mis à jour mes studios Android 2.1 vers Preview 3 hier soir et genymotion ne se connectera plus. Cela m'a aidé à le résoudre.
Simon
7
J'ai essayé cette solution, mais j'ai toujours la même erreur. Existe-t-il des solutions alternatives?
calclavia
1
@ user2254679 avez-vous également vérifié ce fil? stackoverflow.com/questions/5703550/…
Paul
@Paul pourriez-vous s'il vous plaît préciser quel chemin vous offrez? où se trouve cet adb qui est utilisé par react -native? J'essaie de fournir le chemin de mon SDK Android mais cela ne fonctionne pas. en anglais serait le mieux.
K Pal
@KPal, le chemin est spécifique à votre propre configuration. Dans mon cas , il était le chemin standard de l'installation Android dans Mac à ce moment - là: /Users/$yourName/Library/Android/sdk. Si vous avez installé Android, vous devez rechercher votre chemin en fonction de la version Android / de votre plate-forme.
Paul
45

J'utilise genymotion, mais la solution de Paul seule n'a pas corrigé l'erreur (pour Mac).

J'ai dû:

Mettez à jour le SDK Android vers la dernière version (24.4.1) via le gestionnaire de SDK

Tapez androidla ligne de commande

Dans le gestionnaire de SDK, recherchez les derniers outils SDK et installez-les.

Une fois installé, le chemin du SDK doit mettre à jour le nouvel emplacement du SDK comme ci-dessous.

entrez la description de l'image ici

Puis mettez à jour $ ANDROID_HOME pour utiliser le nouveau SDK

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

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

Confirmez qu'il a été ajouté en affichant votre chemin avec echo $PATH

Ensuite, dans genymotion, faites ce que @Paul dit ci-dessus et indiquez à genymotion ADB d'utiliser le même sdk

entrez la description de l'image ici

smj2393
la source
Cela fonctionne pour ubuntu 16.04. Pour une raison quelconque, je pensais que le $ANDROID_HOME/toolsrépertoire ne serait pas nécessaire sur le chemin de classe. Vous devez ajouter pour vous connecter à adb.
Orar
10

Système: Windows 10

Mon problème: configurer Genymotion pour qu'il pointe vers le SDK personnalisé n'a eu aucun effet. J'ai toujours reçu le:

Impossible de démarrer le projet sur Android: impossible d'installer l'écouteur smartsocket: impossible de se lier à 127.0.0.1:5037: Une seule utilisation de chaque adresse de socket (protocole / adresse réseau / port) est normalement autorisée. (10048) n'a pas pu lire ok à partir du serveur ADB * n'a pas pu démarrer le démon * erreur: impossible de se connecter au démon

Ce que j'ai découvert, c'est qu'il y avait une différence dans les versions ADB utilisées dans tout le système. Voici la commande que j'ai utilisée pour les trouver:

where /r C:\ adb.exe

Cela a produit les résultats:

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

Navigation vers chaque répertoire et exécution:

adb.exe version

M'a permis de voir que Expo exécutait la version ADB:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

Alors que Genymotion utilisant le SDK personnalisé avait la version (c: \ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

Comme test, j'ai pris les fichiers adb (adb.exe, AdbWinApi.dll, AdbWinUsbApi.dll) de

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

et les a placés dans un dossier de sauvegarde. J'ai ensuite déplacé les fichiers adb situés à

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

dans ce même endroit. J'ai tué adb avec:

adb kill-server

ce qui a provoqué un redémarrage automatique du serveur adb en raison du fait que mon appareil Genymotion était déjà en cours d'exécution. J'ai appuyé sur le bouton "Redémarrer" à l'intérieur de l'Expo XDE et il a immédiatement commencé à fonctionner. Voici le journal où j'ai appuyé sur le bouton de redémarrage à 1:13:04 du matin:

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

Conclusion: Genymotion et Expo devront peut-être utiliser la même version d'adb afin que l'Expo puisse communiquer correctement avec l'appareil simulé. Le fait de pointer Genymotion vers l'emplacement de votre SDK Android et de vous assurer qu'Expo XDE a cette même version permettra une communication correcte entre les appareils. J'ai déplacé la version d'Expo XDE vers l'emplacement du SDK, mais vous pourrez peut-être aller dans l'autre sens (prenez les fichiers ADB sdk et placez-les dans l'emplacement des ressources d'Expo XDE).

PS J'ai parcouru tous les articles de stackoverflow liés à ce problème. Juste pour que vous sachiez que mon gestionnaire de tâches affiche trois instances d'adb.exe en cours d'exécution. Si vous tuez l'un d'entre eux, ils reviennent.

J'espère que cela aide / applaudit

Kyle s
la source
8

Peut-être que vos versions adb ne correspondent pas

Vérifier:

adb version 

Ensuite:

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

Si ces deux éléments sont différents, vous avez une erreur ici, supprimez simplement adb de sys et copiez celui qui se trouve dans platform-tools dans / usr / bin /

Aldo RVV
la source
4

Si vous souhaitez garder votre système propre, vous pouvez également utiliser Genymotion sans Android Studio :

  1. Trouvez la copie de Genymotion de adb. Sur macOS, c'est normalement /Applications/Genymotion.app/Contents/MacOS/tools/.
  2. Ajoutez le répertoire des outils Genymotion à votre chemin - exécutez / ajoutez la ligne export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATHà votre fichier ~/.bash_profileou ~/.bash_rc.
  3. Assurez-vous que vous pouvez exécuter adb depuis votre terminal.

(D'après https://docs.expo.io/versions/latest/workflow/genymotion )

Cseelus
la source
4

la version adb sur votre système est différente de la version adb sur les outils de la plate-forme android sdk. La suggestion ci-dessous est un travail pour moi pour le système d'exploitation Linux

  1. vérifier la version sys adb exécutez la commande ci-dessous

version adb

Pont de débogage Android version 1.0.39

  1. vérifier la version adb sdk

cd / root / Android / Sdk / plateforme-outils

version ./adb

Pont de débogage Android version 1.0.32

  1. copie

rm / usr / bin / adb

[Remarque: la commande ci-dessus supprime l'adb existant puis copiez l'adb du répertoire sdk / platform-tools]

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

Ensuite, exécutez le projet à l'aide de cette commande

réaction native run-android

Hoque MD Zahidul
la source
c'est une bonne solution pour Linux, cela fonctionne avec ou sans studio android installé
maroof shittu
3

J'ai eu la même chose pendant que j'essayais de courir à partir de l'interface utilisateur de l'expo. J'ai fait les mêmes choses que celles décrites dans les réponses, mais l'application ne fonctionnait pas. Lorsqu'elle a été tentée une fois de s'exécuter à exp androidpartir de la ligne de commande (dans le dossier du projet), l'application s'est exécutée avec succès et la prochaine exécution à partir de l'interface utilisateur d'Expo a réussi.

Aleksandr Suhhinin
la source
2

J'ai eu un problème similaire.

Tout d'abord, j'ai désinstallé l'application. Ensuite, j'ai pointé GenyMotion vers le sdk Android fourni par Android Studio. Ensuite, j'ai exécuté "adb kill-server" dans le terminal. Enfin, j'ai relancé "react-native run-android" et j'ai obtenu un succès de compilation.

VocoJax
la source
2

Les étapes qui ont fonctionné pour moi sont:

  • $ adb kill-server

  • $ adb start-server

  • $ cd android

  • $ ./gradlew nettoyer

  • $ cd ..

  • $ react-native run-android

Ragnar
la source
2

Pour Ubuntu

Ça marche pour moi!!

  1. vérifier la version adb de sys

version adb

Pont de débogage Android version 1.0.39

2 vérifier la version adb sdk

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

version ./adb

Pont de débogage Android version 1.0.32

  1. copie

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

c'est tout! Cela fonctionnera maintenant.

Rajat vindru
la source
1

1. utilisez le chemin sdk personnalisé dans genymotion. (Supposons que celui-ci ne fonctionne pas signifie, essayez d'exécuter le second)

Utilisez manuellement cette commande pour exécuter (SDK PATH / adb she ll am start -n / Package name / MainActivity).

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

Et essayez d'exécuter l'application en utilisant react-native run-android.

Priyanga
la source
1

Ce sont les étapes

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
Muhammed Nazil
la source