赶项目熬夜调试安卓真机的时候,电脑突然弹出adb连接失败的弹窗,盯着屏幕发呆几秒,满脑子都在想adb端口被占用怎么办,明明前一分钟还能正常连接设备调试,没改动任何代码和设置,毫无征兆就出了问题,手头的功能迭代进度直接卡在这一步,越急越乱,胡乱点了几遍重启调试,结果报错依旧,完全没头绪。
最先瞎试的办法就是重启Android Studio。以为是软件缓存出错,彻底关闭软件,清空后台所有开发程序,等了半分钟重新打开,再次连接设备,依旧提示端口占用,白白浪费了十几分钟,压根没起到一点作用。当时还侥幸觉得是软件加载卡顿,反复开关了三四次工具,结果每次都是一模一样的报错提示,心态直接有点烦躁。
纯白费功夫。
后面又跟着零散的教程瞎操作,直接重启电脑,笃定系统重启总能清空所有占用端口的程序。重启完成后打开开发工具,刚开始居然短暂连接成功了一次,当时还松了口气,以为问题彻底解决了,结果刚切换调试设备、准备测试新写的功能,报错弹窗瞬间再次弹出,端口占用的问题卷土重来。这才发现重启设备只是临时掩蔽问题,根本没有根除根源,这种治标不治本的操作,纯粹是浪费时间和耐心,之前半小时的折腾全部作废。
折腾好久才搞明白,端口占用根本不是软件闪退、系统缓存的问题,是后台有残留的adb进程一直在偷偷占用5555默认端口,只要这个进程不关掉,无论重启软件还是电脑,问题都会反复出现。很多时候我们卡壳,都是在无关的表层操作上浪费时间,完全没找对问题的核心根源。
打开电脑的命令提示符窗口,输入对应指令查找5555端口的占用情况,屏幕上立刻跳出了占用端口的进程PID,数字清清楚楚摆在界面上。之前一直绕远路,就是因为压根没想着从后台进程根源去排查,只顾着折腾表层的软件设置和设备重启,完全忽略了系统后台残留的常驻进程。
复制查到的PID数值,输入强制结束进程的命令,回车的瞬间,后台霸占端口的残留程序就被彻底终止了。没有多余复杂的配置操作,重新插拔手机设备,开启USB调试模式,刷新连接之后,adb瞬间连接成功,所有调试功能恢复正常,卡顿停滞的项目进度也终于能继续往下推进。
其实这个问题一点都不复杂,大部分新手踩坑都是惯性用重启的笨办法,只能临时修复表象,没法彻底根除问题。反复重启只会消耗自己的时间和耐心,还会打乱开发的节奏,越着急越容易陷入无效操作的死循环里。
解决完问题关掉cmd窗口,指尖划过键盘保存好当前的代码,看着屏幕上平稳滚动的调试日志,只觉得刚才慌乱折腾的样子特别多余。