经常有朋友问我:ADB工具到底怎么装?驱动怎么打?为什么我连上手机之后电脑完全没反应?为什么命令窗口里敲adb devices显示一串unauthorized?说实话,这些东西对于搞嵌入式、做安卓开发、或者玩机折腾的人来说,属于绕不过去的坎,但网上的教程要么太零碎,要么版本太老,照着操作经常是南辕北辙。今天这篇文章,我把从下载工具到打完驱动的完整流程、常见芯片的驱动选择、还有那些官方文档不会写的排查经验一次性说清楚,争取让零基础的人跟着走一遍就能搞定。
这篇教程不是只讲“点下一步”那种傻瓜式操作,我会把每一步背后的原理和判断标准也交代清楚。适合谁看?安卓开发者、嵌入式软硬件工程师、搞单片机烧录的、玩机刷机的、还有在Linux下做驱动调试的,都能在不同章节找到自己需要的部分。文章很长,建议先收藏再慢慢照着操作。
1. 先搞清楚ADB和驱动分别是什么,别装了一堆东西还是不明白
很多人在这一步就卡住了,根本原因是没理解ADB和驱动是两回事。ADB全称Android Debug Bridge,翻译过来是安卓调试桥,由PC端工具、手机端守护进程和中间通信协议三部分组成。它的作用是让电脑通过USB或网络给手机发命令,比如装APK、拷文件、看日志、截图。而驱动是操作系统层的东西,作用是把硬件的USB接口映射成系统能识别的设备节点,没有对应驱动,电脑连设备都枚举不出来,后面的ADB命令自然毫无意义。
1.1 别把“ADB工具”和“ADB驱动”当成一回事
这个问题至少有三分之一的人搞混过。ADB工具是Google官方发布的一组可执行文件,Windows版主要包括adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll和fastboot.exe,它们在同一个压缩包里,解压即用,不需要安装。而ADB驱动指的是让Windows能够识别安卓设备的一套USB驱动,类似打印机驱动这种角色,需要安装到系统里,手机在设备管理器里显示成Android Composite ADB Interface,驱动才算生效。
有一个容易忽略的细节:驱动并不是所有手机都装得上,也不是装了驱动就一定能用ADB。比如Google Nexus、Pixel系列原生安卓设备用的是通用ADB驱动,只要开启USB调试就能被识别;但华为、小米、vivo、OPPO这些国产品牌往往有自己的私有USB协议,官方驱动和通用驱动混着用容易出问题。所以打驱动之前,先分清自己是什么设备,再决定用哪一套方案。
1.2 到底是装USB驱动还是串口驱动还是调试器驱动
这个坑更隐蔽。项目里只要沾了硬件调试,往往不止一台设备,除了安卓手机,还有几样东西会让人抓狂:USB转TTL串口模块(CH340、CP2102、FT232、PL2303这些芯片)、STM32调试器(ST-Link)、ARM调试器(J-Link),它们都要单独装驱动。很多人熟悉的adb devices流程走通了,但换了一根CH340的串口线,电脑设备管理器里一直出叹号,那就是另一个问题。
网上那些热词里为什么会有“stlink驱动安装”“jlink驱动安装”“ch340串口驱动”“cp2102驱动”“pl2303hxa驱动”这些搜索词,说明大量搞嵌入式的朋友都在跟驱动搏斗。实际上这几类设备走的是完全不同的驱动路径:CH340和CP2102是USB转串口芯片,装上后系统多出一个COM口;ST-Link和J-Link是调试器,装上后系统多出一个调试接口设备;安卓手机则是多出一个ADB接口设备。这篇文章后面会把这几个分支全部覆盖到,你根据自己手头的硬件对号入座即可。
2. ADB工具的下载、安装与环境变量配置
这部分是基础中的基础,我的建议是不要偷懒,把环境变量配置一次到位,否则后面每次用都要cd到工具目录,效率太低。不少老教程还让你在CMD里手动切路径,不是说不行,但既然能做到全局可用,为什么还要折腾自己。
2.1 拿到ADB工具包:官方平台工具与替代方案
ADB工具在Google官方的Android Developers网站可以下载,名字叫Platform Tools,压缩包里包含adb、fastboot、etc1tool这几个核心文件,Windows、macOS、Linux各有对应版本。下载后解压到一个固定目录,比如D:\platform-tools,然后把手机用USB线连上电脑,先确认adb devices能不能看到设备编号,这一步通了,后面就顺了。
如果电脑网络环境访问官方地址不太顺畅,很多国内安卓开发者官网也提供platform-tools的镜像下载,或者直接用Android Studio自带的SDK Platform-Tools组件,装了Android Studio的人不用另外下载,SDK路径下的platform-tools目录就是现成的。注意别下那些来路不明的“一键安装ADB工具包”,捆绑软件和失效版本太多了,有些老版本adb在Android 11以上的设备上连接会有兼容性问题,白白浪费时间。
2.2 Windows环境变量配置:让cmd和PowerShell任意位置调用adb
这一步只需要操作一次,以后就能在任意目录直接敲adb。右键“此电脑”→“属性”→“高级系统设置”→“环境变量”,在“系统变量”里找到Path,双击编辑,然后点击“新建”,填入你解压platform-tools的完整路径,比如D:\platform-tools,确定保存。
配置完成后,打开新的CMD或PowerShell窗口,输入adb version,如果看到类似“Android Debug Bridge version 1.0.41”的输出,就说明环境变量生效了。这里有个常见坑:修改环境变量后,之前打开的终端窗口不会生效,必须重新开一个新窗口才认到新路径。还有,控制台提示“adb不是内部或外部命令”,八成是路径填错了,或者没点“确定”就急着测试。
2.3 macOS和Linux的配置方式
macOS用户如果是用Homebrew,一条命令brew install android-platform-tools就能装好;Linux用户更简单,Ubuntu/Debian系直接sudo apt install android-tools-adb,如果用较新版本的系统,包名也可能是android-sdk-platform-tools。装完执行adb version验证。
如果选择手动下载压缩包,Linux下把platform-tools解压后,需要把路径加入PATH,编辑~/.bashrc或~/.zshrc,加一行export PATH=$PATH:/home/你的用户名/platform-tools,然后source ~/.bashrc刷新。macOS同理,只是路径写法不同。这些操作不难,但很多初学者容易在权限问题上卡住,注意目录可读可执行即可。
3. 手机USB驱动的安装:从设备管理器看到叹号到ADB Interface
驱动安装是整个流程里最容易劝退人的环节。我见过太多人,命令行工具装好了,手机USB调试也开了,但设备管理器里始终是“Android”带着黄色感叹号,对着网上教程打驱动打到怀疑人生。这一章我按实战顺序来拆解。
3.1 手机开启开发者选项和USB调试:这是前提中的前提
有驱动装不上,有时候是因为手机端压根没开启USB调试。Android 4.2以上系统,开发者选项默认是隐藏的,需要在“设置”→“关于手机”里连续点击“版本号”7次,系统会提示“你已进入开发者模式”,然后在设置里找到“开发者选项”,打开“USB调试”开关。
这一步对于不同品牌有个细节差异:小米、vivo、OPPO这些品牌,在开启USB调试后,还需要在“开发者选项”里额外开启“USB安装”或“USB调试(安全设置)”之类选项,否则有些命令无法执行。还用不用专门开启“OEM解锁”,取决于你是否要刷机或fastboot操作,只是用ADB调试的话不需要。另外,连接电脑后手机上会弹一个授权对话框,上面写着“允许USB调试吗”,要勾选“一律允许使用这台计算机进行调试”,然后点击确定,不然设备状态会一直卡在unauthorized。
3.2 通过设备管理器确认设备状态:不同符号代表不同问题
连上手机后,打开设备管理器,从“查看”菜单勾选“显示隐藏的设备”,然后在“端口(COM和LPT)”“通用串行总线设备”“其他设备”几个分类下找线索。道理很简单:
- “Android Composite ADB Interface”或“ADB Interface”出现,说明ADB驱动已经就位,可以开始用。
- 如果图标上带黄色感叹号,说明系统认出了设备但驱动不对,或者驱动缺失,这时候需要手动指定驱动路径。
- 如果出现在“其他设备”里,名字叫“Android”或“ADB”甚至是一堆乱码,说明完全没驱动,需要手动安装。
不同手机出现的设备名不一样,有些显示为“MTP USB设备”或“便携设备”,那种情况下通常只识别了文件传输协议,ADB协议还没有被系统识别,这种情况需要在手机上把USB连接模式切换一下,有的手机有“仅充电”“传输文件”“传输照片”几种模式,对ADB有影响的往往是“仅充电”模式,因为数据通道没有完全打开。
3.3 手动更新驱动:指定到platform-tools的usb_driver目录
Windows系统自带的通用ADB驱动其实覆盖了不少机型,但国产品牌经常会漏掉。手动方式:在设备管理器里右键那个异常设备,选择“更新驱动程序”→“浏览我的电脑以查找驱动程序”→“让我从计算机上的可用驱动程序列表中选取”→“从磁盘安装”,浏览到platform-tools目录里的usb_driver文件夹,选择android_winusb.inf文件,确定后系统会列出“Android ADB Interface”或“Android Composite ADB Interface”,选中并安装。
这里有个隐藏技巧:如果列表里死活找不到ADB接口,多半是android_winusb.inf里没有匹配你这个设备的硬件ID。此时需要在“详细信息”→“硬件ID”里查看VID和PID,比如USB\VID_18D1&PID_4EE1,VID是厂商标识,18D1就是Google,4EE1是Nexus设备的ADB接口PID。如果VID是其他值,比如22D9是OPPO、091E是联发科、2717是小米,你可能需要去厂商官网下载专门驱动,或者通过修改inf文件手动添加硬件ID。
3.4 厂商官方驱动和使用体验对比
这里需要明确一下:厂商驱动不一定比通用驱动好,有时反而更“顽固”。
| 方案 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| Windows通用ADB驱动 | 原生安卓、Pixel、Nexus | 干净,无捆绑软件 | 部分国产品牌不可用 |
| 厂商官方驱动(小米/华为/vivo等) | 对应品牌手机 | 兼容自家USB协议,MTP和ADB一起解决 | 安装包臃肿,常带增值服务 |
| 通过设备管理器手动指定inf | 各种设备 | 灵活,可临时解决 | 有些设备改了inf才能用,麻烦 |
| 360手机助手/豌豆荚自动装 | 小白玩家 | 自动匹配驱动 | 会装全家桶应用,慎用 |
我的个人建议是优先尝试手动指定inf,因为最干净,卸载也方便。如果官方驱动必须装但你又不想被捆绑软件骚扰,可以先装完驱动再从“程序和功能”里卸载那些垃圾应用。
3.5 fastboot模式的驱动注意点
刷机场景下,手机会在fastboot模式(俗称“引导加载模式”)下重启,这时候设备管理器里会出现“Android Bootloader Interface”或“Fastboot Interface”之类的设备,ADB驱动在这个模式下并不生效,需要的是fastboot驱动。大多数情况下,装好ADB驱动后重启进fastboot模式,Windows会自动把同一套USB驱动用上,但有些电脑会显示“gadget serial”或“Android”并带叹号,这时候需要手动指定到同一个android_winusb.inf,选择“Android Bootloader Interface”安装。
如果后边要做线刷,这个细节相当重要:线刷工具在刷机过程中会反复重启设备,如果驱动没配对,工具在法斯特布特阶段就会卡在“waiting for device”死活不动。
4. 最常用的ADB命令实战:传文件、安装应用、截图、抓日志
驱动都搞定之后,ADB命令才是腾飞的地方。这里我直接列出一批高频命令,全部经过实测。新手可以照抄,熟练的朋友也可以当作速查手册。
4.1 连接状态确认:devices、kill-server、USB与无线连接
最基本的命令是adb devices,它会列出当前连接的设备和状态。状态有三个值:device表示正常调试模式,unauthorized表示手机端还没同意授权,offline表示设备在线但连接不稳定,通常是数据线问题或驱动问题。
如果设备一直卡在unauthorized,在手机上撤销USB调试授权然后重新插线。如果设备频繁offline,可以试试adb kill-server后重新插拔USB,或者换个USB口,优先主板后面板的原生USB口,拓展坞和前置面板的供电往往不稳。
无线连接方式也值得了解一下:先用USB连好,执行adb tcpip 5555,然后拔掉USB,执行adb connect 192.168.x.x:5555,手机和电脑在同一局域网下就能继续用。这种方式用于调试电视盒子特别方便,不用每次钻到电视后面捅线。
4.2 日常高频命令:安装、卸载、截图、录屏、传文件
我直接写命令和说明:
# 安装应用,-r表示覆盖安装,-d表示允许降级 adb install -r 某某.apk # 卸载应用,包名可通过pm list packages查看 adb uninstall com.example.app # 截图并保存到电脑 adb exec-out screencap -p > screen.png # 录屏,按Ctrl+C结束,保存为手机本地文件 adb shell screenrecord /sdcard/demo.mp4 # 把电脑文件推送到手机 adb push 本地文件 /sdcard/ # 把手机文件拉到电脑 adb pull /sdcard/文件 本地目录要特别提醒几个细节:screencap命令保存到PC时,Windows下的exec-out重定向偶尔会丢字节,导致PNG打不开,这时候需要换用adb shell screencap -p /sdcard/s.png && adb pull /sdcard/s.png这种先存后拉的方式。screenrecord默认录制时间最长三分钟,超时自动停止,需要录更长时间的话,用--time-limit参数指定秒数。
4.3 进程和应用管理:查看包名、停止运行、禁止自启和联网
有些开发或玩机场景需要对系统应用做冻结,比较实用的是这几条:
# 查看所有应用的包名 adb shell pm list packages # 停止指定应用进程(类似于强制停止) adb shell am force-stop com.example.app # 禁用应用(常见于精简系统,谨慎操作) adb shell pm disable-user --user 0 com.example.app # 查看当前正在运行的应用 adb shell dumpsys activity activities | findstr mResumedActivity关于“adb禁止应用联网”,Android系统没有直接的ADB命令去限制某个应用联网,需要配合AppOps或者第三方的防火墙类工具,比如用adb shell appops set 包名 INTERNET ignore来模拟拒绝联网权限,但这种方法在部分新系统上不生效,需要root支持的场景又另说了。还有那些搜“vivo adb精简列表”的朋友,注意不同系统版本预装应用列表差异很大,精简前务必把相关命令和包名确认两遍,误删系统应用很可能导致桌面崩溃或蓝牙失效。
4.4 logcat日志抓取:调试崩溃和报错的关键手段
日志抓取是ADB最常见也最实用的功能之一。最简用法是:
# 清空日志缓冲区,避免旧日志干扰 adb logcat -c # 抓取全部日志并输出到文件 adb logcat > app.log # 按优先级过滤,错误和警告 adb logcat *:E # 按进程过滤,比如只抓崩溃日志 adb logcat --pid=$(adb shell pidof -s 包名)实际开发中我经常是三个终端一起用,一个跑adb logcat -c清空、一个跑adb logcat -v threadtime > 日志.log抓全量、一个在问题复现后去过滤关键字。日志文件很容易几分钟就到几百MB,所以生产环境调试要有意识地用-s加标签过滤,或按优先级过滤,不然日志里大部分是系统噪声,找关键错误像大海捞针。
另外在Android 10以上的设备上,logcat默认被权限保护,需要adb root才能看到部分系统进程日志,不过普通应用层的崩溃日志是不受影响的,可以直接抓。
4.5 屏幕刷新率、分辨率与显示相关调试
搜“adb命令设置屏幕刷新率”的朋友应该是在折腾高刷手机。通过wms命令可以查看和修改显示参数:
# 查看当前显示信息,包括刷新率 adb shell dumpsys display | findstr -i "refreshRate" # 强制设置刷新率(需应用支持,谨慎修改) adb shell settings put system peak_refresh_rate 120.0 adb shell settings put system min_refresh_rate 120.0这个操作有风险,不是每台设备都生效,部分厂商的调度策略会覆盖这些设置,改完不生效是正常的,别慌。改回自动调节的话把数值还原成原来的,或者干脆恢复出厂设置。还有一种情况是显示器本身只支持60Hz,你非要把系统刷新率锁到120,画面会撕裂或闪烁变形,这种就属于瞎调了,出厂设置是有原因的。
5. 设备差异化场景:从手机到电视盒子再到模拟器
ADB不只是开发者工具,更是一把通用钥匙,解锁之后就看你拿它干什么了。除了手机,这一章覆盖电视、模拟器和特殊系统场景的连接方式。
5.1 品牌手机开启ADB的注意点:vivo、红米等特殊设置
vivo手机在“开发者选项”里开启USB调试后,还要把“USB调试”开关下方的“仅充电模式下允许ADB调试”打开,不然插上数据线选“仅充电”,ADB根本连不上。红米和小米则要注意“USB安装”开关,如果它是关的,adb install就会提示“Installation failed because user restricted”,表面看是安装失败,实际是权限开关没打开。
有些品牌手机在连续插拔几次后,手机会自动关闭“USB调试”授权弹窗权限,需要重新在开发者选项里把“USB调试授权”清除,重新插线再授权一次。这也是为什么有人明明前面成功了,过几天再连又跳出unauthorized。
5.2 电视盒子开ADB:老款创维、索尼电视如何永久打开ADB
智能电视和电视盒子的ADB开关一般是隐藏的,不像手机那么容易找。大多品牌的逻辑是:在“设置”→“关于”里连续点击“版本号”或“产品型号”多次,进入开发者模式后,在“设置”里找到“开发者选项”,打开“ADB调试”或“USB调试”。
老款创维电视比较特殊,默认隐藏了“ADB开关”,我见过的几种方案里,有的是在“关于本机”里连续按遥控器OK键进入工厂菜单找到的,有的是需要通过按特定按键组合打开开发者选项。这种机型差异很大,不同型号的固件版本也不一样,没法一锤定音。
电视永久开启ADB,通常指关闭电视自带的安全验证或休眠重启机制。很多电视在长时间待机后会自动杀掉ADB守护进程,导致远程adb connect连不上,这时候需要进入电视的“开发者选项”里把“USB调试”“网络ADB调试”都打开,并关闭“ADB授权超时”这类选项,有的还要把“以太网调试”打开,才能在局域网里长时间稳连。
5.3 模拟器连接ADB:夜神、雷电的独立连接端口
用模拟器调试应用的人也挺多。夜神模拟器默认端口是62001,雷电模拟器是5555,蓝叠是5555,但模拟器官方自带的adb版本经常和Android SDK里的版本不一致,直接用全局adb连接可能会显示“offline”。这个情况我遇到太多回了。
解决办法是使用模拟器目录下的nox_adb.exe(夜神)或ldconsole.exe(雷电管理命令行),或者手动指定端口去连:adb connect 127.0.0.1:62001,如果连接后显示offline,先执行adb kill-server再试一次。如果依然offline,观察是否多个模拟器同时启动,端口冲突了,把其它模拟器先关掉再连。
模拟器的好处是不用打USB驱动,坏处是获取不到真实的硬件行为,传感器、GPS、GPS模拟这些跟真机还是有差异。调试阶段用模拟器,到了发版前一定要在真机回归一遍。
5.4 其他ADB特殊场景:自动打卡、动态密码计算器
网上一搜“adb 企业微信 自动打卡”“adb动态密码计算器”这类技术,本质上都是ADB的自动化能力延伸。原理很直接:通过adb shell input tap x y模拟点击坐标、adb shell input swipe模拟滑动、adb shell input text输入文字。这种方式不需要后台服务,只要ADB连着就能远程操控手机屏幕。
但有几点得说透:第一,坐标点击受分辨率影响,换了设备要重新校准;第二,这种方式绕过了应用自身的风控机制,企业微信、银行类App对这种模拟点击的排查越来越严格,账号被限制的风险自己掂量;第三,解锁屏幕、横竖屏切换等前提条件要提前处理好,否则脚本跑一半就断了。这种自动化玩法可以拿来学技术逻辑,不建议用于灰色用途。
6. 各种驱动的安装与验证:CH340、CP2102、ST-Link、J-Link……
驱动话题还没讲完,除了安卓设备的ADB驱动,日常开发中最容易碰到的是USB转TTL串口模块和调试器驱动。很多做单片机、嵌入式开发的朋友搜的就是这些关键词。
6.1 USB转串口芯片驱动:CH340、CP2102、FT232、PL2303的区别与安装
这些芯片的作用都是通过USB接口模拟出一个串口,让电脑和设备之间能通信,但驱动各不相同,而且不通用。我把常见的几张列一个对照表:
| 芯片型号 | 厂家 | 常见设备 | 驱动特点 |
|---|---|---|---|
| CH340/CH341 | 南京沁恒 | 各种USB转TTL模块、Arduino兼容板 | 驱动免费,官网下载,量大 |
| CP2102/CP2104 | Silicon Labs | 开发板调试口、部分GPS模块 | 老设备要留意新旧版本驱动不兼容 |
| FT232R/FT231X | FTDI | 工业级USB转串口、高端开发板 | 假货极多,驱动版权争议大 |
| PL2303HXA | Prolific | 老式数据线、部分GPS模块 | 官方停止更新,有新版驱动识别限制 |
安装方式都是从各芯片厂官网下载对应驱动,双击安装后会多出一个COM口,比如“USB-SERIAL CH340 (COM3)”。然后可以在设备管理器里看到端口号,用串口工具连接时选对端口即可。注意:CH340的驱动在不同版本的Windows下行为不一致,Win10和Win11在部分系统设置下需要禁用驱动签名强制才能安装旧版驱动,这种情况见第7章。
PL2303HXA是老熟人,也是坑王。Prolific官方在2012年以后就不再为旧版HXA芯片提供Windows驱动更新,新驱动会直接拒绝识别旧芯片,提示“PL2303HXA PHASED OUT SINCE 2012 PLEASE CONTACT YOUR SUPPLIER”。这种情况只能找老版本驱动,或者换一片新芯片的模块,用新芯片的模块更靠谱,几块钱的事情没必要花大量时间去折腾老驱动。
6.2 ST-Link与J-Link调试器驱动:STM32和ARM开发的标配
ST-Link和J-Link是嵌入式开发中最常见的调试器,分别对应ST官方的STM32产品线和ARM通用调试。ST-Link官方的驱动工具叫STM32 ST-LINK Utility(旧)或STM32CubeProgrammer(新),安装后设备管理器里会出现“ST-Link dongle”或“STLink dongle”之类设备。J-Link是Segger家的,驱动在官网下载J-Link Software Pack,安装后除了驱动还会附带J-Link Commander、JLinkGDBServer等工具链组件。
装完驱动后判断是否成功,可以在命令行里敲STM32_Programmer_CLI --connect port=SWD(ST-Link)或者打开JLink.exe输入connect命令测试连接。调试器常见的连接问题是硬件没接好:SWD四根线(SWDIO、SWCLK、GND、3V3)接错一根就掉线;目标板供电不足也会导致识别异常。
6.3 其他驱动:Intel USB 3.0驱动、HAL库外设驱动的取舍
搜“intel usb3.20驱动”的朋友,大概率是在老电脑上装系统时遇到USB口全部失灵。Intel USB 3.0可扩展主机控制器驱动缺失时,连键鼠插上去都没反应,需要预先在系统安装U盘里注入驱动,或者先用PS/2口键鼠进系统装好驱动再换USB。这个场景和ADB驱动没有直接关系,但如果你在给老电脑装完系统后想用ADB给手机调试,驱动顺序经常会导致操作中途卡住。
至于“hal库驱动dht11”“hal库驱动oled代码”这类搜索词,走的是完全不同的技术路线,属于嵌入式底层驱动开发,跟本文的USB/ADB驱动不是一个维度的东西。那类驱动是芯片厂商的硬件抽象层代码库,典型是STM32CubeMX生成的外设初始化代码,跟这里讲的PC端识别设备的驱动没有关联,搜索出来的朋友注意别混淆了概念。
6.4 Linux环境驱动开发与字符设备驱动框架
最后补一句,在Linux上开发驱动是另一个世界,没有“双击安装”这回事,驱动通常以内核模块形式加载。搜“Linux驱动开发”“字符设备驱动框架”的朋友,核心思路是编写模块代码、编译进内核、通过insmod动态加载,用mknod创建设备节点,再用应用层程序去open/read/write操作。经典的hello world模块,用modprobe或insmod把.ko文件装进内核后,在/proc/devices里能看到主设备号。这类方向需要掌握内核编程、并发控制、中断处理等底层知识,和ADB这种用户态工具定位完全不同,不是一篇教程能覆盖完的。这篇文章重点还是解决Windows下各种调试工具的驱动安装,Linux驱动开发只能先留个脚印。
7. 常见问题与排查技巧实录
这个章节是这篇文章里我自己最看重的部分,那些折腾到凌晨两点的经历都浓缩在这了。如果你照着前面的流程操作还有问题,直接来查这一节。
7.1 打驱动时提示数字签名问题怎么办
Windows 10/11强制驱动签名校验,一些远古驱动或者没签名的驱动直接装不上,此时需要重启电脑,在品牌Logo出现后连续按F8进入“高级启动选项”,选择“禁用驱动程序强制签名”。Win10以上可能进不去这个菜单,更稳妥的方式是:按住Shift键同时点击“重启”,进入蓝色恢复界面,依次选择“疑难解答”→“高级选项”→“启动设置”→“重启”,然后在启动设置菜单里按数字键7或F7选择“禁用驱动程序强制签名”。
装完驱动后记得下次正常重启,让系统恢复强制签名模式,否则之后用硬件调试,系统安全性会打折扣。另外,zadig这个工具可以给没有数字签名的USB设备强行替换WinUSB驱动,有些特殊设备用这个工具装驱动比手动找inf方便得多,但是要注意它也会把已经正常的驱动改掉,别乱点。
7.2 adb devices状态是unauthorized或者空列表
unauthorized的处理方法是:手机端进入“开发者选项”→“撤销USB调试授权”,拔掉数据线重新插,手机会再次弹出授权窗口,点击允许并勾选“始终允许”。如果已经撤销过一次还不行,试试adb kill-server再执行adb devices,命令窗口重新启动服务。
如果列表完全空白,说明系统压根没识别到设备,这时候回到设备管理器看有没有黄叹号设备。如果设备管理器正常但adb还是空,八成是用了劣质数据线,只能充电不能传数据,换根线再说。这个问题看着低级,实际占比非常高,USB数据线的数据针脚断了一根,充电和识别会奇怪地半失效。
7.3 设备已经连接但操作提示device not found或device offline
报“device not found”通常是没有设备满足条件,常见于-s参数指定的序列号写错了,先执行adb devices复制准确的序列号。设备状态如果是offline,原因多半是:adb版本太老不兼容新设备、电脑上运行的adb服务进程异常、同时连接了多个模拟器和真机导致端口冲突。
处理方法依次试:adb kill-server重启服务;物理拔插USB重新授权;关闭所有模拟器再连接真机;最后一步可以考虑重启电脑。偶尔还有Android设备系统本身卡死导致假死,重启手机往往能解决。这些排查手段全部试一遍后,问题十有八九能解决,要是还不行,换台电脑交叉测试一下,看是手机问题还是电脑问题,立刻见分晓。
7.4 ST-Link/J-Link/串口设备识别不到怎么排查
这类设备识别不到,按照以下顺序排查:第一,换USB口,优先主板原生口;第二,看设备管理器里有没有未知设备,有的话说明驱动没装上;第三,尝试卸载已有驱动,拔掉设备,重启电脑,重装驱动;第四,恢复默认的驱动签名设置后重装。
ST-Link有个独有坑:最新版的STM32CubeProgrammer只支持新版本的ST-Link固件,老版本调试器需要先升级固件,否则连接时提示“ST-Link firmware upgrade required”。J-Link则是盗版克隆设备太多,新驱动有时候不认盗版,会提示“J-Link clone detected”,只能用对应老版本驱动。建议购买时直接买正版或知名设计的大厂克隆版本,省去一堆麻烦。
7.5 驱动卸载和清理:怎么干净地重装
系统装了一堆乱七八糟的驱动,设备异常后要重装,但Windows会把旧驱动缓存下来,导致装新版时还是加载旧版。正确姿势是:设备管理器里右键设备→“卸载设备”,在弹出的对话框勾选“删除此设备的驱动程序软件”,然后拔掉设备重启电脑,再重装新驱动。
如果是某个串口芯片的驱动,装过多个版本,需要到“添加删除程序”里卸载干净,再用驱动清理工具扫一遍遗留项。我对Windows驱动清理的建议是:不到万不得已别用第三方清理工具,手动卸载+重启基本能解决95%以上的问题,第三方工具反而可能把系统里正常的USB驱动一并清掉,造成键盘鼠标失灵。
7.6 最后分享几个用得上的细节技巧
adb -s 设备序列号 shell可以指定某台设备执行指令,多设备调试时必用。adb shell settings put global development_settings_enabled 1可以跳过部分界面操作,直接打开开发者模式,但新系统下此方法不一定有效。- 如果手机系统设置里找不到“版本号”,检查一下是否已经处于开发者模式,菜单路径可能不同。
- 串口工具选择上,Xshell可以用来连串口,但我更推荐MobaXterm,功能全、多会话管理顺手,还内置了串口连接功能。
- 排查ADB问题的时候,保持一台“已知良好”的设备可以显著缩小排查范围,至少能确认是电脑端驱动问题还是手机端问题。
写在最后
其实ADB安装和驱动安装本身不复杂,大部分时间都耗在环境差异和版本兼容性上。这篇文章把我在各种设备上踩过的坑尽量完整地梳理了一遍,从工具下载、环境变量到手机驱动、串口芯片驱动、调试器驱动,再到高频ADB命令和问题排查,基本覆盖了日常开发中最常遇到的场景。
照着我写的步骤走一遍,大多数问题都能在半小时内搞定。遇到个别非常规设备或者新系统带来的兼容性问题,也别硬扛,换个思路组合排查——换线、换口、换电脑、换驱动版本,总能找到症结点。驱动调试这件事,耐心比技术更重要。