React-Native,Android,Gen​​ymotion:ADB服务器未确认


168

我正在Mac上使用React-Native,Android和Genymotion。运行react-native run-android时,在启动操作结束时得到以下行:

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

但是,adb devices返回以下内容:

List of devices attached
192.168.59.101:5555 device

到目前为止,我还没有找到在模拟器上运行我的应用程序的解决方案。有没有人遇到过同样的问题?

谢谢保罗


无论Genymotion运行如何,都可能发生此错误。
IgorGanapolsky '17

Answers:


319

经过更多研究,我意识到Genymotion默认使用其自己的adb。

在此处输入图片说明

我切换到我的主adb(与react-native相同),它解决了这个问题。我猜是因为首先启动了Genymotion的adb,我收到了 Address already in use错误消息。


4
感谢您发布此信息。我快要心脏病发作了,昨晚我将Android Studio 2.1更新为Preview 3,并且genymotion无法连接了。这帮助我解决了。
西蒙(Simon)

7
我尝试了此解决方案,但仍然遇到相同的错误。有替代解决方案吗?
calclavia

1
@ user2254679您是否也检查了此线程?stackoverflow.com/questions/5703550/…–
保罗

@Paul您能详细说明您提供的路径吗?这个本地的adb被react-native使用在哪里?我正在尝试提供我的Android SDK的路径,但是它不起作用。用英语最好。
K Pal

@KPal,该路径特定于您自己的设置。就我而言,这是当时Mac中安装Android的标准路径:/Users/$yourName/Library/Android/sdk。如果您安装了Android,则应根据Android版本/平台搜索路径。
保罗

45

我正在使用genymotion,但仅Paul的解决方案并不能解决错误(对于Mac)。

我不得不:

通过SDK管理器将Android SDK更新到最新版本(24.4.1)

键入android命令行

在SDK管理器中,找到最新的SDK工具并进行安装。

安装后,SDK路径应更新新的SDK位置,如下所示。

在此处输入图片说明

然后更新$ ANDROID_HOME以使用新的SDK

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

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

通过查看您的路径来确认已添加 echo $PATH

然后在genymotion中执行@Paul上面的内容,并指向genymotion ADB使用相同的SDK

在此处输入图片说明


它适用于Ubuntu 16.04。由于某种原因,我认为$ANDROID_HOME/tools目录在类路径上不是必需的。您需要添加才能连接到adb。
奥拉尔

10

系统: Windows 10

我的问题:将Genymotion设置为指向自定义SDK不会产生任何影响。我仍然收到:

无法在Android上启动项目:无法安装smartsocket侦听器:无法绑定到127.0.0.1:5037:通常,每个套接字地址(协议/网络地址/端口)仅允许使用一种。(10048)无法从ADB服务器读取ok *无法启动守护程序*错误:无法连接到守护程序

我发现整个系统使用的ADB版本有所不同。这是我用来查找它们的命令:

where /r C:\ adb.exe

这产生了结果:

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

导航到每个目录并运行:

adb.exe version

让我看到Expo正在运行ADB版本:

Android Debug Bridge version 1.0.36
Revision fd9e4d07b0f5-android

使用自定义SDK的Genymotion具有版本(c:\ Users \ kyle \ AppData \ Local \ Android \ Sdk \ platform-tools \ adb.exe):

Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android

作为测试,我从以下目录获取了adb文件(adb.exe,AdbWinApi.dll,AdbWinUsbApi.dll)

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

并将它们放入备份文件夹中。然后,我将位于

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

到同一位置。我杀了亚行:

adb kill-server

由于我的Genymotion设备已经在运行,因此会自动重启adb服务器。我点击了Expo XDE内的“重新启动”按钮,它立即开始工作。这是我在1:13:04 AM按下重新启动按钮的日志:

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

结论: Genymotion和Expo可能需要使用相同版本的adb,以便Expo可以与模拟设备正确通信。将Genymotion指向您的android SDK位置,并确保Expo XDE具有相同的版本,将允许设备之间进行正确的通信。我已将Expo XDE版本移至SDK位置,但您可能可以采用其他方法(获取sdk ADB文件并将其放置在Expo XDE资源位置)。

聚苯乙烯我一直都在与这个问题相关的stackoverflow帖子中。大家知道我的任务管理器显示了adb.exe运行的三个实例。如果您杀死其中任何一个,它们就会回来。

希望这可以帮助/欢呼


8

也许您的adb版本不匹配

检查:

adb version 

然后:

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

如果这两个不同,则您在这里遇到错误,只需从sys中删除adb并将platform-tools中的一个复制到/ usr / bin /


4

如果要保持系统清洁,还可以在没有Android Studio的情况下使用Genymotion

  1. 查找Genymotion的副本adb。在macOS上,这通常是/Applications/Genymotion.app/Contents/MacOS/tools/
  2. 将Genymotion工具目录添加到您的路径-将行执行/添加export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATH到您的~/.bash_profile或中~/.bash_rc
  3. 确保可以从终端运行adb。

(来自https://docs.expo.io/versions/latest/workflow/genymotion


4

您系统上的adb版本与android sdk platform-tools上的adb版本不同。以下建议对我来说适用于Linux操作系统

  1. 检查sys adb版本运行以下命令

亚行版本

Android Debug Bridge版本1.0.39

  1. 检查sdk adb版本

cd / root / Android / SDK / platform-tools

./adb版本

Android Debug Bridge版本1.0.32

  1. 复制

rm / usr / bin / adb

[注意:以上命令删除现有的adb,然后从sdk / platform-tools目录复制adb]

须藤cp / root / Android / SDK / platform-tools / adb / usr / bin / adb

然后使用此命令运行项目

react-native运行Android


这对于Linux是一个很好的解决方案,无论安装或不安装android studio
均可使用

3

尝试从expo UI运行时,我遇到了同样的事情。如答案中所述执行相同的操作,但是应用未运行。一旦尝试exp android从命令行(在项目文件夹中)运行,则应用程序成功运行,并且下次从Expo UI运行成功。


2

我有一个类似的问题。

首先,我卸载了该应用程序。然后,我将GenyMotion指向从Android Studio提供的android sdk。接下来,我将“ adb kill-server”运行到终端中。最后,我重新运行了“ react-native run-android”,并获得了构建成功。


2

对我有用的步骤是:

  • $ adb杀死服务器

  • $ adb启动服务器

  • $ cd android

  • $ ./gradlew clean

  • $ cd ..

  • $ react-native运行Android


2

对于Ubuntu

这个对我有用!!

  1. 检查sys adb版本

亚行版本

Android Debug Bridge版本1.0.39

2检查SDK ADB版本

cd / home /用户名/ Android / sdk / platform-tools

./adb版本

Android Debug Bridge版本1.0.32

  1. 复制

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

就这样!现在可以使用了。


1

1.在genymotion中使用自定义的sdk路径。(假设此路径无效,请尝试执行第二个路径)

2.手动使用此命令执行(SDK PATH / adb她将开始-n /软件包名称/ MainActivity)。

C:\ Users \ AppData \ Local \ Android \ Sdk / platform-tools / adb她将开始-n com.example / com.example.ManiActivity

并尝试使用react-native run-android运行应用程序。


1

这些是步骤

$ adb kill-server

$ adb start-server

$ cd android

$ ./gradlew clean

$ cd ..

$ react-native run-android
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.