反应-原生,Android,Genymotion: ADB 服务器没有应答

我正在 Mac 平台上使用本机、 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

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

谢谢, 保罗

88026 次浏览

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

enter image description here

我切换到我的主 adb (同反应原生使用) ,它解决了这个问题。我猜想,因为 Genymotion 的 adb 是首先启动的,所以我得到了 Address already in use错误消息。

我正在使用 genymotion,但是 Paul 的解决方案本身并没有修复错误(对于 Mac)。

我不得不:

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

在命令行中键入 android

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

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

enter image description here

然后更新 $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

enter image description here

系统: Windows10

我的问题: 设置 Genymotion 指向定制的 SDK 没有任何影响,我仍然收到:

无法在 Android 上启动项目: 无法安装 Smartsocket 侦听器: 无法绑定到127.0。0.1:5037: 每个套接字只有一种用法 地址(协议/网络地址/端口)通常是允许的 无法从 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

让我看到了世博会运行的亚行版本:

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

然后我把 adb 文件移动到

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

在同一个地方,我杀了 adb 用的是:

adb kill-server

由于我的 Genymotion 设备已经运行,导致 adb 服务器自动重新启动。我点击了世博会 XDE 内部的“重启”按钮,它立即开始工作。这是我在凌晨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).

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

我已经看过了所有与这个问题相关的堆栈溢出文章。我的任务管理器显示了运行 adb.exe 的三个实例。如果你杀了他们中的任何一个,他们就会回来。

希望这能有所帮助/干杯

当我试图逃离世博用户界面时,我也遇到了同样的问题。 做同样的事情,如答案中所描述的,但应用程序没有运行。 当尝试从命令行(在项目文件夹中)运行 exp android时,应用程序运行成功,下次从 Expo UI 运行成功。

我也有过类似的问题。

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

对我奏效的步骤是:

  • $adb kill-server

  • $adb start-server

  • $cd android

  • $./gradlew clean

  • $cd. .

  • 反应-本地运行-机器人

如果你想保持你的系统干净,你也可以 在没有 Android Studio 的情况下使用 Genymotion:

  1. 找到 Genymotion 的 adb拷贝。在 macOS 上这通常是 /Applications/Genymotion.app/Contents/MacOS/tools/
  2. 将 Genymotion 工具目录添加到路径-execute/将代码行 export PATH=/Applications/Genymotion.app/Contents/MacOS/tools/:$PATH添加到 ~/.bash_profile~/.bash_rc
  3. 确保可以从终端运行 adb。

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

也许你的 adb 版本不匹配

检查:

adb version

然后:

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

如果这两个不同,那么这里有一个错误,只需从 sys 中删除 adb,并将 Platform-tools 中的 adb 复制到/usr/bin/

您系统上的 adb 版本不同于 android sdk 平台上的 adb 版本-tools。 下面的建议是为我工作的 Linux 操作系统

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

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 ]

Sudo cp/root/Android/Sdk/Platform-tools/adb/usr/bin/adb

然后使用此命令运行项目

本地运行机器人

1. 在 genymotion 中使用自定义 sdk 路径。(假设这个不起作用,尝试执行第二个)

2. 手动使用此命令执行(SDK PATH/adb she Ll am start-n/Package name/MainActivity).

用户 AppData 本地 Android Sdk/Platform-tools/adb she Ll am start-n com.example/com.example. ManiActivity

并尝试使用反应本机 run-android 运行应用程序。

为了 Ubuntu

对我有用! !

  1. 检查系统的 adb 版本

Adb 版本

Android Debug Bridge 版本1.0.39

2检查 sdk adb 版本

Cd/home/user _ name/Android/sdk/Platform-tools

。/adb 版本

Android Debug Bridge 版本1.0.32

  1. 收到

Sudo cp/home/user _ name/Android/sdk/Platform-tools/adb/usr/local/bin

就是这样! 现在会成功的。

当我试图在 Genymotion 运行我的本地反应项目时,同样的问题发生了

对于 Linux ubuntu 20.04 转到 /home/mycomputer/Android/Sdk/platorm-tools

运行 $./adb version

只需复制 /usr/bin中的 adb 路径

$ sudo cp /home/raik/Android/Sdk/platform-tools/adb /usr/bin

然后我就可以在 Genymotion 运行我的项目了。

注意: 在某些 Linux 系统中,可能会复制到这个路径/usr/local/bin’

如果有人使用 Android Studio 模拟器在 Windows 中遇到这个问题,那么只需在 powershell 或 cmd 中运行以下命令:

taskkill /F /IM adb.exe

它应该杀死所有的 adb 进程实例,然后您可以重新加载应用程序或通过 Expo CLI 再次启动 Android 上的应用程序。