news 2026/10/10 3:39:04

ADB 调试桥完全指南:从环境搭建到自动化脚本实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADB 调试桥完全指南:从环境搭建到自动化脚本实战

1. 为什么 ADB 值得花时间学:从调试工具到效率杠杆

很多人第一次接触 ADB,是在手机连不上电脑、想传个文件却找不到数据线驱动的时候。当时我也一样,以为它就是个“安卓版的命令行传文件工具”,直到后来做自动化测试、批量装应用、抓日志排查线上问题,才发现这东西远不止传文件那么简单。ADB 全称 Android Debug Bridge,翻译过来叫“安卓调试桥”,本质是一个客户端-服务端架构的命令行工具,让你能在电脑上直接跟安卓设备对话。它能干的事包括但不限于:安装卸载应用、查看运行日志、模拟点击滑动、抓取屏幕截图、修改系统设置、甚至进入设备的 shell 环境执行 Linux 命令。

这篇文章适合谁看?如果你是刚入行的移动端测试、安卓开发、或者做自动化脚本的工程师,那 ADB 是你绕不开的基本功。如果你只是普通用户,想用电脑管理手机里的文件、批量卸载预装应用,ADB 也能帮你省下不少时间。我见过太多人卡在“设备识别不到”这一步就放弃了,其实只要把驱动、授权、端口这几个环节理顺,后面就是一马平川。接下来我会从安装配置讲到常用命令,再到实际排查问题的思路,尽量把踩过的坑都摊开来说清楚。

2. 环境搭建:把 ADB 装明白的完整流程

2.1 下载与安装:别去乱七八糟的网站找

ADB 本身是 Android SDK 里的一个组件,但大多数人不需要装完整的 SDK。最省事的做法是直接下载 Google 官方提供的 Platform Tools 压缩包,里面就包含了 adb、fastboot 等工具。我试过好几个第三方打包的“ADB 工具箱”,说实话,版本参差不齐,有些还捆绑了广告软件,所以强烈建议只从官方渠道拿。

下载下来是个 zip 包,解压到一个你记得住的路径,比如C:\platform-tools或者~/platform-tools。解压完你会看到adb.exe(Windows)或adb(macOS/Linux)这个可执行文件。注意,不要把它放在中文路径或者带空格的目录下,否则后面配置环境变量或者执行命令时容易出莫名其妙的错误。我有个朋友把工具放在“我的文档/安卓工具”下面,结果 adb 死活启动不了,排查了半天才发现是路径里的中文和空格在作祟。

2.2 配置环境变量:让命令行随处可用

解压完直接双击 adb.exe 是没用的,它会一闪而过。正确做法是把 platform-tools 目录加到系统的 PATH 环境变量里。Windows 上的操作是:右键“此电脑” → 属性 → 高级系统设置 → 环境变量 → 在“系统变量”里找到 Path → 编辑 → 新建 → 把C:\platform-tools填进去。macOS 或 Linux 用户则是在~/.bashrc或~/.zshrc里加一行export PATH=$PATH:~/platform-tools,然后执行source ~/.zshrc让它生效。

配置完之后,打开一个新的终端窗口,输入adb version。如果能看到版本号输出,比如Android Debug Bridge version 1.0.41,那就说明装好了。这里有个细节:一定要开新的终端窗口,因为环境变量的修改只对新开的会话生效。我见过有人改完变量后在原来的窗口里反复敲命令,一直提示“adb 不是内部或外部命令”,急得不行,其实就是没重开窗口。

2.3 设备连接与驱动安装:识别不到设备怎么办

把手机用 USB 线连上电脑,然后在手机上进入“设置 → 关于手机 → 连续点击版本号七次”开启开发者模式,再回到“设置 → 开发者选项”里打开“USB 调试”。这一步是必须的,否则电脑根本不会理你。打开之后,手机通常会弹出一个“是否允许 USB 调试”的授权窗口,勾选“始终允许”再点确定。

然后在终端里敲adb devices。如果一切正常,你会看到类似这样的输出:

List of devices attached ABCD1234 device

如果显示的是unauthorized,说明授权窗口没点或者被关掉了,重新插拔一下数据线,手机上会再次弹出授权提示。如果列表是空的,那大概率是驱动问题。Windows 用户可以去设备管理器里看看有没有带黄色感叹号的未知设备,有的话需要手动安装对应厂商的 USB 驱动。macOS 和 Linux 通常不需要额外装驱动,但 Linux 下可能需要配置 udev 规则,否则普通用户没有权限访问设备。

注意:有些数据线只能充电不能传数据,换一根线试试往往能解决一半的“设备识别不到”问题。这个坑我踩过不止一次。

3. 基础命令实操:从装应用到抓日志

3.1 应用管理:安装、卸载与查看包名

装应用最常用的命令是adb install,后面跟 APK 文件的路径。比如adb install ./app-debug.apk。如果设备上已经装了同一个应用,会提示失败,这时候可以加-r参数覆盖安装:adb install -r ./app-debug.apk。还有一个很实用的参数是-t,允许安装测试包,有些 debug 签名的 APK 不加这个参数会报错。

卸载应用需要知道包名,命令是adb uninstall 包名。问题来了,怎么知道包名?可以用adb shell pm list packages列出所有已安装应用的包名。这个列表通常很长,可以配合 grep 过滤,比如adb shell pm list packages | grep 关键词。另外,adb shell pm list packages -3只列出第三方应用,-s只列系统应用,排查问题时很有用。

查看当前前台应用的包名和 Activity,可以用adb shell dumpsys window | grep mCurrentFocus。这个命令在自动化测试里特别常用,比如你想知道某个操作之后跳到了哪个页面,直接看这个输出就行。我刚开始做自动化的时候,就是靠这个命令确认页面跳转是否符合预期的。

3.2 文件传输与截图录屏:比想象中好用

从电脑推文件到设备用adb push 本地路径 设备路径,比如adb push ./test.txt /sdcard/。反过来从设备拉文件到电脑用adb pull 设备路径 本地路径。这两个命令在传日志、导截图的时候特别方便。注意设备路径的写法,/sdcard/是内部存储的根目录,实际对应的是/storage/emulated/0/,两个路径都能用。

截图命令是adb shell screencap -p /sdcard/screen.png,然后再用adb pull拉到电脑上。如果想一步到位,可以写成adb exec-out screencap -p > screen.png,这样直接输出到本地文件,省去了先存到设备再拉取的步骤。录屏则是adb shell screenrecord /sdcard/demo.mp4,默认录制时长上限是 180 秒,按 Ctrl+C 可以提前停止。录屏文件同样需要 pull 出来才能看。

实操心得:exec-out这个用法在 Windows 的某些终端里可能会有换行符问题,导致图片打不开。如果遇到这种情况,还是老老实实用screencap存到设备再 pull。

3.3 日志抓取:排查问题的第一手资料

adb logcat是使用频率最高的命令之一。直接敲adb logcat会刷屏,所以通常要加过滤条件。按优先级过滤用adb logcat *:E,只看 Error 级别以上的日志。按标签过滤用adb logcat -s TAG,比如adb logcat -s ActivityManager。还可以把日志输出到文件:adb logcat -v time > log.txt,-v time表示每行日志带上时间戳,方便后续分析。

清除日志缓冲区用adb logcat -c,这个命令在开始复现问题之前执行一下,可以避免旧日志干扰。另外,adb bugreport可以生成一份完整的系统诊断报告,包含日志、堆栈、系统状态等信息,适合在反馈复杂问题时使用。不过这个命令执行时间较长,生成的文件也比较大,日常调试还是 logcat 更轻量。

4. 进阶技巧与常见问题排查

4.1 无线调试:摆脱数据线的束缚

ADB 支持通过 Wi-Fi 连接设备,前提是设备和电脑在同一个局域网内。首先用 USB 线连上设备,执行adb tcpip 5555,让设备在 5555 端口监听。然后查看设备的 IP 地址,可以在“设置 → 关于手机 → 状态信息”里找到,或者执行adb shell ip addr show wlan0查看。最后执行adb connect 设备IP:5555,拔掉数据线,如果显示connected to 设备IP:5555,就说明无线连接成功了。

无线调试的好处是显而易见的,尤其是做自动化测试的时候,设备可以放在支架上自由移动,不用被线缆限制。但要注意,无线连接偶尔会断开,重新执行adb connect即可。如果连不上,先确认设备和电脑是否在同一个网段,再检查防火墙有没有拦截 5555 端口。

4.2 多设备管理:指定目标设备

当你同时连接了多台设备时,直接执行 adb 命令会报错,提示more than one device/emulator。这时候需要用-s参数指定设备序列号,比如adb -s ABCD1234 shell。序列号可以通过adb devices查看。如果觉得每次敲序列号太麻烦,可以设置环境变量ANDROID_SERIAL,比如export ANDROID_SERIAL=ABCD1234,这样后续命令默认就操作这台设备。

还有一种情况是设备显示为offline,这通常意味着 adb 服务端和设备端的连接出了问题。可以先执行adb kill-server再执行adb start-server重启服务,大部分情况下能解决。如果还不行,重启设备或者换一根数据线试试。

4.3 常见问题速查表

问题现象可能原因解决方法
adb devices列表为空驱动未安装或数据线不支持数据传输安装厂商 USB 驱动,更换数据线
设备显示unauthorized未授权 USB 调试重新插拔数据线,在手机上点击允许
adb 不是内部或外部命令环境变量未配置或未生效检查 PATH 配置,重开终端窗口
more than one device连接了多台设备用-s 序列号指定设备
无线连接频繁断开网络不稳定或设备休眠保持设备唤醒状态,重新 connect
install报错INSTALL_FAILED_TEST_ONLY安装的是测试包加-t参数重新安装

4.4 几个容易被忽略的实用命令

adb shell input tap x y可以模拟点击屏幕上的某个坐标,adb shell input swipe x1 y1 x2 y2模拟滑动,adb shell input text "内容"模拟输入文本。这几个命令组合起来,就能写一些简单的自动化脚本。比如自动解锁屏幕、自动填写表单之类的。

adb shell dumpsys battery可以查看电池状态,adb shell dumpsys meminfo查看内存使用情况,adb shell dumpsys cpuinfo查看 CPU 占用。这些命令在性能测试和问题排查时很有价值。我遇到过应用卡顿的问题,就是用dumpsys cpuinfo发现某个后台进程一直在占用 CPU,定位到问题根源的。

adb shell settings put global可以修改系统设置,比如adb shell settings put global window_animation_scale 0关闭窗口动画,加快自动化测试的执行速度。这个技巧在跑 UI 自动化用例时特别管用,能省下不少等待时间。

5. 从命令到脚本:把 ADB 用出生产力

单独敲命令只是入门,真正提升效率的是把 ADB 命令组合成脚本。比如写一个批量安装应用的脚本,遍历某个目录下的所有 APK 文件,依次执行adb install -r。或者写一个日志抓取脚本,自动清除旧日志、启动应用、等待几秒、抓取日志并保存到带时间戳的文件里。这些脚本用 Bash 或者 Python 都能写,核心就是调用 subprocess 执行 adb 命令并处理输出。

我自己常用的一个脚本是“一键抓取崩溃日志”:先adb logcat -c清空缓冲,然后启动目标应用,等待用户操作,最后adb logcat -d *:E > crash.log导出所有 Error 级别日志。这个脚本在测试同事反馈崩溃问题时特别高效,不用反复指导他们怎么抓日志,直接跑脚本就行。

还有一个场景是批量截图。做 UI 走查的时候,需要把每个页面的截图都保存下来。可以写一个脚本,依次执行adb shell input tap点击各个入口,每次点击后adb exec-out screencap -p > 页面名.png。虽然比不上专业的自动化框架,但在临时任务里足够用了。

注意:脚本里执行 adb 命令时,建议加上超时机制,避免某条命令卡住导致整个脚本挂起。Python 的 subprocess 可以用timeout参数,Bash 可以用timeout命令。

6. 我踩过的坑与最后分享的几个技巧

第一个坑是路径问题。前面提过中文路径和空格的问题,这里再强调一次,不仅是 platform-tools 的路径,push/pull 的文件路径也尽量用英文和数字,避免特殊字符。我有一次 pull 一个名字里带空格的文件,命令一直报错,后来用引号把路径包起来才解决。

第二个坑是权限问题。Linux 下普通用户访问 USB 设备需要 udev 规则,具体做法是在/etc/udev/rules.d/下新建一个规则文件,内容大概是SUBSYSTEM=="usb", ATTR{idVendor}=="厂商ID", MODE="0666"。厂商 ID 可以通过lsusb命令查看。配置完之后执行sudo udevadm control --reload-rules生效。这个步骤很多教程里没提,导致 Linux 用户一直卡在权限拒绝上。

第三个坑是 adb 版本与设备系统版本的兼容性。老版本的 adb 连接新系统的设备时,可能会出现各种奇怪的问题,比如安装失败、shell 命令无响应等。解决办法很简单,去官方下载最新的 platform-tools 替换掉旧的就行。我现在养成的习惯是每隔几个月就去官网看一眼有没有更新。

最后分享一个小技巧:adb shell进去之后,其实就是一个精简的 Linux 环境,可以用ls、cd、cat、ps等常用命令。但要注意,不同厂商的设备对 shell 命令的支持程度不一样,有些命令可能被裁剪掉了。如果发现某个命令不存在,不要怀疑自己,大概率是设备本身就没带这个工具。这种情况下可以试试用toybox或者busybox来补充,不过这就属于比较进阶的玩法了,日常调试用不到。

另外,如果你经常需要同时操作多台设备,可以考虑用adb -s配合 shell 脚本的循环来实现批量操作。比如批量安装应用、批量截图、批量抓日志,写一次脚本就能反复用。这种投入产出比很高的事情,值得花半个小时去折腾一下。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 3:38:50

Spring Boot+微信小程序旧衣回收系统:从设计到落地全解析

简介:这是一份基于微信小程序的旧衣回收系统毕业设计论文文档,面向计算机相关专业学生及需要完成类似课题的开发者。内容涵盖系统首页、用户管理、回收人员管理、旧衣信息管理、回收预约与派单、回收订单、积分商品与兑换等核心模块,完整展示…

作者头像 李华
网站建设 2026/10/10 3:38:14

关闭Ubuntu终端自动进入bash:四种方法详解

在 Ubuntu 上,打开终端自动进入 bash 环境,这个默认行为太常见了,常见到大家平时根本不会多想。可一旦你想换 zsh、想进一个“纯净终端”,或者发现每次打开终端都被.bashrc里的脚本“绑架”到某个目录,问题就来了&…

作者头像 李华
网站建设 2026/10/10 3:35:20

PHP与ASP.NET谁更快?从运行时模型与压测看执行速度真相

聊到Web开发,PHP和ASP.NET的“速度之争”,我几乎在每个技术社区都能见到。真正两边都深度做过项目的开发者其实不算多,多数讨论停留在文档和基准测试网站上的数据。恰好我前后两个主力项目分别用这两套技术栈——一个是高并发的API服务&#…

作者头像 李华
网站建设 2026/10/10 3:34:58

一文读懂用户操作日志:AOP采集、异步落库与表设计

做业务系统的同学,几乎都接过一个需求:把用户操作日志记下来。我第一次接到这个需求时也觉得简单,无非就是“谁、在什么时间、做了什么操作”,往表里插一条记录而已。但真从需求评审一路做到上线,我才发现自己太天真了…

作者头像 李华
网站建设 2026/10/10 3:34:48

nvm环境变量配置全攻略:解决Windows下“不是内部或外部命令”错误

先别急着怀疑自己下载了假安装包。刚装完 nvm,打开终端敲下nvm list,Windows 却回了一句"不是内部或外部命令",这几乎是 nvm 环境变量配置问题上大家摔的第一跤。其实 nvm 多半已经安静地躺在某个目录里了,真正没到位的…

作者头像 李华