无线调试端口为什么每次都变?adb 端口查找与固定端口的方法
安卓无线调试每次打开、每次重启端口都会变,adb connect 就连不上。本文解释端口变化的原因,教你用 adb mdns services 自动查找端口,以及用 adb tcpip 固定 5555 端口的做法和缺点。
无线调试的端口每次打开开关都会重新随机分配,重启手机后也一样,所以上次记下的 adb connect IP:端口 这次就会报 Connection refused。这是 Android 有意这么设计的,没有设置能把它固定下来。实际可行的办法有两个:用 mDNS 自动查找当前端口,或者改用 adb tcpip 开一个固定的 5555 端口(有代价)。
一共有三个端口
| 端口 | 在哪里看 | 用途 | 什么时候变 |
|---|---|---|---|
| 连接端口 | 无线调试页面顶部「IP 地址和端口」 | adb connect | 每次打开无线调试 |
| 配对端口 | 「使用配对码配对设备」窗口里 | adb pair,只用一次 | 每次打开配对窗口 |
| 5555 | 不显示 | 旧式 adb tcpip,未加密 | 固定,重启后失效 |
配对只需要一次。以后每次只需要知道当前的连接端口。
为什么端口会变
无线调试启动时,adbd 会在一个随机的高位端口上监听,并通过 mDNS(局域网服务发现,和打印机、投屏用的是同一套机制)广播自己,服务类型是 _adb-tls-connect._tcp。设计思路是:客户端靠服务名找手机,而不是靠一个固定端口。随机端口也让在局域网里扫描 5555 这类老端口的做法失效。
方法一:让 adb 自己找端口
platform-tools 30 及以上的 adb 内置 mDNS 支持:
adb mdns check
adb mdns services输出大致是:
List of discovered mdns services
adb-R5CT1234ABC-xYz12a _adb-tls-connect._tcp 192.168.1.20:41237已经配对过的手机,adb 一般会自动连接它发现的服务,adb devices 里直接就能看到。没有自动连上时,用列出来的地址和端口手动 adb connect。
adb mdns check 报错或什么都发现不了时:
- Windows 上可能被防火墙拦了 mDNS(UDP 5353),给 adb 放行。
- 路由器开了 AP 隔离或屏蔽组播,换成家用网络试。
- 在环境变量里设置
ADB_MDNS_OPENSCREEN=1后重启 adb server,改用 adb 内置的 mDNS 实现(较新版本已默认启用)。
方法二:固定 5555 端口(adb tcpip)
先用无线调试连上一次,再让 adbd 额外监听 5555:
adb -s 192.168.1.20:41237 tcpip 5555
adb connect 192.168.1.20:5555之后就能一直用 IP:5555。但要清楚它的缺点:
- 不加密,也不需要配对:同一网络里任何人只要手机点了允许,就能连。
- 重启后失效:要重新打开无线调试再执行一次。
- IP 也可能变:路由器给手机分配的地址会变,最好在路由器里给手机绑定固定 IP。
两种方式的完整对比见 adb tcpip 与无线调试的区别。
ADB Kit:不用管端口
ADB Kit 是 Google Play 上的安卓 App(中国大陆通常无法直接访问 Google Play),在手机上通过无线调试连接本机。它和 Android Studio 一样用 mDNS 查找服务:
- 配对时,App 自己找到配对服务,你只需在通知里输入 6 位配对码。
- 以后每次打开无线调试,App 按服务名找到新端口并重新连接,不需要你看或输入任何端口。
- 连接其他手机时也一样:对方重新打开无线调试后端口变了,App 会按名称或地址重新找到它。
需要手动输入时,设置里也有「通过 IP 地址连接」。
常见问题
- 连接端口和配对端口能用同一个吗? 不能,它们是两个不同的服务。
- mDNS 能发现但连不上? 先确认这台设备已经配对,未配对的手机只能
adb pair。 - 端口没变却连不上? 检查无线调试是否已自己关闭,见 无线调试自动关闭怎么办。