繁体   English   中英

React-Native、Android、Genymotion:ADB 服务器没有 ACK

[英]React-Native, Android, Genymotion: ADB server didn't ACK

我正在 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 默认使用自己的 adb。

在此处输入图片说明

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

我正在使用 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

在此处输入图片说明

系统: Windows 10

我的问题:将 Genymotion 设置为指向自定义 SDK 没有任何影响。 我还是收到了:

无法在 Android 上启动项目:无法安装智能套接字侦听器:无法绑定到 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

作为测试,我从

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:

adb kill-server

由于我的 Genymotion 设备已经在运行,这导致 adb 服务器自动重启。 我点击了 Expo 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 资源位置)。

PS我已经阅读了与此问题相关的所有 stackoverflow 帖子。 只是为了让你们知道我的任务管理器显示了三个正在运行的 adb.exe 实例。 如果你杀了他们中的任何一个,他们就会回来。

希望这有帮助/干杯

也许你的 adb 版本不匹配

查看:

adb version 

然后:

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

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

如果想保持系统干净,您也可以使用 Genymotion 而不使用 Android Studio

  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

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

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

亚行版

Android 调试桥版本 1.0.39

  1. 检查 sdk adb 版本

cd /root/Android/Sdk/platform-tools

./adb 版本

Android 调试桥版本 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 run-android

当我尝试从 expo UI 运行时,我遇到了同样的事情。 做了同样的事情,如答案中所述,但应用程序没有运行。 当一次尝试从命令行(在项目文件夹中)运行exp android ,应用程序运行成功,下次从 Expo UI 运行成功。

我有一个类似的问题。

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

对我有用的步骤是:

  • $ adb kill-server

  • $ adb 启动服务器

  • $ cd 安卓

  • $ ./gradlew 干净

  • $ cd ..

  • $ react-native run-android

对于 Ubuntu

这个对我有用!!

  1. 检查系统 adb 版本

亚行版

Android 调试桥版本 1.0.39

2 检查sdk adb 版本

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

./adb 版本

Android 调试桥版本 1.0.32

  1. 复制

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

就这样! 它现在会起作用。

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

2.手动使用此命令执行(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

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

当我尝试在 Genymotion 中运行我的 react-native 项目时发生了同样的问题

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

运行$./adb version

只需将 adb 路径复制到/usr/bin

$ 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 上启动应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM