React-Native, Android, Genymotion: le serveur ADB n’a pas été ACK

Je travaille avec React-Native, Android et Genymotion sur Mac. Quand je lance react-native run-android j’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, les adb devices retournent 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

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

entrer la description de l'image ici

Je suis passé à mon adb principal (le même que celui utilisé par rea-native) et cela a résolu le problème. J’imagine que parce que la firebase database de Genymotion a été lancée en premier, j’ai reçu le message d’erreur Address already in use .

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

J’ai dû:

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

Tapez android dans la 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.

entrer la description de l'image ici

Ensuite, mettez à jour le fichier $ 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

Puis, dans genymotion, faites ce que @Paul dit ci-dessus et montrez à genymotion ADB d’utiliser le même sdk

entrer la description de l'image ici

Système: Windows 10

Mon problème: la définition de Genymotion sur le SDK personnalisé n’a eu aucun effet. J’ai toujours reçu le:

Impossible de démarrer le projet sous Android: impossible d’installer smartsocket listener: impossible de lier 127.0.0.1:5037: Une seule utilisation de chaque adresse de socket (protocole / adresse réseau / port) est normalement autorisée. (10048) Impossible de lire ok depuis ADB Server * Impossible de 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 de la BAD 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 

Naviguer vers chaque répertoire et en cours d’exécution:

 adb.exe version 

Cela m’a permis de voir que Expo utilisait la version ADB:

 Android Debug Bridge version 1.0.36 Revision fd9e4d07b0f5-android 

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

 Android Debug Bridge version 1.0.39 Revision 3db08f2c6889-android 

En tant que 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 de l’exécution de mon appareil Genymotion. J’ai appuyé sur le bouton “Redémarrer” à l’intérieur de l’Expo XDE et cela a immédiatement commencé à fonctionner. Voici le journal où j’appuie sur le bouton de redémarrage à 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). 

Conclusion: Genymotion et Expo devront peut-être utiliser la même version d’adb pour que Expo puisse communiquer correctement avec l’appareil simulé. Le fait de pointer Genymotion sur l’emplacement de votre SDK Android et d’assurer à Expo XDE la 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 pourriez peut-être aller dans l’autre sens (prenez les fichiers sdk ADB et placez-les à l’emplacement de la ressource Expo XDE).

Post-scriptum Je suis passé par tous les messages de stackoverflow liés à ce problème. Juste pour que vous sachiez que mon gestionnaire de tâches affiche trois instances de adb.exe en cours d’exécution. Si vous les tuez, ils reviendront.

J’espère que ça aide / acclame

Peut-être que vos versions d’adb ne correspondent pas

Vérifier:

 adb version 

Alors:

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

Si ces deux 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 /

J’ai eu un problème similaire.

Tout d’abord, j’ai désinstallé l’application. Ensuite, j’ai orienté GenyMotion vers le sdk Android fourni par Android Studio Next, j’ai lancé “adb kill-server” dans le terminal. Finalement, j’ai relancé “run-android Android” et j’ai eu un succès de construction.

J’ai eu la même chose pendant que je tentais de courir depuis l’interface utilisateur d’Expo. A fait les mêmes choses, comme décrit dans les réponses, mais l’application ne fonctionnait pas. Une fois que vous avez essayé, exécutez exp android partir de la ligne de commande (dans le dossier du projet), l’application s’est exécutée avec succès et les prochaines exécutions à partir d’Expo UI ont réussi.

Les étapes travaillées pour moi sont:

  • $ adb kill-server

  • $ adb start-server

  • $ cd android

  • $ ./gradlew propre

  • $ cd ..

  • $ rea-native run-android

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

  1. Trouver 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 ~/.bash_profile ou ~/.bash_rc .
  3. Assurez-vous que vous pouvez exécuter adb à partir de votre terminal.

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

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

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

version adb

Android Debug Bridge version 1.0.39

  1. vérifier la version de sdk adb

cd / root / Android / Sdk / platform-tools

./adb version

Android Debug Bridge version 1.0.32

  1. copie

rm / usr / bin / adb

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

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

Puis lancez le projet en utilisant cette commande

run-android natif