家里的电视支持通过网络连接 ADB。在娱乐用的 Windows 电脑上,连接一直正常;换到 Mac 后,执行连接却反复提示 No route to host。

排查过程

从局域网连通性、macOS 权限和防火墙开始检查,最后发现桌面上还开着 Android Studio。

检查局域网连通性

先确认 Mac 能否访问电视的局域网地址:

ping 192.168.1.100

随后检查 ADB 使用的 5555 端口:

nc -vz 192.168.1.100 5555

两项测试都能通过,说明基本网络路径和目标端口可达,路由器的设备隔离也不像是问题所在。但 adb connect 仍然失败,成功排除掉一个错误答案。

检查 macOS 本地网络权限

接着检查 macOS 是否限制了终端程序访问本地网络。相关设置位于:

系统设置 → 隐私与安全性 → 本地网络

设置列表中没有 adb,也没有找到将这个命令行程序手动加入列表的方式,因此无法通过这里直接放行。

检查 macOS 防火墙

随后查看系统防火墙设置,在应用列表中找到了 adb,其规则为“阻止传入连接”。这项设置控制的是其他设备能否连接到这台 Mac 上的 ADB 服务。

即使(抱着试一试的态度)调整后重新测试,连接问题仍然存在。

查看 ADB 调试日志

为了了解连接失败发生在哪一步,运行 ADB 的详细跟踪日志:

ADB_TRACE=all adb connect 192.168.1.100:5555

AI根据日志,建议先重启了本机的 adb server。不过此前已经多次结束并重新启动过 ADB,问题依旧,所以我继续检查当时正在运行的程序。

这时才注意到桌面上还开着 Android Studio。我先退出 Android Studio,再重启 ADB,然后重新连接:

adb connect 192.168.1.100:5555

这一次,电视成功弹出了授权提示。

结论

网络连通性和 5555 端口测试都正常;检查本地网络权限与防火墙后,问题仍未解决。退出 Android Studio 并重启 ADB 后,电视弹出了授权提示,连接恢复正常。

在与AI沟通的过程中,背景信息太重要了。最好事无巨细的告知。如果使用agent也许可以更快的解决问题。

Android Studio自带的命令行,会守护adb server 与独立安装的 adb 冲突。也就是会不断kill,导致在执行adb connect的时候,实际调用的有可能是Android Studio自带的adb,导致路由到了错误的网络中(虚拟机网络),所以就找不到我们真实的网络。