科普发布于: 阅读约 3 分钟

无线调试端口为什么每次都变?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。
  • 端口没变却连不上? 检查无线调试是否已自己关闭,见 无线调试自动关闭怎么办。