系统: 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
并将它们放入备份文件夹中。然后我移动了位于
的adb文件
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 资源位置)。
P.S. 我已经浏览过与此问题相关的 stackoverflow 帖子。让你们知道我的任务管理器显示了三个正在运行的 adb.exe 实例。如果你杀了他们中的任何一个,他们就会回来。
希望这有助于/干杯