ADB常用命令详解:从环境配置到自动化脚本的完整指南

📅 发布时间:2026/10/2 16:03:54
ADB常用命令详解:从环境配置到自动化脚本的完整指南
简介ADB常用命令文档.zip是一份面向Android开发者与测试人员的ADB命令速查手册围绕设备连接、应用安装卸载、shell指令执行、文件推送拉取、日志抓取、截屏录屏、进程与包管理等高频率调试场景展开同时覆盖USB调试开启、无线ADB连接、重启引导加载程序等进阶操作适合日常开发、自动化测试和系统级故障排查时随手查阅。压缩包共2个文件以docx详细说明文档为主另含一个c格式辅助文件整体仅19KB轻量便携可直接拷贝到工作环境使用。资源已有912人学习文档按功能模块逐条整理常用命令每个命令均附完整写法与典型示例如adb logcat配合grep过滤、am force-stop强制停止进程、exec-out screencap截图等并给出设备进入恢复模式等实操提示能帮助读者快速掌握从设备管理到应用调试的完整链路。1. 这不是一个冷门工具包ADB 常用命令文档到底解决什么问题但凡你手里有一台安卓手机、一块开发板、一台车机或者一个电视盒子早晚会遇到一个共同的问题屏幕上的东西点不动、日志刷不出来、装应用要用数据线一个个拷贝。ADBAndroid Debug Bridge就是那个夹在电脑和安卓设备之间的调试通道而这份「ADB常用命令文档」的核心价值不是罗列几十条命令让你背而是把「电脑控制安卓设备」这扇门打开装应用、看日志、读写文件、调系统设置、模拟按键触摸全靠这一条命令行通道完成。适合的人群很明确App 测试工程师、嵌入式开发、玩机用户、车机/电视盒子调试的人。这篇笔记按我的使用经验从环境、连接、常用命令到排查坑把能直接抄的写法给你整理出来。2. 把 ADB 跑起来安装、环境变量与第一次连接设备很多新手卡住的不是命令本身而是 adb 根本连不上设备。先别急着敲命令把环境理顺后面的操作才顺。这一章从装工具、配环境变量到授权连接按步骤走。2.1 安装与版本确认ADB 是 Android SDK Platform-Tools 的一部分最常见做法是单独下载 Platform-Tools解压即用不用装全家桶 Android StudioWindows、macOS、Linux 都有对应包。解压后你会得到一个包含 adb.exeWindows或 adbmacOS/Linux的目录这个目录就是之后要配进 PATH 的东西。# Windows进入解压目录后确认版本 adb version # 正常输出示例 # Android Debug Bridge version 1.0.41 # Version 31.0.0-xxxxxxx如果系统提示「不是内部或外部命令」说明没配环境变量或者没在 adb.exe 所在目录执行。macOS/Linux 下也可以用./adb version先确认工具本身能跑再谈环境变量。版本号不是越高越好但太老比如 1.0.32 年代的工具连新版安卓设备会报协议不匹配这类问题后面专章讲。2.2 环境变量配置让 adb 全局可用每次都要 cd 进解压目录敲./adb很烦把 Platform-Tools 目录加进 PATH 是一劳永逸的做法。Windows 和 Linux 的配法不同这里分别给。# Windows PowerShell管理员假设解压到 D:\platform-tools [Environment]::SetEnvironmentVariable(Path, $env:Path ;D:\platform-tools, User) # Linux / macOS编辑 ~/.bashrc 或 ~/.zshrc追加一行 export PATH$PATH:/你的路径/platform-tools # 保存后让配置生效 source ~/.bashrc验证是否配好新开一个终端直接敲adb version能输出版本信息就算完成。需要说明的是Windows 下改完环境变量要关掉旧终端再开新的否则不生效。macOS 如果用了 zsh记得改的是.zshrc不是.bashrc改错文件不会报错但也不生效。2.3 连接设备USB 的最稳方式与无线连接连接设备第一步永远是用 USB 线。但「插上线就能连」是个错觉真正常见的状态是adb devices能看到一串序列号但旁边是大写的unauthorized或者干脆device offline。先把 USB 调试开关打开设置 → 开发者选项 → USB 调试。不同品牌入口略有差异但基本都在开发者选项里。# 查看当前连接的设备 adb devices -l # 正常状态 # List of devices attached # 0123456789ABCDEF device usb:1-3 product:xxx model:xxx device:xxx transport_id:1 # 异常状态 # 0123456789ABCDEF unauthorized看到unauthorized时看手机上弹出的指纹授权对话框勾选「始终允许」后确认。没弹框的话拔插一次数据线或者重启 adb serveradb kill-server再adb start-server基本能解决。设备状态从unauthorized变成device才真正可以下发命令。无线连接适合 USB 口不够用或者想远距离操作的场景安卓 11 以上还支持无线调试配对码不用 root。# 先 USB 连接让设备监听 5555 端口 adb tcpip 5555 # 拔掉 USB改用 IP 连接设备与电脑需在同一网段 adb connect 192.168.x.x:5555 # 确认连接 adb devices注意无线连接的速度和稳定性不如 USB传输大文件或长时间抓日志不建议走无线容易断流。热词里常有人说“adb工具包”“adb安装”其实指的都是 Platform-Tools 这套东西唯独容易踩坑的是「电脑上装了一堆安卓助手里集成的旧版 adb」路径混乱导致版本错乱。3. 高频命令实战应用管理、文件传输与系统设置这一章是这份文档最核心的价值所在。我按日常使用频率把命令分成三类应用装删查、文件进出设备、系统参数调节。每条命令都配上场景说明和参数解释可以直接照着敲。3.1 应用安装、卸载与包管理安装 APK 是 ADB 最刚需的场景。测试同学一天可能要装几十个包用adb install比拷贝到手机再点击安装快一个量级而且可以控制是否覆盖安装。# 普通安装保留数据覆盖安装 adb install -r app-release.apk # 覆盖安装且允许降版本测试包版本号低于线上时用 adb install -r -d app-test.apk # 卸载应用pm 包名来自上一步的查询结果 adb uninstall com.example.demo # 列出设备上所有第三方应用包名 adb shell pm list packages -3 # 精确查某个应用的包名按关键字过滤 adb shell pm list packages | grep demo参数说明-r代表 replace保留数据覆盖安装-d是 allow downgrade允许安装比当前版本低的包-t允许安装测试包AndroidManifest 里 testOnly 标记为 true 的 APK。安装失败最常见原因是签名不一致INSTALL_FAILED_UPDATE_INCOMPATIBLE解决办法是先用adb uninstall卸载旧包再装或者和签名负责人确认签名环境。包名和应用名不是一回事桌面显示的名字经常和包名对不上。查包名除了pm list packages外还可用adb shell dumpsys package里的Packages:段落确认细节信息包括版本号、权限列表、安装路径这是排查应用崩溃时定位问题的重要手段。3.2 文件推送与拉取绕过存储权限限制电脑和手机之间传文件很多人只知道数据线拷贝。但遇到大文件比如 1GB 以上的测试视频、或者想往应用私有目录塞文件的时候文件管理器会受权限限制这时 ADB 就不可替代。# 电脑文件推到手机 /sdcard/Download adb push ./test.mp4 /sdcard/Download/ # 把手机里的日志文件拉到电脑当前目录 adb pull /sdcard/Download/crash.log ./ # 往应用的私有目录拷文件需要应用具备 debug 权限或 root adb push ./config.json /data/data/com.example.demo/files/ # 查看指定目录内容 adb shell ls -l /sdcard/Download/参数说明adb push和adb pull本质是走 ADB 协议的文件传输通道对文件大小没有硬限制但单文件超过 2GB 时部分低版本 adb 会异常建议分批拷贝或升级 adb 版本。目标路径写/sdcard/或/storage/emulated/0/均可但/data/data/下属于应用私有目录普通应用没权限读需要 root 或 run-as 命令才能访问。run-as是另一个实用技巧在adb shell内可以以某个 debug 应用的 uid 执行命令从而读取其私有目录。前提是这个应用是 debuggable 的。测试同学经常用它取应用的数据库文件省去 root 的麻烦。3.3 调节系统设置屏幕方向、亮度、DNS 与 localeADB 调系统设置是测试同学的利器特别是做多语言、多屏幕方向、弱网这类场景时不用手在设置界面里一个个点一条命令切状态。# 强制应用横屏显示注意是 shell 层强制部分应用会自适应失败 adb shell settings put system user_rotation 1 # 读取当前屏幕方向 adb shell settings get system user_rotation # 调整屏幕亮度为 50% adb shell settings put system screen_brightness 50 # 修改系统语言为英文重启后部分设备需要重新确认 adb shell settings put system system_locales en-US # 模拟按键返回键 adb shell input keyevent 4 # 模拟点击屏幕坐标点 (500, 1000) adb shell input tap 500 1000参数说明user_rotation的取值 0 代表竖屏、1 代表横屏顺时针 90 度这个值会被系统写入设置数据库并立即生效。input keyevent后面跟的数字是 Android 按键码4 是返回、3 是 Home、26 是电源键这是一张很常用的表。input tap的两个坐标是按屏幕像素点算的分辨率不同的设备需要先adb shell wm size查一下当前分辨率再算坐标否则会点偏。settings命令背后操作的是系统级 SettingsProvider 数据库改坏了可以用settings put/delete恢复不会变砖。但有一点要注意system_locales修改后某些应用有自己独立的语言配置不是全局都能立刻切换需要杀进程或重启应用才生效。4. 日志抓取与性能摸底logcat 和 dumpsys 的实战用法日志是排查问题的第一现场。ADB 提供 logcat 查看系统与应用日志、dumpsys 查看系统服务状态这两组命令是测试与开发排查问题的核心工具。而且日志抓取也是热词里出现频率最高的需求。4.1 logcat 按优先级与关键字过滤logcat默认输出所有日志刷屏速度极快必须学会过滤。日常我常用的过滤维度有三个按 Android 日志优先级V/D/I/W/E、按应用进程 PID、按关键字。# 清空旧日志保证接下来的输出都是新产生的 adb logcat -c # 只显示 Error 及以上级别日志 adb logcat *:E # 带时间戳、按关键字 grepWindows 命令行用 findstr adb logcat -v time | grep AndroidRuntime # 同时抓取指定进程的所有日志按 PID可从 dumpsys 获取 adb logcat --pid12345 # 输出到文件后台持续抓取 adb logcat -v threadtime app_log.txt参数说明-c清空缓冲区*:E表示所有 tag 只输出 Error 级别V 最啰嗦、E 最精简通常先用 E 定位异常再逐步放宽。-v time给每一行加上日期时间threadtime额外带线程 ID崩溃排查时threadtime格式更有效。--pid指定进程 ID避免被系统其它进程日志干扰。崩溃日志典型长这样以FATAL EXCEPTION开头的段落下面跟着Process: com.example.demo、java.lang.NullPointerException和一堆at com.example.demo.MainActivity.onCreate(MainActivity.java:10)调用栈。把这段完整抓下来贴给开发比截图崩溃弹窗有价值得多。抓取技巧先adb logcat -c清空让用户复现操作再adb logcat -d crash.log把缓冲区里的日志一次性导出-d是 dump 模式抓完即退适合自动化脚本收日志。4.2 dumpsys查系统服务与内存状态dumpsys是 ADB 家族里最强大的黑匣子读取器各种系统服务的当前状态都从这拿。常用的包括 Activity 栈、包信息、电池、内存、窗口信息。# 查看当前前台 Activity定位当前在哪个界面 adb shell dumpsys activity activities | grep -i resumed # 查看应用内存占用PSS 值比 RSS 更准 adb shell dumpsys meminfo com.example.demo # 查看电池状态温度、电量、充电状态 adb shell dumpsys battery # 查看屏幕分辨率与密度 adb shell wm size adb shell wm densitydumpsys输出非常冗长直接打出来会刷屏好几千行。配合grepWindows 用findstr按关键字裁剪是正确用法。查前台 Activity 是 UI 自动化脚本里很常见的准备步骤先知道当前界面才知道下一步该发什么指令。dumpsys在自动化中的另一个用途是验证结果启动应用后通过dumpsys activity activities确认目标 Activity 已经处于 resumed 状态这比 sleep 指定秒数等待更可靠——类似「等系统主动通知」而不是「盲等固定时间」。用这种思路写测试脚本稳定性明显提高。4.3 截图与录屏不用第三方工具测试提 bug 时需要截图用adb exec-out screencap可以直接把截图二进制输出到电脑不落地到手机存储少一步文件管理。录屏同理。# 截图保存到电脑exec-out 直接输出二进制流 adb exec-out screencap -p screen.png # 录屏 10 秒分辨率做到不影响性能 adb shell screenrecord --time-limit 10 --bit-rate 2M /sdcard/test.mp4 adb pull /sdcard/test.mp4 ./参数说明screencap -p的-p指定 PNG 格式exec-out和shell screencap的区别在于前者把图片二进制直接重定向到电脑后者先落盘手机再 pull日常用前者更方便。screenrecord的--bit-rate控制码率默认 4Mbps长时间录屏建议降到 2Mbps 减小体积。部分设备 screencap 对 HDR 内容截出来的图偏色这是设备限制不是 ADB 的问题。5. 避坑指南ADB 常见问题排查与处理这一章把高频踩坑记录列出来每条都是「现象 → 原因 → 解决」的结构基本都是大家在 adb 使用过程中最常见的拦路虎值得先收藏再看。5.1 adb server version 不匹配daemon 启动失败现象敲adb devices提示adb server version (41) doesnt match this client (31); killing...之后所有 adb 命令不可用。原因电脑上存在多个 adb 版本。常见情况是 Android Studio 自带一份通常在 SDK 目录手机厂商驱动或某助手工具也内置一份可能是老版本 1.0.31/1.0.32两个 adb 抢同一个 5037 端口后启动的 server 把先启动的杀掉但客户端版本和服务端版本协议不一致连接就断了。解决统一 adb 版本。定位所有 adb.exe 的位置把不用的版本删除或重命名实际路径可用where adbWindows查找全部路径。确认当前 PATH 里第一个命中的是 Platform-Tools 目录。杀干净后重启adb kill-server adb start-server再adb devices验证。5.2 unauthorized授权窗口不弹出或一直挂起现象adb devices显示设备为unauthorized手机上没有出现 RSA 指纹授权弹窗。原因设备可能已经授权过但授权记录因系统更新被清或者 USB 连接模式下设备认为当前电脑不可信。还有一种情况是手机设置了锁屏且锁屏状态下授权弹窗无法显示。解决先解锁手机屏幕再看有没有弹窗没有弹窗就拔掉 USB 线重新插然后在开发者选项里执行「撤销 USB 调试授权」再重新插线此时必定弹出授权对话框。如果还是没有尝试重启 adb serveradb kill-server后重新连接。注意不要对未授权的设备执行除devices以外的命令否则也会卡住或报错。5.3 device offline设备状态异常现象adb devices显示offline无法安装应用或执行 shell 命令。原因USB 线质量差或接口松动、USB 模式处于「仅充电」部分设备需要手动选「文件传输/MTP」模式或者 adb server 版本与设备端 daemon 不兼容。解决更换数据线优先用短线、原装线把 USB 连接模式切换到「文件传输」后重试。若仍 offline在开发者选项里关掉「USB 调试」再打开或者重启设备。最彻底的恢复方法是adb kill-server后重启电脑端 adb仍不行再重启设备。这通常是「设备好久没换线」造成的玄学问题换线即愈。5.4 安装 APK 报 INSTALL_FAILED_UPDATE_INCOMPATIBLE现象覆盖安装测试包时提示INSTALL_FAILED_UPDATE_INCOMPATIBLE。原因手机里已安装的版本和要装的包签名不一致或已装的是正式版、现在要装 debug 版签名不同。ADB 的-r只能处理签名一致的覆盖安装。解决先adb uninstall卸载旧包再装新包。如果卸载时有系统预装保护卸载后自动回滚到出厂版本考虑用adb shell pm disable-user停用旧应用再安装或专门准备一台清空状态的测试机。对测试团队更优的做法是统一所有包用同一个 debug 签名这样永远不会遇到这个问题。5.5 端口 5037 被占用另一个程序正在使用现象adb start-server报could not read ok from adb server或启动失败。原因5037 是 adb server 的固定端口可能被旧 adb 进程、某些手机助手或恶意软件占用。解决Windows 用netstat -ano | findstr 5037找出占用进程 PID到任务管理器确认后结束进程或直接杀掉所有 adbtaskkill /f /im adb.exe再重启。风险在于这么做会连累正在调试中的其他会话所以最好提前确认没有别人在用这台电脑的设备。6. 进阶技巧把 ADB 变成自动化脚本的一部分到这一章基础的推拉、安装、日志、调参命令都已经覆盖。接下来把视角从单条命令拉升到「批量任务」的层面自动化测试的起停、多设备管理、等待设备就绪。这些技巧能把前面所有命令串起来跑而不是每次手动敲。多设备并行是测试台最常见的场景。同时插两三台手机时adb install无法指定设备要么只识别到一台要么报错。# 列出设备序列号用于指定设备 adb devices # 指定设备安装 adb -s 0123456789ABCDEF install app.apk # 指定设备抓日志 adb -s 0123456789ABCDEF logcat -d device1.log参数说明-s后面直接跟adb devices输出的序列号所有 adb 命令都支持这个参数。序列号就是你给这台设备起的「名字」在脚本里用变量存好循环处理一批设备就很方便。wait-for-device是自动化的关键设备重启或长时间待机后adb 连上但系统还未就绪此时下命令会失败。等待设备完成启动再执行后续命令能省掉大量脚本埋怨。# 等待设备上线系统启动完成后返回 adb wait-for-device # 等设备上线后轮询系统属性直到启动完成 adb shell while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done # 设备就绪后一次性完成安装、启动应用、设置旋转方向 adb -s $DEVICE install -r app.apk adb -s $DEVICE shell am start -n com.example.demo/.MainActivity adb -s $DEVICE shell settings put system user_rotation 1getprop sys.boot_completed返回 1 时系统才算真正启动完成只看wait-for-device会抢跑。设备开机进桌面前pm、am这些服务可能还没好。这两行组合是我个人觉得脚本最值得抄的一段代码尤其在多设备自动化回归时明显降低误报率。最后一个习惯是关于日志归档的自动化跑完把每个设备的 logcat 按照「设备序列号_测试用例名_时间戳.log」命名拉回电脑归档。这样做并不复杂但出问题时能在几分钟内定位到是哪台设备、哪个用例、什么时间的崩溃不用临时翻找。自己折腾 ADB 这几年最大的体会是命令记住多少不是关键把连接、抓日志、装包这几条基础命令写进脚本、做到随手能用效率提升是肉眼可见的。希望这些内容对你有所帮助。本文还有配套的精品资源点击获取