问题描述
最近在使用 ADB 连接手机进行调试时,遇到了一个棘手的问题。每次运行 adb devices
命令,都会得到以下错误:
vbscript
adb server version (22631) doesn't match this client (41); killing...
could not read ok from ADB Server
* failed to start daemon
adb.exe: failed to check server version: cannot connect to daemon
排查过程
第一轮排查: 检查 ADB 版本冲突
-
使用
where.exe /r c:\ adb.exe
命令搜索电脑上的所有adb.exe
-
发现有两个 ADB:
makefileC:\Users\user\AppData\Local\Android\Sdk\platform-tools\adb.exe C:\MySpace\DevTools\AssistiveTools\scrcpy-win64-v2.3.1\scrcpy-win64-v2.3.1\adb.exe
-
检查版本号,两个 ADB 都是 Android Debug Bridge version 1.0.41,版本号 34.0.5-10900879
-
尝试直接用完整路径运行
adb devices
,两个 ADB 仍然报相同的错误
第二轮排查: 检查进程和端口
-
怀疑有另一个 ADB 服务在后台运行
-
使用任务管理器、资源监视器等工具搜索进程,未发现可疑的
adb
进程 -
使用
netstat -aon | findstr 5037
命令查看占用 5037 端口(ADB 默认端口)的进程TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 11076
-
使用
tasklist /fi "PID eq 11076"
查看 PID 为 11076 的进程arduino映像名称 PID 会话名 会话# 内存使用 ========================= ======== ================ =========== ============ 360MobileSrv.exe 11076 Console 1 43,304 K
-
发现 360 手机助手自带了一个 ADB,并在后台启动了服务,端口号为 5037
问题解决
-
打开任务管理器,找到
360MobileSrv.exe
,结束进程 -
或者使用命令行:
rtaskkill /F /IM 360MobileSrv.exe
-
结束进程后,重新启动 ADB 服务:
vbscriptadb kill-server adb start-server
-
再次运行
adb devices
,问题解决,手机可以正常连接了
总结
- 遇到问题时,除了查看常规的进程外,还需要检查端口占用
- 根本解决方案是卸载流氓软件,换用更加安全可靠的软件
- 作为开发者,要培养 debug 能力,遇到问题不慌张,沉着冷静地分析,总能找到问题所在
希望我的这次排错经历对大家有所启发。欢迎在评论区分享你的 debug 经验和技巧!