adb 因“无法绑定'local:5037'”而失败

use*_*740 3 android

任何adb命令都会产生以下输出:

* daemon not running. starting it now on port 5037 *
cannot bind 'local:5037'
ADB server didn't ACK
* failed to start daemon *
error: cannot connect to daemon
Run Code Online (Sandbox Code Playgroud)

没有正在运行的 adb 实例,也没有使用 TCP 端口 5037。

use*_*740 6

请注意,错误说local:5037, not tcp:5037。ADB 实际上正在尝试连接到 的 unix 套接字/tmp/5037,但失败了。

就我而言,这是因为我之前以 root 身份运行 adb。因此,套接字归 root 所有,禁止我的用户删除它。相关摘录自strace adb fork-server server

socket(PF_LOCAL, SOCK_STREAM, 0)        = 8
unlink("/tmp/5037")                     = -1 EPERM (Operation not permitted)
setsockopt(8, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(8, {sa_family=AF_LOCAL, sun_path="/tmp/5037"}, 12) = -1 EADDRINUSE (Address already in use)
close(8)                                = 0
Run Code Online (Sandbox Code Playgroud)

  • 对于发现此问题的其他任何人,`sudo adb kill-server` 可能无法释放端口,而 `sudo rm /tmp/5037` 似乎可以修复它。 (4认同)