adb devices 设备发现与调试。整条链路:手机端设备开启 tcpip 监听 → 通过 SSH 反向隧道把端口打到 macmini → macmini 本地 adb 连接发现设备。
三个角色,先确认清楚:
| 角色 | 说明 | 本教程示例 |
|---|---|---|
| 手机 | USB 连在手机端电脑上,开发者选项已开启 USB 调试 | e49d82e0 |
| 手机端电脑(跳板) | 能 adb 到手机、能 ssh 到 macmini | 你身边的笔记本 |
| macmini(家里) | 装了 adb,接受 SSH 连接的目标机 | gencylee@macmini |
确认手机已被识别:
adb devices
让手机在 5555 端口监听 adb 连接(在手机端电脑上执行):
adb -s e49d82e0 tcpip 5555
-s e49d82e0 指定具体设备,多设备时必须加。执行后手机进入 tcpip 模式,此时可以拔掉 USB(同网络下 wifi 也能连)。在手机端电脑上,把本地的 5555 通过反向隧道映射到 macmini 的 5555:
ssh -R 5555:localhost:5555 gencylee@macmini
5055:localhost:5055,但手机监听的是 5555,adb connect 又连的 5555 —— 端口不一致会连不上。ssh -R [macmini监听端口]:localhost:[手机端本地端口] user@macmini,两端都应为 5555。这条命令的含义:macmini 上访问 127.0.0.1:5555 的流量,会被 SSH 隧道转发回手机端电脑的 localhost:5555,也就是手机的 adb 端口。
保持上面的 SSH 会话不断开,在 macmini 上执行:
adb connect 127.0.0.1:5555 && adb devices
127.0.0.1:5555 device 就成功了。之后 adb shell、adb install、scrcpy 投屏等都能直接用。手机端电脑 ① 开 tcpip ② 建隧道
# ① 手机开启 tcpip 监听
adb -s e49d82e0 tcpip 5555
# ② 反向隧道到 macmini(端口对齐 5555)
ssh -R 5555:localhost:5555 gencylee@macmini
macmini ③ 连接发现
adb connect 127.0.0.1:5555 && adb devices
SSH 隧道容易因网络波动断开,用 autossh 自动重连:
autossh -M 0 -N -R 5555:localhost:5555 gencylee@macmini \
-o "ServerAliveInterval 30" \
-o "ServerAliveCountInterval 3" \
-o "ExitOnForwardFailure yes"
-N 不开远程 shell 只做转发,-M 0 关闭 autossh 自带监控改用 SSH 保活参数。| 现象 | 原因 / 解决 |
|---|---|
connection refused | 端口不一致(隧道用了 5055 但手机是 5555),改成两端都 5555;或手机没执行 tcpip。 |
device offline | 在 macmini 上 adb kill-server 后重新 adb connect。 |
| 隧道秒断 | 加 ServerAliveInterval 保活,或用 autossh。 |
| macmini 已占用 5555 | 换端口:隧道 -R 5556:localhost:5555,连接 adb connect 127.0.0.1:5556。 |
| 拔 USB 后掉线 | tcpip 模式依赖同网络可达手机 IP;跨网络时手机端电脑必须始终能 adb 到手机。 |
127.0.0.1(默认即是),不要 -R 0.0.0.0:5555 暴露到 macmini 公网,否则任何人都能调试你的手机。