ADB and Genymotion error: "adb server is out of date. killing... cannot bind 'tcp:5037' ADB server didn't ACK"
ADB and Genymotion error: "adb server is out of date. killing... cannot bind 'tcp:5037' ADB server didn't ACK"
启动 genymotion 模拟器后尝试从终端使用 adb shell
,我收到此错误:
adb server is out of date. killing...
cannot bind 'tcp:5037'
ADB server didn't ACK
* failed to start daemon *
error:
我读到 this answer on Whosebug 到 运行 这个命令 killall -9 adb
所以我做了,然后它说要更改 genymotion 设置以使用自定义 Android SDK 工具,如下所示:
正如您在上面的屏幕截图中看到的那样,我也这样做了,但我仍然不断收到相同的错误消息。
每当我尝试 运行 adb shell
:
时,我的 android Studio ADB 日志都会显示以下消息
DeviceMonitor: Adb connection Error:EOF
DeviceMonitor: Connection attempts: 1
我什至尝试创建一个新的虚拟设备并使用它,但没有成功。
如果您有 1.0.31 或更低版本,请将 adb 更新为 1.0.32
adb version
Android Debug Bridge version 1.0.31
wget -O - https://skia.googlesource.com/skia/+archive/cd048d18e0b81338c1a04b9749a00444597df394/platform_tools/android/bin/linux.tar.gz | tar -zxvf - adb
sudo mv adb /usr/bin/adb
sudo chmod +x /usr/bin/adb
adb version
Android Debug Bridge version 1.0.32
这个问题的根本原因是您尝试运行不同版本的adbs。
PC(Host)端adb由adb和adb server两部分组成
adb <----> adb 服务器 <--------USB--------> adbd(设备)
adb 和 adb server 实际上是相同的二进制文件,但是当您第一次发出 adb 命令时,adb server 运行正在后台运行。之后,每次你 运行 adb 时,adb 命令都会联系哪个 adb 服务器,首先它会检查 运行ning adb 服务器的版本。如果版本不匹配,那么您将看到 'adb server is out of date. killing...'。这是唯一的原因。
int adb_connect(const std::string& service, std::string* error) {
// first query the adb server's version
int fd = _adb_connect("host:version", error);
...
if (version != ADB_SERVER_VERSION) {
printf("adb server is out of date. killing...\n");
fd = _adb_connect("host:kill", error);
adb_close(fd);
/* XXX can we better detect its death? */
adb_sleep_ms(2000);
goto start_server;
}
要解决此问题,您只需要确保您没有尝试 运行 不同版本的 adb。
- 使用任务管理器工具找到运行ning adb server 的二进制路径,搜索"adb"。使用命令
检查其版本
[path to adb server]/adb version
输出如下:
Android Debug Bridge version 1.0.35
Revision 68de85bda98d-android
“1.0.35”是版本号。
- 检查导致问题的adb 版本。只需输入
adb version
- 比较版本号,它们必须匹配。
如果不匹配,您可以:
- 只保留一个adb,删除其他的。
- 或者您可以忽略该错误。如果它总是显示,请找出谁在为您 运行 设置不同的 adb 工具并停止它。比如一些phone辅助程序。
这些解决方案都不适合我。
解决我的错误的解决方案是将缺少的 /Android/Sdk/tools 和 /Android/Sdk/platform-tools 目录添加到我的环境 PATH 变量中,这可以通过以下命令实现:
export PATH=/home/{username}/Android/Sdk/tools:/home/{username}/Android/Sdk/platform-tools:$PATH
请务必将您自己的用户名插入到命令中,将 {username} 替换为您的操作系统用户名。
这样做会指示您的命令行在 Environmant 的 PATH 变量中搜索 adb 可执行文件的正确位置,如果没有设置此环境变量,您的系统将不知道在哪里寻找正确的可执行文件。
启动 genymotion 模拟器后尝试从终端使用 adb shell
,我收到此错误:
adb server is out of date. killing...
cannot bind 'tcp:5037'
ADB server didn't ACK
* failed to start daemon *
error:
我读到 this answer on Whosebug 到 运行 这个命令 killall -9 adb
所以我做了,然后它说要更改 genymotion 设置以使用自定义 Android SDK 工具,如下所示:
正如您在上面的屏幕截图中看到的那样,我也这样做了,但我仍然不断收到相同的错误消息。
每当我尝试 运行 adb shell
:
DeviceMonitor: Adb connection Error:EOF
DeviceMonitor: Connection attempts: 1
我什至尝试创建一个新的虚拟设备并使用它,但没有成功。
如果您有 1.0.31 或更低版本,请将 adb 更新为 1.0.32
adb version
Android Debug Bridge version 1.0.31
wget -O - https://skia.googlesource.com/skia/+archive/cd048d18e0b81338c1a04b9749a00444597df394/platform_tools/android/bin/linux.tar.gz | tar -zxvf - adb
sudo mv adb /usr/bin/adb
sudo chmod +x /usr/bin/adb
adb version
Android Debug Bridge version 1.0.32
这个问题的根本原因是您尝试运行不同版本的adbs。 PC(Host)端adb由adb和adb server两部分组成
adb <----> adb 服务器 <--------USB--------> adbd(设备)
adb 和 adb server 实际上是相同的二进制文件,但是当您第一次发出 adb 命令时,adb server 运行正在后台运行。之后,每次你 运行 adb 时,adb 命令都会联系哪个 adb 服务器,首先它会检查 运行ning adb 服务器的版本。如果版本不匹配,那么您将看到 'adb server is out of date. killing...'。这是唯一的原因。
int adb_connect(const std::string& service, std::string* error) {
// first query the adb server's version
int fd = _adb_connect("host:version", error);
...
if (version != ADB_SERVER_VERSION) {
printf("adb server is out of date. killing...\n");
fd = _adb_connect("host:kill", error);
adb_close(fd);
/* XXX can we better detect its death? */
adb_sleep_ms(2000);
goto start_server;
}
要解决此问题,您只需要确保您没有尝试 运行 不同版本的 adb。
- 使用任务管理器工具找到运行ning adb server 的二进制路径,搜索"adb"。使用命令 检查其版本
[path to adb server]/adb version
输出如下:
Android Debug Bridge version 1.0.35
Revision 68de85bda98d-android
“1.0.35”是版本号。
- 检查导致问题的adb 版本。只需输入
adb version
- 比较版本号,它们必须匹配。
如果不匹配,您可以:
- 只保留一个adb,删除其他的。
- 或者您可以忽略该错误。如果它总是显示,请找出谁在为您 运行 设置不同的 adb 工具并停止它。比如一些phone辅助程序。
这些解决方案都不适合我。
解决我的错误的解决方案是将缺少的 /Android/Sdk/tools 和 /Android/Sdk/platform-tools 目录添加到我的环境 PATH 变量中,这可以通过以下命令实现:
export PATH=/home/{username}/Android/Sdk/tools:/home/{username}/Android/Sdk/platform-tools:$PATH
请务必将您自己的用户名插入到命令中,将 {username} 替换为您的操作系统用户名。
这样做会指示您的命令行在 Environmant 的 PATH 变量中搜索 adb 可执行文件的正确位置,如果没有设置此环境变量,您的系统将不知道在哪里寻找正确的可执行文件。