最近经常用 AI 调试 Android 手机,写手机程序,一般是手机开个无线调试,然后 adb 匹配一下,就可以连接了。这几天因为 ghostty 作者新出了一个叫做 Rex 的终端,就开始用了,结果发现一个奇怪的现象,=adb pair= 无法匹配我开的无线调试端口了。想起来似乎也刚升级了系统,是不是有什么系统上的问题。先重启吧,就把手机和电脑都重启了下,结果依然没解决。

整个开发目录,开个 codex 来研究,他哼哧哼哧整了半天,然后说有个办法,用 nc 来转接一下, nc 建立本地代理转发 adb ,然后 adb 连 nc ,曲线救国解决。急着调试,就先这么用了。

第二天又想起这个事情,就再次研究了下,=codex= 说这个 adb 访问一个局域网地址也报 no route to host ,但我 ping , nc 都是成功的。然后他说是不是终端没有权限,我说如果终端没有权限,那 nc/ping 之类的不也跑在这个终端下吗?你去抓个包研究下,于是 codex 启动什么 tcpdump 之类的去整了。过一会他说,确定是 adb 在发网络包之前就被断了,根本没包发出去,但是 nc 之类的可以,大概率还是权限问题。我接着再次问为什么 nc 可以,又去研究了下,告诉我,这个 nc 在 /usr/bin/nc 中,是系统自带的,具有系统签名,因此可以访问网络,你这个 adb 是没有的,所以他要继承终端的权限,如果你终端里面没有权限,那就不能访问,可以使用自带的 Terminal 先尝试一下。于是我开一个 Terminal 来连接,果然好了。于是就去权限里面看,果然有个访问本地网络的权限,这个终端没有打开,打开了重启下终端,再测试就没问题了。

我又尝试了其他的程序之类的,一半在第一次要访问网络时,会蹦出来叫确认,但这个 Rex 不知道是蹦出来被我无意中拒绝了还是什么,导致了这个看起来诡异的结果。不得不吐槽 MacOS 的权限确实有很多离奇不好理解的地方,幸亏现在有 =AI=,不然想破头也查不到真正的原因吧。