最近好多朋友问我,ADB在Windows上到底怎么装、怎么用。确实,无论是安卓开发调试,还是普通用户想卸载预装软件、抓日志、看屏幕刷新率、搞定模拟器,ADB都是绕不开的那把钥匙。ADB全称Android Debug Bridge,说直白点就是电脑和安卓设备之间的一座桥,能让你用命令行直接指挥手机。今天这篇就以Windows为主线,把下载、环境配置、常用命令、坑点排查一条龙讲清楚。不管你是开发、测试,还是纯粹想折腾手机的用户,照着走基本不会卡壳。
1. ADB 的整体思路:先搞懂它到底是什么
1.1 三个组件的工作模式
ADB 并非一个孤零零的程序,它背后是“客户端-服务端-守护进程”三件套在配合。电脑端你敲下adb命令时,实际启动的是一个客户端;客户端会去找电脑后台的 adb 服务端(一个常驻进程);服务端再通过 USB 或 TCP 与手机里的 adbd 守护进程通信。手机端的 adbd 接收指令后执行具体操作,再把结果原路返回。
这个架构有点像你打电话给前台(服务端),让前台帮你转接到具体部门(adbd),最后再把答复回传给你。好处是:多个命令可以复用一个连接,不用反复握手;设备掉线时也容易定位问题——你是死在客户端、服务端,还是设备端。
1.2 为什么在 Windows 上要先配环境变量
很多人下载完 ADB 工具包,解压后直接双击adb.exe,发现闪了一下就没了,或者在 cmd 里敲adb提示“不是内部或外部命令”。原因很简单:Windows 执行命令时,会在当前目录和 PATH 环境变量记录的一系列目录里寻找可执行文件。你没有把工具目录告诉系统,系统自然找不到它。
配置环境变量,本质上就是给 Windows 留一张“常用工具住址表”。这样你打开任意一个 cmd 或 PowerShell 窗口,敲adb都能直接调用,不用每次拼一长串路径。这一步看起来很基础,但正是很多新手卡住的地方,后面我会用完整步骤演示。
2. 下载和环境配置:三步入坑,少走弯路
2.1 工具包选择:官方 platform-tools 还是第三方集成包
ADB 不是需要安装的软件,而是绿色免安装的工具集。官方渠道是 Android 开发者网站上的 platform-tools 压缩包,里面包含 adb、fastboot、dll 运行库等文件。这个包很小,通常几 MB 到十几 MB,而且更新频率高,社区修复设备兼容性时都是优先跟进官方版本。
国内网络访问官方地址有时较慢,可以使用国内镜像站下载。我个人的建议是:尽量选择标注了“platform-tools”字样的包,而不是某些“一键刷机工具”附带的老旧 adb。老版本 adb 对新款手机的支持不好,容易遇到unauthorized、offline等莫名其妙的问题。检查版本可以用命令adb version,看到较新的版本号(如 1.0.41)就说明没问题。
注意:不要直接把解压后的 adb.exe 单独拷出来用,platform-tools 目录里有几个 DLL 文件是它的依赖,丢了会报“无法启动此程序,因为计算机中丢失 AdbWinApi.dll”。
2.2 配置环境变量的完整步骤
我这里以 Windows 10 / 11 为例,流程通用:
- 把下载的 platform-tools 压缩包解压到一个固定目录,比如
C:\platform-tools。我不建议放桌面或下载文件夹,这些位置容易被清理工具误删。 - 右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。
- 在“系统变量”列表中找到
Path,双击打开编辑窗口。 - 点击“新建”,填入你的目录路径,例如
C:\platform-tools,然后一路点“确定”保存。 - 重新打开一个 cmd 窗口(已打开的老窗口不会刷新环境变量),输入
adb version,能打印出版本信息就说明配置成功。
有几点容易踩坑:一是有些人误把变量名写成PATH,Windows 环境变量名不区分大小写,但建议直接沿用系统自带的Path;二是“用户变量”和“系统变量”都配置了也行,但权限不足时用户变量更容易生效;三是配置完一定要开新窗口测试,不要用旧窗口怀疑人生。
2.3 手机端的准备:USB 调试和驱动
电脑端装好了,手机端也得配合。打开手机的“设置” → “关于手机”,连续点击“版本号” 7 次开启开发者模式,然后回到设置主页进入“开发者选项”,打开“USB 调试”。不同品牌的入口位置有差异,比如小米在“更多设置”里,vivo 在“更多设置”里,但原理一致。
连接电脑后,手机通常会弹出“是否允许 USB 调试”的授权框,勾选“始终允许”再确认。如果没弹窗,可能是驱动问题。Windows 10/11 一般会自动安装驱动,但部分老机型或国产机型需要去官网下载手机助手或单独的 USB 驱动。插线时也建议选“传输文件(MTP)”模式,有些手机在“仅充电”模式下 adb 会识别异常。
3. 常用命令实操:最有价值的一批操作
3.1 设备连接与状态检查:一切操作的前提
配置完成后,第一步永远是敲adb devices。这条命令会列出当前连接的设备以及状态。正常情况应该是:
adb devices List of devices attached XXXXXXXX device状态有几种:device表示正常连接;unauthorized表示手机未授权;offline表示连接不稳定或驱动有问题;no permissions常见于 Linux,Windows 下较少见。看到device状态,你才能继续后面的操作。
如果连接的是模拟器,adb devices可能不会自动出现,需要用adb connect 127.0.0.1:端口号手动连接。常见的夜神模拟器端口是 62001,逍遥是 21503,MuMu 是 7555。新版本的 MuMu 模拟器甚至支持adb connect 127.0.0.1:16384这类端口,具体看官方文档,后面我会单独讲模拟器连接。
3.2 安装、卸载与文件传输:最日常的三板斧
安装 APK 是使用频率最高的操作之一,命令是:
adb install 应用包名.apk如果你想覆盖安装保留数据,加-r参数:adb install -r app.apk。测试包经常和旧版本签名不一致,可以加-d允许降级安装。卸载则简单得多:
adb uninstall 包名这里要注意的是,参数里填的是“包名”,不是应用名称。怎么看包名?可以用adb shell pm list packages列出所有包,也可以借助 App 检查工具,或者在联网搜索一下“某某应用包名”。
文件传输两条命令分别是推送和拉取:
adb push 本地文件路径 /sdcard/目标路径 adb pull /sdcard/源文件路径 本地目录比如把电脑上的test.txt推到手机根目录:adb push test.txt /sdcard/。把手机里的截图拉到电脑:adb pull /sdcard/DCIM/screenshot.png D:\下载。这个功能在没有数据线传输工具时非常实用,尤其是手机屏幕碎了或系统异常时,还能抢救些文件出来。
3.3 日志抓取:logcat 的正确打开方式
做测试或开发的人一定绕不开日志。ADB 抓取日志的命令是adb logcat。不加参数时,它会实时滚动输出所有日志,在 Windows cmd 里看到海量信息很容易懵。更实用的做法是配合过滤和输出:
adb logcat -v time > D:\logcat.log-v time表示每条日志前加上时间戳,方便排查时序问题。Windows cmd 的>重定向可能会在输出 UTF-8 编码日志时出现乱码,可以顺手执行chcp 65001切换 cmd 编码。如果只想看某个进程的日志,可以用:
adb logcat --pid=进程ID进程 ID 可以通过adb shell pidof 包名获取。还有一个高频需求是清除旧日志后重新抓取:先adb logcat -c清空缓冲区,再开始抓新的,这样日志文件不会混入大量历史垃圾信息。adb logcat -c这个操作在分析和复现 Bug 时特别好用,我能确定地说,这是测试同学最应该记住的命令之一。
3.4 截图、录屏与系统信息查询
截图在 Windows 下有个小坑。有人用adb shell screencap -p /sdcard/screen.png截图成功,再 pull 出来,倒也不麻烦。但更快的方式是直接把截图流输出到电脑:
adb exec-out screencap -p > screen.png用exec-out而不是shell,是为了避免 Windows 把回车符\r\n转换破坏 PNG 数据的坑。这个细节我一开始也不知道,后来发现截出来的图片打不开,折腾半天才明白是重定向的问题。
录屏的命令是:
adb shell screenrecord /sdcard/demo.mp4录完再 pull 出来。默认 180 秒上限,可以用--time-limit 30控制时长,用--size 720x1280控制分辨率。屏幕刷新率相关的查看可以用:
adb shell dumpsys display | findstr refreshRate这条命令不是所有设备都输出同样的字段,但绝大数情况下能看到refreshRate相关参数。有些设备还能配合adb shell settings put system peak_refresh_rate 120这类命令去设置刷新率,但厂商定制系统千差万别,不保证通用。高频使用场景是测试手机是否真的跑到 120Hz,以及排查省电模式导致刷新率下降的问题。
3.5 几个特别实用的小命令
- 查看电池状态:
adb shell dumpsys battery。想模拟拔掉 USB 充电的状态(比如测试应用的省电逻辑),可以用adb shell dumpsys battery set usb 0,测完记得用adb shell dumpsys battery reset恢复。 - 模拟按键输入(也就是所谓的“adb 键盘”玩法):
adb shell input keyevent 26是电源键,adb shell input text "hello"可以向输入框输入文字。自动化测试里常配合adb shell input swipe x1 y1 x2 y2模拟滑动手势。 - 禁止某个应用联网:
adb shell appops set 包名 INTERNET ignore。恢复联网把ignore改成allow。这个命令在国产手机广告拦截、限制后台应用偷偷联网时特别好使,不用 root 也能做到。 - 冻结应用:
adb shell pm disable-user --user 0 包名。冻结后应用从桌面消失,也不会在后台运行。恢复用adb shell pm enable 包名。注意别去冻结系统核心组件,否则可能出现异常。
4. 场景化进阶:模拟器、无线调试与批处理
4.1 连接模拟器:夜神、MuMu 等安卓模拟器
很多人在电脑上玩手游或做自动化测试都离不开模拟器。模拟器虽然本身是安卓环境,但通常没有通过 USB 连接到电脑,所以adb devices不会自动出现。解决办法是使用 adb 的网络连接功能。
以夜神模拟器为例,先确认模拟器已经开启“ADB 调试”相关选项,然后执行:
adb connect 127.0.0.1:62001连接成功后,adb devices会出现127.0.0.1:62001 device。MuMu 模拟器新版端口可能是 16384,逍遥模拟器是 21503。如果你不确定端口,可以在模拟器安装目录下找adb.exe,或查看模拟器设置里的“ADB 调试端口”提示。还有一种通用办法:打开模拟器后,用netstat -ano | findstr 模拟器进程名去查监听端口,但不如直接查文档方便。
4.2 无线调试:摆脱数据线的束缚
手机和电脑连接同一个 WiFi 时,ADB 可以通过无线方式连接。手机先用 USB 连一次电脑(设置里开启“无线调试”),执行:
adb tcpip 5555 adb connect 手机IP:5555手机 IP 在“设置” → “WLAN” → 当前网络的详情里能查到,或者用adb shell ip addr show wlan0查看。连接成功后可拔掉数据线。Android 11 及以上系统还支持免 USB 的无线调试配对,在“无线调试”里开启配对码,然后执行adb pair 手机IP:配对端口 配对码即可,配对完再adb connect 手机IP:5555。
无线调试在真机调试、外场测试时特别方便,但要注意 IP 变更后需要重新连接。如果连接时提示target device状态变成offline,可以先adb disconnect,再重新 connect。
4.3 把常用命令固化成批处理脚本
Windows 下反复敲一长串命令确实累人,建议把常用操作写成.bat脚本放桌面。比如一个“一键抓取日志”的脚本:
@echo off chcp 65001 >nul set timestamp=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2% adb logcat -v time > D:\logcat_%timestamp%.log双击后,日志就会按时间戳命名保存在 D 盘。再比如“批量安装 APK”的脚本,遍历当前文件夹下所有 APK 文件:
@echo off for %%i in (*.apk) do ( echo 正在安装 %%i ... adb install -r %%i ) pause把这类脚本配合前面讲到的命令使用,日常工作效率会有明显提升。写脚本时要注意 cmd 的编码,如果 bat 文件里出现中文乱码,用记事本另存时选择 ANSI 编码通常能解决。
5. 常见问题与排查技巧实录
5.1 adb unauthorized 是啥情况?
这个提示几乎每个新手都会遇到。手机连接电脑后,手机上必须弹窗确认“允许 USB 调试”。如果之前点了“取消”或没有勾选“始终允许”,状态就会停在unauthorized。解决办法是:拔掉数据线,在手机开发者选项里点击“撤销 USB 调试授权”,然后重新连接,弹窗时勾选“始终允许”。
如果反复授权还是unauthorized,检查一下是否用了劣质数据线;还有换一个电脑 USB 口试试,前置面板的 USB 口偶尔供电不稳。最后再考虑用adb kill-server后重新adb start-server刷新连接。
5.2 adb 不是内部或外部命令,怎么破
这基本就是环境变量没配好。按前面第 2.2 节的步骤,重新确认Path里是否真的加了platform-tools目录,然后关闭所有 cmd 窗口重新打开。还有一种可能:你配置了用户变量但当前 cmd 是用管理员权限开的,而管理员权限下可能加载的是系统变量,两个地方都配置一遍最稳妥。
5.3 设备 offline 或频繁断开
设备状态显示offline,最常见的原因是驱动不匹配或数据线质量差。先把开发者选项里的“USB 调试”关掉再打开,然后adb kill-server再连。如果还不行,换个原生数据线或换电脑背面的 USB 接口。有的电脑装了第三方手机管家类软件,会强行接管 USB 连接,导致 adb 状态异常,需要退出这些软件再试。
5.4 杀毒软件拦截 adb
platform-tools 里的 adb.exe 偶尔会被杀毒软件误报。这不是它真的是病毒,而是 adb 具备远程执行命令的能力,安全软件会高度敏感。处理办法是把整个platform-tools目录加入杀毒软件的白名单,或者解压前先暂时关闭实时防护。这一点很多教程没提,但实际遇到的频率不低,尤其是 360、火绒这类的默认策略有时会误伤。
5.5 常见问题速查
| 现象 | 直接原因 | 解决办法 |
|---|---|---|
| adb 不是内部或外部命令 | 环境变量未配置 | 重新配置 PATH,重开 cmd |
| unauthorized | 手机未授权 | 重插线,勾选始终允许 |
| offline | 驱动/线材/端口问题 | 重启 adb,换线换口 |
| 找不到设备 | 未开启 USB 调试 | 打开开发者选项中的 USB 调试 |
| 连不上模拟器 | 端口不对 | 查看官方文档,connect 对应端口 |
| 截图文件损坏 | Windows 重定向问题 | 使用 exec-out 方式 |
| 应用安装失败 | 签名冲突或版本偏低 | 加 -r 覆盖,加 -d 降级 |
6. 最后聊几句我的使用体会
ADB 这套东西,说难不难,说简单也不简单。我见过太多人卡在环境变量和 USB 调试授权这两个最初级的环节上,实际上只要把adb devices跑到device状态,后面的事情基本都是顺水推舟。
我个人使用中的一个小习惯是:无论执行什么操作,先看一眼adb devices确认设备在线,再敲后续命令。很多莫名其妙的报错,其实根源就是设备已经断开了。另外,多设备同时连接时,可以用adb -s 序列号指定设备操作,比如adb -s 127.0.0.1:62001 shell ls,避免命令发错设备造成误操作。
还有一点经验之谈:尽量保持 platform-tools 是官方最新版。旧版 adb 在新系统上偶尔会解析不了某些输出,或者对 Android 14、15 的设备支持不到位。反正更新很简单,下载新压缩包覆盖目录即可,环境变量不用重配。
如果你只是偶尔用一次 ADB,那看完这篇照着操作就够了;如果你是想长期做脚本化、自动化的事,建议再多研究一下adb shell里的 Linux 命令组合,那才是真正让 ADB 发挥威力的地方。