1. 为什么 adb 值得你花时间装一遍
如果你正在做 Android 开发、自动化测试、逆向分析,或者只是想让手机和电脑之间传文件、截屏、装应用更顺手一点,那 adb 这个名字你一定绕不开。adb 全称 Android Debug Bridge,是 Android SDK 里自带的一个命令行工具,本质上是一个客户端-服务端架构的调试桥梁。你在电脑上敲的每一条 adb 命令,都会先发给本地的 adb server,再由它转发给手机或模拟器上的 adbd 守护进程,最终落到系统里去执行。听起来有点绕,但用起来其实就一句话:它是你电脑和 Android 设备之间最直接、最底层的那根数据线。
很多人第一次接触 adb 是因为某个具体需求,比如“adb 截图保存电脑”“adb 无线调试”“adb logcat 抓取日志”,或者“adb unauthorized 怎么解决”。这些热搜词背后其实都指向同一个问题:adb 没装好,或者环境没配对。我见过太多人卡在“adb 不是内部或外部命令”这一步就放弃了,其实只要把路径配好,后面的事情都顺理成章。这篇内容就是把我自己反复装过几十次 adb 的经验整理出来,从下载、解压、配环境变量,到驱动安装、无线调试、常见报错排查,全部走一遍。不管你是刚入门的新手,还是换了新电脑需要重新配环境的老手,都可以直接照着做。
需要提前说明的是,adb 本身不依赖 Android Studio,你完全可以只下载一个 platform-tools 压缩包就搞定。网上很多教程一上来就让你装几个 G 的 IDE,对于只想用 adb 的人来说完全是负担。我下面会以最轻量的方式来讲,同时也会提到如果你已经装了 Android Studio,怎么直接复用它的 adb,避免重复下载。
2. 安装前的准备工作与版本选择
2.1 确认你的操作系统和硬件条件
adb 支持 Windows、macOS、Linux 三大平台,但不同系统下的安装方式差别不小。Windows 用户需要额外注意驱动问题,macOS 和 Linux 通常插上就能识别。先确认你的系统版本,Windows 建议 Win10 及以上,macOS 建议 10.15 以上,Ubuntu 这类发行版基本都没问题。另外要确认你有管理员权限,因为配环境变量和装驱动都需要提权。如果是公司电脑,先确认安全策略允不允许你安装外部驱动,否则后面会卡在驱动签名那一步。
硬件方面,你需要一根能传数据的 USB 线。注意,很多充电线只能供电不能传数据,这是新手最容易踩的坑。我建议直接用手机原装线,或者买一根明确标注支持数据传输的线。如果你打算用无线调试,那手机和电脑必须在同一个局域网内,这一点后面会详细讲。
2.2 下载 platform-tools 还是用 Android Studio 自带
这是第一个分岔路口。如果你只是偶尔用 adb,或者不想装几个 G 的 IDE,那就直接下载 platform-tools 独立包。Google 官方提供了各平台的压缩包,解压后就是一个文件夹,里面包含 adb、fastboot 等工具。截至我写这篇内容时,platform-tools 的版本已经更新到 35.x,adb 版本号也跟着走。网上有人找“adb工具1.0.32.zip电脑版免费版”,那个版本其实已经非常老了,建议直接用官方最新版,兼容性和安全性都更好。
如果你已经装了 Android Studio,那 adb 通常位于C:\Users\你的用户名\AppData\Local\Android\Sdk\platform-tools这个路径下。你可以直接把这个路径加到环境变量里,不用再单独下载。但要注意,Android Studio 自带的 adb 版本可能和你后面用到的某些工具要求的版本不一致,比如报错“adb server version (31) doesn't match this client (41)”,这就是版本冲突的典型表现。遇到这种情况,统一用同一个 adb 可执行文件就能解决。
2.3 解压路径的选择与注意事项
下载完 platform-tools 压缩包后,解压路径很关键。我强烈建议放在一个纯英文、无空格、无特殊字符的路径下,比如D:\Android\platform-tools或C:\adb。为什么?因为 adb 在某些场景下对中文路径和空格路径支持不好,尤其是你后面要跑脚本或者用其他工具调用 adb 时,路径里有空格会导致命令解析出错。我见过有人解压到“桌面\新建文件夹\adb工具”,结果怎么都跑不起来,换成C:\adb就立刻好了。
解压完成后,打开文件夹确认里面有adb.exe(Windows)或adb(macOS/Linux),以及fastboot、AdbWinApi.dll等文件。如果只有 adb 没有 dll,那说明你下载的包不完整,重新下一遍。确认无误后,记住这个路径,下一步配环境变量要用。
3. 环境变量配置的完整流程
3.1 Windows 下配置 PATH 的详细步骤
环境变量的作用很简单:让你在任意目录下敲adb都能被系统找到。如果不配,你就只能先 cd 到 platform-tools 目录再执行,非常麻烦。Windows 下配置步骤如下:
- 右键“此电脑”或“我的电脑”,选择“属性”。
- 点击“高级系统设置”,再点“环境变量”。
- 在“系统变量”区域找到
Path,选中后点“编辑”。 - 点“新建”,把你刚才的 platform-tools 路径粘贴进去,比如
D:\Android\platform-tools。 - 一路点“确定”保存。
注意,如果你用的是 Win10 之前的系统,Path 变量是一长串字符串,需要在末尾加英文分号再粘贴路径。Win10 及以上是列表形式,直接新建一行就行。配完后一定要重新打开一个命令行窗口,因为环境变量只在新的进程里生效。很多人配完发现没反应,就是因为还在用旧的 cmd 窗口。
验证方法是打开 cmd 或 PowerShell,输入adb version。如果显示版本号,说明配置成功。如果提示“adb 不是内部或外部命令”,那就回到环境变量检查路径有没有写错,或者路径下有没有 adb.exe。还有一种情况是“Windows10 管理员找不到 adb”,这通常是因为你用管理员身份打开的命令行加载的是另一套环境变量,检查一下系统变量而不是用户变量。
3.2 macOS 与 Linux 下的配置方式
macOS 和 Linux 下配置更简单,但要注意 shell 类型。如果你用的是 zsh(macOS 默认),编辑~/.zshrc;如果是 bash,编辑~/.bashrc或~/.bash_profile。在文件末尾加一行:
export PATH=$PATH:/Users/你的用户名/Library/Android/sdk/platform-tools或者你解压到其他路径,就换成对应路径。保存后执行source ~/.zshrc让配置立即生效。Linux 下同理,把路径换成你解压的位置即可。验证同样是adb version。
macOS 上还有一个坑:从网上下载的 adb 可能被 Gatekeeper 拦截,提示“无法打开,因为无法验证开发者”。解决办法是在“系统偏好设置-安全性与隐私”里点“仍要打开”,或者用xattr -d com.apple.quarantine命令去掉隔离属性。这个坑我第一次在 M1 Mac 上装的时候踩过,折腾了半小时才反应过来。
3.3 验证安装是否成功的三种方法
配完环境变量后,用以下三种方式验证:
- 方法一:命令行输入
adb version,能看到版本号即成功。 - 方法二:输入
adb devices,如果 adb server 正常启动,会显示List of devices attached,即使没有设备连接也算成功。 - 方法三:输入
where adb(Windows)或which adb(macOS/Linux),能输出 adb 的完整路径,说明系统找到了它。
如果adb devices报错* daemon not running; starting now at tcp:5037 could not read ok from adb server,这通常是端口被占用或者 adb server 启动失败。先执行adb kill-server再adb start-server,如果还不行,检查 5037 端口有没有被其他程序占用,用netstat -ano | findstr 5037找到占用进程并结束它。
4. 驱动安装与设备连接
4.1 Windows 下 adb 驱动怎么装
Windows 用户插上手机后,设备管理器里可能会出现一个带黄色感叹号的“Android Device”或“ADB Interface”。这说明驱动没装好。解决办法有几种:
第一种,用手机厂商自带的驱动。比如小米、华为、OPPO 都有自己的 USB 驱动,去官网下载安装即可。第二种,用 Google 官方的 USB Driver,这个在 Android SDK Manager 里可以下载,或者单独搜“Google USB Driver”下载。第三种,用通用的 ADB 驱动工具,比如“adb驱动”这个热搜词指向的就是这类工具,但要注意下载来源,尽量用官方或可信渠道。
安装驱动时,右键那个带感叹号的设备,选择“更新驱动程序”,然后手动指向你下载的驱动文件夹。如果提示“Windows 无法验证此驱动程序软件的发布者”,选择“始终安装此驱动程序软件”。装完后设备管理器里应该能看到“Android Composite ADB Interface”或类似名称,没有感叹号。
4.2 手机端需要开启的开发者选项
光装驱动还不够,手机端必须开启 USB 调试。步骤是:设置-关于手机-连续点击“版本号”七次,直到提示“你已处于开发者模式”。然后返回设置,找到“开发者选项”,打开“USB 调试”。部分手机还需要打开“USB 安装”和“USB 调试(安全设置)”。
这里有个细节:有些手机(比如老款创维电视或机顶盒)的开发者选项藏得比较深,热搜词里“老款创维如何打开adb”和“机顶盒强制adb”就是这类问题。电视和机顶盒通常需要在关于页面连续点按特定按键,或者通过工厂菜单开启。不同品牌方法不同,建议直接搜“品牌+型号+开启adb”找对应教程。
4.3 连接后 adb devices 显示 unauthorized 怎么办
这是最常见的问题之一。当你第一次插上手机并执行adb devices时,手机会弹出一个“是否允许 USB 调试”的对话框,必须点“允许”。如果你没看到弹窗,或者点了拒绝,就会显示unauthorized。解决办法:
- 拔掉数据线重新插,注意看手机屏幕有没有弹窗。
- 如果没弹窗,去开发者选项里点“撤销 USB 调试授权”,然后重新插线。
- 还不行就重启手机和电脑,再试。
- 检查数据线是不是只能充电的线。
如果以上都试过还是 unauthorized,可以尝试删除电脑上的 adb 密钥重新生成。Windows 下密钥在C:\Users\你的用户名\.android目录下,删除adbkey和adbkey.pub两个文件,然后adb kill-server再adb devices,手机会重新弹窗。
5. adb 常用命令与实战场景
5.1 设备管理与应用安装卸载
装好 adb 后,最常用的命令其实就那么几个。先看设备管理:
adb devices # 列出已连接设备 adb devices -l # 列出设备并显示详细信息 adb connect 192.168.1.100:5555 # 无线连接设备 adb disconnect # 断开无线连接应用安装卸载:
adb install app.apk # 安装应用 adb install -r app.apk # 覆盖安装,保留数据 adb uninstall com.example.app # 卸载应用 adb shell pm list packages # 列出所有包名 adb shell pm list packages -3 # 只列出第三方应用这里有个经验:adb install如果报INSTALL_FAILED_ALREADY_EXISTS,加-r参数覆盖安装即可。如果报INSTALL_FAILED_VERSION_DOWNGRADE,说明你要装的版本比已装的低,加-d参数允许降级。这些参数组合在实际调试中非常有用。
5.2 文件传输与截图录屏
adb 截图保存到电脑是热搜里的高频需求,命令如下:
adb exec-out screencap -p > screen.png这条命令直接把截图输出到电脑当前目录,比先adb shell screencap再adb pull少一步。注意 Windows 的 cmd 里>重定向可能会把二进制数据搞坏,建议用 PowerShell 或者 Git Bash 执行。如果一定要在 cmd 里用,可以先截到手机再 pull:
adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png录屏类似:
adb shell screenrecord /sdcard/demo.mp4 adb pull /sdcard/demo.mp4文件传输通用命令是adb push和adb pull:
adb push local.txt /sdcard/ # 电脑传到手机 adb pull /sdcard/remote.txt . # 手机传到电脑5.3 日志抓取与问题排查
adb logcat是排查应用崩溃、ANR 的核心工具。基本用法:
adb logcat # 实时输出所有日志 adb logcat -c # 清空日志缓冲区 adb logcat -v time > log.txt # 带时间戳输出到文件 adb logcat *:E # 只看 Error 级别 adb logcat -s TAG # 只看指定 TAG实际排查问题时,我通常先adb logcat -c清空,然后复现问题,再adb logcat -d > log.txt把当前缓冲区导出。这样日志干净,定位快。如果日志太多,可以用grep或findstr过滤关键字,比如adb logcat | grep -i "crash"。
5.4 无线调试的配置与稳定性优化
无线调试分两步:先用 USB 连一次,执行adb tcpip 5555,然后拔掉线,执行adb connect 手机IP:5555。手机 IP 可以在 WiFi 设置里查看。连接成功后adb devices会显示192.168.x.x:5555 device。
无线调试的稳定性取决于网络质量。如果经常断,可以尝试以下优化:确保手机和电脑在同一网段;关闭手机省电模式;路由器开启 5GHz 频段;避免大量设备同时占用网络。另外,部分手机重启后无线调试会失效,需要重新用 USB 执行adb tcpip 5555。如果嫌麻烦,可以在开发者选项里找“无线调试”功能,Android 11 及以上支持配对码连接,不需要 USB 线。
6. 常见报错与排查速查表
6.1 版本不匹配与 server 启动失败
报错adb server version (31) doesn't match this client (41); killing...是典型的版本冲突。原因是你电脑上有多个 adb.exe,比如 Android Studio 自带一个,你单独下载的 platform-tools 里又有一个,两者版本不同。解决办法是统一用一个,把另一个从环境变量里去掉,或者直接用同一个 adb 去 kill-server 再 start-server。
报错* daemon not running; starting now at tcp:5037 could not read ok from adb server通常是 5037 端口被占用。执行adb kill-server,然后检查端口占用:
netstat -ano | findstr 5037找到 PID 后在任务管理器里结束对应进程,再adb start-server。
6.2 设备识别问题与驱动冲突
adb devices显示为空,但手机明明插着。排查顺序:
- 换数据线,确认是数据线不是充电线。
- 换 USB 口,优先用主板后置 USB 口。
- 检查手机开发者选项和 USB 调试是否开启。
- 检查设备管理器有没有黄色感叹号。
- 重启 adb server:
adb kill-server && adb start-server。 - 重启手机和电脑。
如果设备管理器里显示的是“MTP”或“便携设备”而不是 ADB 接口,说明手机没进入调试模式,重新插线并确认手机弹窗。
6.3 权限问题与 shell 命令执行失败
执行adb shell相关命令时报Permission denied,通常是因为没有 root 权限。普通 adb shell 只能访问有限目录,比如/sdcard。如果要访问/data等系统目录,需要 root。另外,adb shell locksettings set-disabled true这类命令需要系统权限,普通设备执行会失败。
adb shell uiautomator dump用不了,常见原因是 UI 层级太深或者有动画导致 dump 失败。可以加--compressed参数,或者先停止动画再 dump。如果还是不行,检查设备是否处于锁屏状态,解锁后再试。
6.4 常见问题速查表
| 报错/现象 | 可能原因 | 解决办法 |
|---|---|---|
| adb 不是内部或外部命令 | 环境变量没配好 | 检查 Path,重开命令行 |
| adb devices 为空 | 驱动/线/调试开关 | 换线换口,检查开发者选项 |
| unauthorized | 未授权弹窗 | 撤销授权重插,删 adbkey |
| server version mismatch | 多个 adb 版本 | 统一 adb 路径 |
| could not read ok from adb server | 5037 端口占用 | 结束占用进程,重启 server |
| INSTALL_FAILED_ALREADY_EXISTS | 应用已存在 | 加 -r 覆盖安装 |
| INSTALL_FAILED_VERSION_DOWNGRADE | 版本降级 | 加 -d 允许降级 |
| uiautomator dump 失败 | 动画/锁屏 | 停动画,解锁后重试 |
7. 我踩过的坑与实操心得
第一个坑是路径里有中文。我早期把 adb 解压到“D:\工具\adb”,结果adb devices一直报错,换成D:\adb就好了。后来查资料才知道,adb 底层调用的一些库对非 ASCII 路径支持不好。所以无论 Windows 还是 macOS,路径尽量纯英文。
第二个坑是数据线。我有一次用了一根看起来很粗的线,结果只能充电不能传数据,折腾了半天以为是驱动问题。后来换原装线立刻识别。所以遇到设备不识别,第一件事就是换线,这是成本最低的排查手段。
第三个坑是无线调试的 IP 变化。手机每次重连 WiFi 可能会分配新 IP,导致adb connect失败。解决办法是在路由器里给手机绑定静态 IP,或者每次连接前先确认手机当前 IP。另外,部分路由器开启了 AP 隔离,会导致手机和电脑无法互访,需要在路由器设置里关闭。
第四个坑是 logcat 缓冲区溢出。长时间抓日志时,旧日志会被新日志覆盖。如果问题复现时间较长,建议用adb logcat -v time > log.txt实时写入文件,而不是等复现完再-d导出。另外可以增大缓冲区:adb logcat -G 16M。
第五个坑是多个 adb 版本共存。我电脑上同时装了 Android Studio 和独立 platform-tools,结果经常报版本不匹配。后来我把 Android Studio 的 adb 路径从环境变量里去掉,统一用独立包的 adb,问题就消失了。如果你也用 Android Studio,可以在设置里指定 adb 路径,让它用你指定的那个。
最后分享一个小技巧:如果你经常需要截图,可以写一个批处理或 shell 脚本,把adb exec-out screencap -p > %date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.png做成快捷方式,一键截图并自动按时间命名。这个脚本我用了好几年,比任何截图软件都快,而且不依赖手机端操作。