ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ADB常用命令全攻略:从环境配置到Shell操作与报错排查

ADB常用命令全攻略:从环境配置到Shell操作与报错排查 1. 为什么搞 Android 的人最后都绕不开 adb 这套命令很多朋友刚接触 Android 开发或者刷机玩机的时候第一个听说的命令行工具往往就是 adb。ADB 全称 Android Debug Bridge翻译成大白话就是安卓调试桥。它的一端是电脑上的命令行另一端是手机、车机、电视盒子、智能手表这些跑 Android 系统的设备中间用 USB 线或者 Wi-Fi 连起来。有了这座桥你就能在电脑上直接指挥设备干活装应用、传文件、看日志、模拟按键、改系统设置甚至刷机救砖。我记得带新人时发现一个普遍误区很多人以为 adb 是 Android 开发者的专属工具。其实完全不限。搞测试的需要 adb 做自动化玩机的用它装应用、冻结后台智能电视用户经常通过 adb 来安装第三方应用车机改装圈也会用到 adb 来调设备参数——搜索热词里那些小米电视 adb 安装应用老款创维打开 adb吉利车机 adb 模式就是这么来的。可以说只要是 Android 生态adb 就是底层通用工具。这篇文章我打算把日常使用频率最高的 adb 常用命令系统整理一遍从环境准备到常见报错配合实际场景讲清楚每条命令是干什么的、为什么这么写以及哪些坑我已经替你踩过了。如果你熟悉 Linux 常用命令上手 adb 会特别快因为它的核心交互方式就是一整套命令行体系。1.1 adb 的三个角色client、server 与 daemon先理解 adb 的运行原理后面遇到各种诡异报错会好排查很多。adbd 是设备里的守护进程电脑上敲命令的是 client电脑后台还有个常驻的 server。当你在终端里执行 adb devices电脑的 server 会启动然后通过 USB 协议跟设备里的 adbd 握手握手成功后设备就出现在列表里。我打个比方client 是打电话的人server 是交换机adbd 是接电话的客服。你敲的每一条 adb 命令都先到交换机再由交换机转给设备客服去执行。之所以要理解这个链路是因为很多人会遇到adb 命令没反应的情况这时候先执行 adb kill-server 再重新连本质就是把卡死的交换机重启一下。1.2 这篇文章适合谁直接照着抄在往下看之前先对号入座刚接触 Android 开发的初学者想在真机上调试应用需要一套不绕弯的命令手册刷机、玩机、折腾第三方 ROM 的朋友需要装应用、传文件、进特殊模式测试工程师需要抓取日志、批量操作多台设备、复现崩溃现场家里有安卓电视、电视盒子、车机想自己动手装应用、调设置的人。如果你是纯新手我建议不要试图一次性背下所有命令先把 adb devices、adb install、adb logcat 这三条练熟跑通设备和电脑之间的通路后面自然就顺手了。2. 环境准备从安装到连接设备最容易绊倒人的几个环节2.1 各平台安装 adb 的方式Windows 用户我建议直接下载 Google 官方的 Platform Tools解压出来就是 adb.exe、fastboot.exe 那一整套不需要额外安装。解压完把目录记住比如放在 D:\platform-tools然后配置环境变量的目的只有一个让你在任何目录下都能直接敲 adb而不是每次都先 cd 到那个文件夹。macOS 和 Linux 用户简单很多。macOS 有 Homebrew 的直接执行 brew install android-platform-toolsDebian/Ubuntu 系执行 sudo apt install adb。装完在终端执行 adb version能输出版本号就说明环境正常。这里有个 Windows 特有细节很多人解压后双击 adb.exe 发现窗口一闪而过以为软件坏了。其实 adb 是命令行程序必须在 cmd、PowerShell 或者 Windows Terminal 里运行双击根本看不到效果。2.2 adb 不是内部或外部命令到底怎么破adb 不是内部或外部命令也不是可运行的程序或批处理文件——这条几乎是每天都会有人遇到的头号报错。原因其实很直白系统在当前目录和 PATH 环境变量里都找不到 adb.exe。解决办法有两条路。临时应急的做法是每次先 cd 到 platform-tools 目录再执行 .\adb比如cd D:\platform-tools .\adb devices一劳永逸的做法是把这个目录加进 PATH。Windows 上右键此电脑→属性→高级系统设置→环境变量在系统变量里找到 Path编辑后新增一行 D:\platform-tools确定后重开终端重点必须新开窗口不是用旧窗口直接试。改完可以在终端执行 echo %PATH%确认路径有没有生效。macOS/Linux 如果提示 command not found大概率是安装没成功重新执行包管理器安装命令或者确认 brew/apt 的安装过程没有报错。2.3 手机上的开发者选项和 USB 调试命令环境搞定之后还得让设备愿意被你连上。手机端需要进入开发者模式设置里找到关于手机连续点击版本号七次直到提示已进入开发者模式。然后回到设置找到开发者选项打开USB 调试。这里有一个反复出现的坑小米、vivo 这类手机光开 USB 调试还不够还得在开发者选项里把USB 安装USB 调试安全设置这类开关一并打开否则后面执行 adb install 会直接报 INSTALL_FAILED_USER_RESTRICTED字面意思就是系统限制安装但实际原因只是你少开了一个开关。2.4 驱动问题和设备状态识别设备插上后在电脑上执行 adb devices常见输出有几种我整理成了表格方便比对输出状态含义常见原因device正常连接已授权可执行命令unauthorized未授权手机弹窗没点允许或之前点了拒绝offline离线握手失败、驱动异常或数据线质量差空列表未识别驱动没装好或数据线不支持数据传输判断驱动问题有个笨但有效的办法换一根短线、换一个 USB 口最好直接插主板后面的接口而不是机箱前面板。我处理过不少电脑认不到手机的求助最后发现一大半都是线的问题——看着能充电但根本走不了数据。3. 基础命令三件套设备管理、应用安装与文件传输3.1 adb devices一切操作的起点adb devices 是你以后敲得最多的一条命令作用就是列出当前电脑识别到的所有 adb 设备。正常状态下输出里就有你设备的序列号和 device 状态。只要状态是 device就可以继续往下操作如果是 unauthorized 或者 offline先解决状态问题再说硬往下走只会得到各种莫名其妙的错误。配合 -l 参数可以看到更多设备信息adb devices -l输出里会包含设备的型号、usb 端口等信息在电脑上同时插着手机、电视盒子、手表多台设备时区分起来特别有用。我建议你从现在开始养成习惯接上新设备第一步永远是 adb devices不要跳过。3.2 安装与卸载应用install/uninstall 的参数细节装应用最基础的写法是 adb install 包名.apk。如果终端当前目录没有这个 apk就得写绝对路径adb install D:\apps\demo.apk常用参数建议直接记住日常用得太频繁了参数含义使用场景-r覆盖安装保留数据升级测试不希望清掉用户数据-d允许降级版本版本回退从新版本装回旧版本-g安装后直接授予所有运行时权限省去手动点权限弹窗-t允许安装测试 APK安装 AndroidManifest 里 testOnly 的应用卸载应用对应的命令是 adb uninstall 包名。注意这里跟的是包名不是应用名称。怎么查包名最简单的是执行 adb shell pm list packages能看到设备里所有应用包名输出太多时在命令行里加 grepLinux/macOS或者 findstrWindows过滤。3.3 文件推送与拉取push/pull 的路径学问把电脑上的文件推到设备里adb push 电脑文件路径 /sdcard/目标路径。adb push C:\test.txt /sdcard/Download/这条命令执行完文件就到了设备的下载目录。反过来把设备里的文件拿回电脑adb pull /sdcard/Download/test.txt C:\。adb pull /sdcard/Download/test.txt C:\路径顺序别搞反先源后目标。我实测下来电视、车机上装应用时很多时候 U 盘不识别但 adb 一定认。把 APK push 到 /sdcard/ 或者 /data/local/tmp再执行安装命令是不少人在自有设备上装应用的常用路子。具体操作请确保在合规前提下使用自己的设备。3.4 重启与特殊模式reboot 全家桶日常调试经常要把设备重启一下adb reboot 就是干这个的。带参数的话作用完全不同adb reboot普通重启系统adb reboot bootloader重启到 bootloader刷机引导模式adb reboot recovery重启到 Recovery 模式adb reboot fastboot重启到 fastboot 模式部分设备支持adb reboot sideload配合 Recovery 里的 sideload 功能刷机。平时用得最多的是 adb reboot。设备卡死时可以直接执行比长按电源键更可控。但要注意涉及 bootloader、recovery 的操作会改变设备的启动模式对数据可能有影响执行前确认一下自己到底要干什么。刷机老手无所谓新手千万别在没搞清楚的状态下乱进模式。4. 进阶操作用 adb shell 在设备系统里干活4.1 包管理 pm查包、清数据、冻结应用adb shell 的意思是进入设备系统的 shell 环境后面跟的是设备 Linux 系统里的命令。pm 是 package manager 的缩写用来管理应用包。常用组合和作用如下adb shell pm list packages # 列出所有包名 adb shell pm list packages -s # 只列系统应用 adb shell pm list packages -3 # 只列第三方应用 adb shell pm clear 包名 # 清除应用数据 adb shell pm disable-user 包名 # 禁用某个应用pm clear 相当于把应用恢复出厂设置登录状态、缓存、本地数据库全部清掉。测试同学想模拟首次安装状态时这招特别管用比去设置里找清除数据快得多。pm disable-user 则是冻结应用让它无法被启动、无法后台运行又不需要卸载是压制系统自带但用不上的应用的好手段——搜索热词里的adb 关闭系统后台运行程序用这个命令就能实现。4.2 屏幕方向、尺寸与密度wm 命令的玩法adb shell wm 用于查看和修改窗口管理相关的参数搜索热词里adb shell wm 设置应用屏幕方向指的就是这一块。常用命令示例adb shell wm size # 查看当前屏幕分辨率 adb shell wm size 1080x1920 # 临时修改分辨率 adb shell wm density # 查看当前屏幕密度 dpi adb shell wm density 320 # 临时修改 dpi这里我多说一句为什么。wm size 和 wm density 的改动本质是向应用层谎报屏幕参数。改分辨率可以模拟不同屏幕尺寸下的显示效果改 density 可以让界面元素变大变小。这些修改都是临时性的重启设备后恢复原状所以放心测试不会搞坏系统。真正确认没问题了再用 settings put 系列命令写入持久化配置。还有一个小场景很多应用在平板上默认竖屏或者反过来的情况通过 adb shell settings put system user_rotation 1 这类设置可以强制屏幕方向。不过不同 Android 版本对旋转控制的实现差异较大执行前建议先查一下设备的具体版本。4.3 截图与录屏screencap 和 screenrecord抓取设备当前屏幕最稳的写法是先存到设备再拉回电脑adb shell screencap -p /sdcard/screen.png adb pull /sdcard/screen.png第二种方式是一步到位adb exec-out screencap -p screen.png。实测在 Windows PowerShell 下基本正常但 cmd 下偶尔会出问题所以我个人还是推荐先存再拉兼容性最好。录屏命令adb shell screenrecord /sdcard/demo.mp4按 CtrlC 结束录制。默认最长录制 180 秒录屏期间不能熄屏。想把分辨率调低一点可以用 --size 参数想限制时长用 --time-limit。录完同样用 adb pull 拉回电脑。4.4 logcat 抓日志的正确姿势日志抓取是测试同学的高频需求也是很多人觉得 adb 最难上手的地方。最粗暴的用法是 adb logcat它会持续输出所有日志刷屏刷到怀疑人生。日常我建议这样配合使用adb logcat -c # 先清空旧日志 adb logcat -d crash.log # 导出当前缓冲区日志-d 表示导出后退出 adb logcat -v time # 带时间戳输出 adb logcat *:E # 只看错误级别日志排除崩溃问题最常用的组合是adb logcat -c adb logcat -v time *:E crash.log让用户复现一次崩溃然后拿导出的 crash.log 慢慢分析。注意过滤包名的方式在不同 Android 版本上兼容性并不一致通行的做法是整包导出再用 grep 或者 Android Studio 的 Logcat 面板二次过滤。盲目依赖单条过滤命令容易漏掉关键信息。4.5 模拟按键、输入文本与启动应用这部分是adb 键盘搜索热词背后真正实用的内容adb shell input keyevent 3 # 模拟按 Home 键 adb shell input keyevent 4 # 模拟按返回键 adb shell input keyevent 26 # 模拟按电源键 adb shell input text hello # 向输入框输入文本 adb shell am start -n 包名/Activity全名 # 直接启动某个应用的指定页面电视、车机上没有实体键盘想在输入框里打字用 input text 远程输入比遥控器一个一个按快得多这算是我实测下来最实用的场景之一。需要注意 input text 对中文支持不稳定稳妥的办法是传英文/数字或者先把内容复制到设备剪贴板再粘贴。启动应用时 Activity 全名有固定格式可以用 adb shell dumpsys package 包名 来查。5. 无线调试摆脱数据线的限制5.1 有线转无线tcpip 与 connect先用 USB 线连一次设备执行 adb tcpip 5555然后拔掉线在同一个局域网内执行 adb connect 设备IP:5555就能无线连接。如果你用的是 Android 11 以上的设备可以在开发者选项里直接打开无线调试用配对码配对流程更现代。adb tcpip 5555 adb connect 192.168.1.100:5555无线调试注意三个点一是电脑和设备必须在同一网段跨网段基本连不上二是公司网络、公共 Wi-Fi 经常开 AP 隔离表现为设备之间互相 ping 不通这时候不是你的操作问题是网络限制三是连接后如果显示 offline多半是握手超时重新 connect 一次或者换个端口试试。5.2 多设备并行操作如果你手上有好几台设备要同时操作adb 支持指定设备执行命令adb devices # 先查看设备序列号 adb -s 设备序列号 install app.apk # 指定某台设备安装 adb -s 设备序列号 shell input keyevent 3 # 指定设备模拟按键写批量脚本时可以先用 adb devices 拿到设备列表再在循环里依次执行命令。这种玩法对测试同学极其友好我经常用几条 for 循环把办公室里的测试机统一装上包、统一跑一轮冒烟测试比在一台台设备上手动操作高效太多。6. 高频报错排查把搜索热词里的坑一次填平6.1 adb 不是内部或外部命令的完整排查链路前面已经说了 PATH 的配置思路。但如果你配置完仍然报这个错按这个顺序排查命中率很高确认 platform-tools 目录里确实存在 adb.exe而不是只有压缩包没解压确认环境变量 Path 里新增的是 platform-tools 的绝对路径不是指向 platform-tools\adb.exe确认打开了新的终端窗口——修改环境变量后旧窗口不会自动刷新在终端执行 echo %PATH%Windows检查输出里是否包含你的路径。我处理过不少远程求助最后发现 90% 的情况都卡在第三步改完环境变量还在旧终端里试怎么试都报错。6.2 检测到多个版本 adb 服务端口冲突问题这条搜索热词的完整表述是检测到电脑上同时运行了多个版本的 adb 服务版本不一致请把旧的/冲突的 adb 进程杀掉是 adb 自带的一种保护机制。原因一般是电脑上装了好几个 Android 相关工具——Android Studio、第三方手机助手、模拟器、各种刷机工具它们各自捆绑了不同版本的 adb。当你手动启动的 adb server 与另一款工具里的 adb 版本不一致时就会弹这句提示。临时处理执行 adb kill-server干掉当前 server再重新 adb start-server。端口 5037 被旧进程占用时这招立竿见影。根治办法让所有工具统一使用同一个 adb比如在环境变量里配置 ANDROID_HOME 指向你的 Android SDK 目录很多工具会优先调用 SDK 里的 adb。如果还不行干脆把手机助手、刷机工具这类自带旧版 adb 的程序全部退出再试。6.3 unauthorized 与调试授权窗口不弹adb 显示 unauthorized意思是电脑连上了设备但设备端没有确认授权。正常插线后手机屏幕会弹出是否允许 USB 调试的对话框点允许并勾选始终允许就解决。实际中很多人卡在弹窗不出现尤其是之前已经插过线、点过拒绝的设备。解法按顺序试拔掉 USB 线重新插入触发一次重新识别在开发者选项里执行撤销 USB 调试授权然后重新插线执行 adb kill-server然后重新 adb start-server换一个 USB 口连接接口状态变化有时也能触发重新授权。如果设备屏幕已经坏了或者不方便操作弹窗处理起来会麻烦很多。日常最省事的还是撤销授权重来基本能覆盖 95% 的 unauthorized 场景。6.4 设备 offline、找不到设备的通用排查顺序遇到 offline 或者列表为空我一般按这个顺序处理命中率很高换线、换 USB 口优先排除硬件和数据线问题执行 adb kill-server 后重新连接排除 server 卡死检查设备端 USB 调试开关是否被系统自动关闭——部分手机重启后会恢复默认换一台电脑测试确认是不是设备本身异常检查是否同时开着多个模拟器或虚拟机它们会占用 adb 的 5037 端口造成设备列表混乱。这台机器上装了多个 Android 模拟器导致的端口占用我前后排查过两次现象就是设备明明插着却时有时无。最后都是杀掉所有模拟器进程再重新 adb devices 就恢复正常了。我自己这些年从手机刷机入坑到给电视盒子装应用、给车机调参数、给测试机批量跑脚本adb 一直是那个最常用、最底层的工具没有之一。熟练之后你会发现很多在图形界面里点半天才能完成的操作一条命令几秒钟就搞定了。如果你刚接触建议从 adb devices、adb install、adb logcat 这三条命令开始练起先把设备和电脑之间的通路跑通后面再慢慢扩展。遇到任何奇怪的问题先执行 adb kill-server 冷静一下大部分坑都能自己趟过去。
返回列表