(已解决)adb devices 不显示设备,但 Windows 的 ADB Interface 正常:一次 WinUSB 与旧版 ADB 兼容性排查实战

一、故障环境

项目 信息
Windows Windows 11,Build 22621.3880
原 ADB Android Debug Bridge 1.0.41 / Platform-Tools 34.0.5-10900879
目标设备 Android 车机,USB VID_05C6 / PID_9015
ADB 子接口 MI_00,兼容 ID 为 USB\Class_FF&SubClass_42&Prot_01
验证版本 Platform-Tools 37.0.1-15733141

二、故障现象:ADB 一直等设备,设备管理器却并不"像坏了"

客户通过 USB 连接车机后,最直接的表现是:

复制代码
adb logcat -c
- waiting for device -

adb root
adb: unable to connect for root: no devices/emulators found

adb devices
List of devices attached

设备管理器里同时看到 iAP Interface 黄色感叹号,属性显示 Code 28:驱动程序未被安装。这个现象很容易把排查方向带到"先装高通驱动 / 先修 iAP"上。

图 1:iAP Interface 存在 Code 28,但后续证据证明它不是本次 ADB 失败的原因

三、先确认 ADB 工具本身:Server 能启动,但设备列表为空

先查实际调用的是哪一套 ADB,避免电脑中 scrcpy、手机助手、Android SDK 等多个 ADB 混用:

复制代码
where adb
adb version
adb kill-server
adb start-server
adb devices -l

故障机只命中 C:\platform-tools\adb.exe,版本为 34.0.5。ADB Server 可以正常监听 5037,但 devices 列表仍然为空。

图 2:ADB 34.0.5 能启动 Server,但 adb devices -l 没有任何设备

这里可以排除什么?

5037 端口并不是当前主要问题,因为 ADB Server 已经成功启动;问题发生在"ADB Server 如何枚举 / 打开 USB 设备"这一层。

四、设备管理器按连接查看:车机其实已经暴露了 ADB Interface

把设备管理器切换为查看 → 按连接显示设备,同一个 USB Composite Device 下能看到:

复制代码
USB Composite Device
├─ ADB Interface
├─ iAP Interface
└─ UsbNcm Host Device #2

图 3:同一复合 USB 设备同时枚举出 ADB、iAP 和 NCM 三个接口

进一步通过 PowerShell 查询 VID_05C6,可以确认接口关系:

复制代码
Get-PnpDevice -PresentOnly |
Where-Object { $_.InstanceId -like '*VID_05C6*' } |
Format-Table Status,Class,FriendlyName,InstanceId -AutoSize

图 4:MI_00=ADB Interface,MI_01=iAP,MI_02=NCM;

其中 MI_00 的兼容 ID 为:

复制代码
USB\Class_FF&SubClass_42&Prot_01

这一步非常关键:车机已经把标准 ADB USB Interface 暴露给 Windows。

五、ADB Interface 驱动正常:Microsoft WinUSB 已经启动

ADB Interface 属性显示设备运转正常,驱动为 Microsoft WinUSB:

  • 驱动程序提供商:Microsoft
  • 驱动程序版本:10.0.22621.2506
  • 设备类:USBDevice
  • 驱动:winusb.inf

图 5:ADB Interface 已正常绑定 Microsoft WinUSB

一个容易误判的点:

"设备管理器显示运行正常"只代表 WinUSB 功能驱动已经成功加载,并不等价于某个用户态程序一定能按自己需要的 Device Interface 找到这个设备。

六、关键证据:历史同型号实例注册过 ADB DeviceInterfaceGUID,当前实例没有

继续检查 Windows 的 Device Interface 注册状态。当前连接的 MI_00 实例没有出现在传统 ADB 接口 GUID 下;但同一台电脑的历史记录里,存在同型号 VID_05C6&PID_9015&MI_00 实例,并明确记录:

复制代码
DeviceInterfaceGUID
{F72FE0D4-CBCB-407D-8814-9ED673D0DD6B}

图 6:历史同型号实例存在 ADB DeviceInterfaceGUID;

Microsoft 的 WinUSB 文档说明,加载 winusb.sys 与"应用如何枚举这个设备"是两回事;用户态程序通常通过 Device Interface GUID 枚举相应设备。传统 Windows ADB 代码也存在按接口类枚举活动设备的路径。

这里可以确认"当前实例与历史实例的 Device Interface 注册状态不同"。但没有手工给当前实例补 GUID 再做 A/B,因此不能严谨地写成"缺 GUID 就是唯一直接原因"。更准确的判断是:旧版 ADB 与当前 WinUSB / Device Interface 枚举状态存在兼容性问题,GUID 差异是高度相关的解释证据。

七、最有价值的一步:直接做新旧 ADB A/B 测试

这时没有继续折腾 Qualcomm 驱动,也没有改注册表,而是把新版 Platform-Tools 解压到独立目录,保留旧环境:

复制代码
C:\platform-tools\adb.exe kill-server

C:\platform-tools-37-test\platform-tools\adb.exe version
C:\platform-tools-37-test\platform-tools\adb.exe start-server
C:\platform-tools-37-test\platform-tools\adb.exe devices -l

结果没有修改任何其他条件,新版 37.0.1 立即识别到车机,并显示为 device

图 7:Platform-Tools 37.0.1 立即识别设备;

继续执行实际业务命令:

复制代码
adb root
adb devices

返回 adbd is already running as root,并持续显示 device,说明不只是"看到了设备",实际 ADB 通信也已经恢复。

图 8:最终功能验证成功;

八、最终原因与解决方案

最终确认:

原使用的 Platform-Tools / ADB 34.0.5 与当前 Windows 下车机的 WinUSB / Device Interface 枚举状态存在兼容性问题。

车机 ADB 功能、USB 物理连接、MI_00 标准 ADB 接口以及 Microsoft WinUSB 驱动本身均正常;仅替换 ADB 版本后即恢复,A/B 证据闭环。

处理方式:

  1. 备份原 C:\platform-tools
  2. 从 Google 官方渠道下载新的 Platform-Tools,整套替换,不只替换单个 adb.exe
  3. 重新打开 CMD,执行 where adbadb version,确认路径和版本正确。
  4. 执行 adb devices -l,确认目标设备为 device
  5. 再验证实际业务命令,如 adb logcatadb root
  6. 如果业务软件自带自己的 adb.exe,还要检查它是否仍在调用旧版本。

版本提醒: Google 官方 release notes 当前将 37.0.1 标注为 2026 年 7 月 Canary,并说明 Windows 端引入 libadbusb 替代 libusb。本案例用它完成了故障验证;如果要在企业环境长期固定使用,建议保留旧包以便回退,并对实际业务命令做回归验证。

九、总结

这个问题的关键不是"看到黄色感叹号就修黄色感叹号",而是把 USB 复合设备拆开看:哪个接口是 ADB、它有没有正确加载驱动、ADB 到底用什么方式枚举它。

最终最有价值的证据不是某一条注册表或某一个驱动名称,而是:

复制代码
同一台电脑
同一台车机
同一根 USB 连接
同一套 Windows / WinUSB 驱动
ADB 34.0.5:devices 为空
ADB 37.0.1:立即显示 device,并且 adb root 成功

这组 A/B 结果直接把故障定位到了旧版 ADB 与当前 Windows USB 枚举方式的兼容性层。

参考资料

相关推荐
奈斯先生Vector1 小时前
OpenScience 安装失败怎么办?Windows 环境、API 配置与本地服务排错指南
人工智能·windows·架构·开源·aigc·midjourney
AxureMost2 小时前
C盘清理工具 LightC
windows
csdn_aspnet2 小时前
C# 高效便利的处理数据
开发语言·windows·c#
淡海水2 小时前
03-02-线性-List-T-动态数组布局-扩容与操作成本
数据结构·windows·c#·list·编译·clr·机器码
夜雪一千14 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
深念Y16 小时前
从 Windows 迁移到 Linux 开发环境的记录
linux·windows·链接·bun·ram·imdisk
clorinda21 小时前
MySQL 入门笔记:DQL 基础查询与常用函数
adb
Cerman1 天前
QEMU启动OVMF shell超时分析
c语言·windows·经验分享
Code额1 天前
基于 SQLAlchemy 2.x,面向 MySQL 数据库的从入门到精通实战教程(2)
数据库·sql·mysql·adb·ai