重启 ADB 服务无法解决
C:\Users\Administrator>adb kill-server
C:\Users\Administrator>adb connect 127.0.0.1:5555
重置USB调试模式
安卓设备上的设置
- 启用“开发者选项”: 进入 设置 > 关于手机,连续点击 “版本号” 7次,直到提示“您已处于开发者模式”。
- 启用“USB调试”: 进入 设置 > 系统 > 开发者选项,找到并打开 “USB调试” 开关。
- (无线调试)启用“无线调试”: 在“开发者选项”中,打开“无线调试”开关。
- 检查授权弹窗: 当设备首次通过USB连接到一台新电脑时,手机上会弹出一个“允许USB调试吗?”的窗口。必须勾选“一律允许”并点击“确定”。如果错过了,拔插数据线重试。
问题依旧
最后找到的原因和解决方法
为什么端口被占用会导致问题?
可以把 ADB 的工作流程想象成一个调度中心:
- ADB 服务端(Daemon):就是这个调度中心,它必须在
5037
这个固定的地址(端口)上办公。 - ADB 客户端(你的命令):当你下达
adb devices
命令时,你就是去5037
这个地址找调度中心,让它帮你列出所有已连接的设备。 - 安卓设备上的 adbd:每个连接的设备就像一个等待调度的司机,它们也会主动联系
5037
地址的调度中心报到。
如果 5037 端口已经被其他程序占用了,那么:
- ADB 客户端尝试启动服务端。
- 服务端想要在
5037
端口上开始工作,但操作系统会告诉它:“抱歉,这个地址已经被占用了,你无法在这里启动。” - ADB 服务端启动失败。
- 你的 ADB 客户端因为联系不上调度中心,所以自然无法获取任何设备信息。最终,它可能会报错(如
* daemon failed to start *
)或者直接返回一个空列表,让你误以为没有设备连接。
如何解决 5037 端口被占用的问题
你需要找出是哪个“不速之客”占用了 5037 端口,然后将它关闭。
步骤一:找出占用端口的程序
打开你的终端或命令提示符,根据你的操作系统执行以下命令:
在 Windows 上:
Bash
netstat -ano | findstr "5037"
-a
显示所有连接和监听端口。-n
以数字形式显示地址和端口号。-o
显示拥有的进程 ID (PID)。findstr "5037"
筛选出包含 “5037” 的行。
你会看到类似这样的输出: TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 12345
最后的数字 12345
就是占用该端口的程序的 PID。
接着,用 PID 查找程序名称:
Bash
tasklist | findstr "12345"
这会显示出 PID 为 12345 的是哪个程序(例如 some_app.exe
)。
在 macOS 或 Linux 上:
Bash
lsof -i :5037
这个命令会直接列出占用该端口的程序信息,非常方便。
你会看到类似这样的输出: COMMAND PID USER ... NODE NAME
some_app 12345 username ... *:5037 (LISTEN)
第一列的 some_app
就是程序名,第二列 12345
是它的 PID。
步骤二:终止占用端口的程序
现在你已经知道了是哪个程序在占用端口,你有两个选择:
-
正常关闭程序:如果发现是某个手机助手(如 豌豆荚、XX手机助手)、某个IDE(如旧版的 Eclipse)或者其他可以正常关闭的软件,直接将它关闭即可。这是最推荐的方法。
-
强制结束进程:如果无法正常关闭,或者你不确定它是什么,可以强制结束它。
在 Windows 上:
Bashtaskkill /F /PID 12345
(将
12345
替换成你找到的 PID)在 macOS 或 Linux 上:
Bashkill -9 12345
(将
12345
替换成你找到的 PID)
步骤三:验证 ADB 是否恢复正常
在终止了占用端口的程序后,再次运行 adb
命令。
Bash
# 最好先彻底杀死可能存在的旧进程
adb kill-server
# 然后再次执行命令,它会自动启动新的、正常的 adb server
adb devices
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容