
1. 项目概述为什么我们需要一份自己的ADB命令手册如果你是一名Android开发者、测试工程师或者是一个喜欢折腾手机、搞机刷机的极客那么“adb”这个词对你来说一定不陌生。ADB全称Android Debug Bridge中文常译为“安卓调试桥”是Google官方提供的一个功能极其强大的命令行工具。它就像一把连接电脑和Android设备的“瑞士军刀”能让你在电脑上通过命令行直接对手机进行安装应用、传输文件、执行Shell命令、抓取日志、甚至修改系统分区等深度操作。网络上关于ADB命令的文章和“速查表”多如牛毛但很多要么过于零散只列出命令本身要么过于陈旧没有涵盖新版本Android的特性要么就是缺乏上下文只告诉你“输入这个”却不解释“为什么用这个”以及“用的时候可能会遇到什么坑”。对于每天都要和ADB打交道的从业者来说一份真正好用、有深度、有“灵魂”的命令总结不应该只是简单的罗列而应该是一份融合了原理、场景、避坑指南和实战心得的“内功心法”。这份总结的目的就是帮你构建这样一套心法。我们不追求命令数量上的“大而全”而是聚焦于那些在开发、测试、逆向、自动化等真实工作流中最高频、最核心、也最容易出问题的“常用命令”。我会结合自己多年在移动端一线的实战经验不仅告诉你命令怎么写更会拆解其背后的工作原理分享在不同场景下的最佳实践以及那些官方文档里不会写的“血泪教训”。无论你是刚接触ADB的新手还是想梳理自己知识体系的老手这篇文章都能为你提供一个清晰、可靠、可直接投入使用的参考框架。2. ADB核心架构与工作原理拆解在开始罗列命令之前我们必须先理解ADB是怎么工作的。知其然更要知其所以然这能帮助你在命令失败时快速定位问题是出在连接、权限还是设备状态上而不是盲目地重启电脑或设备。2.1 ADB的三层组件模型ADB并非一个单一的程序而是一个客户端-服务器架构的系统主要包含三个部分ADB Client客户端这就是你在电脑命令行中输入的adb命令本身。它负责接收你的指令并将其发送给ADB Server。ADB Server守护进程这是一个在电脑后台运行的守护进程。当你第一次执行任何adb命令时它会自动启动。它的核心职责是管理客户端与所有已连接Android设备或模拟器之间的通信。你可以通过adb start-server手动启动或adb kill-server停止它。很多连接问题通过重启Server就能解决。ADB Daemonadbd设备端守护进程这是一个运行在Android设备或模拟器后台的守护进程。它以后台服务的形式存在监听来自ADB Server的连接请求并执行接收到的命令。在设备的开发者选项中开启“USB调试”本质上就是激活了这个adbd进程。当你输入adb devices时信息流是这样的Client - Server - 通过USB或网络连接到所有设备的adbd - 收集设备信息 - 返回给Server - 显示在Client的终端上。2.2 连接方式USB与网络调试USB调试最传统、最稳定的方式。需要USB数据线请务必使用质量可靠的数据线劣质线是无数问题的根源并在设备上开启“开发者选项”中的“USB调试”。连接后设备通常会弹窗请求“允许USB调试”务必勾选“始终允许”以避免每次连接都弹窗。网络/Wi-Fi调试无需数据线通过TCP/IP网络连接。这非常适合需要频繁插拔或无线测试的场景。设置步骤如下确保设备和电脑在同一局域网。先用USB连接设备执行adb tcpip 55555555是默认端口。这个命令会重启设备上的adbd并监听5555端口。拔掉USB线。获取设备的IP地址通常在设置-关于手机-状态信息里执行adb connect 设备IP:5555。连接成功后即可像USB一样操作。注意网络调试的稳定性依赖于Wi-Fi网络质量。在自动化测试等对稳定性要求高的场景USB仍是首选。此外Android 11及以上版本对无线调试增加了配对码机制需使用adb pair IP:端口并输入屏幕上显示的配对码然后再adb connect。2.3 核心概念Shell与权限层级通过adb shell命令你可以进入设备的Linux Shell环境。在这里你可以执行几乎所有的Linux命令如ls,cd,cat,ps等。但关键点在于权限非root Shell ($)这是普通用户权限。你只能访问应用沙盒和数据分区/data/data/中属于当前用户的应用数据无法访问系统分区或修改系统设置。root Shell (#)这是超级用户权限。可以访问和修改整个文件系统包括只读的/system分区。要获得root权限通常需要设备已解锁Bootloader并刷入了Magisk等root管理工具然后在adb shell中执行su命令。重要提示绝大多数消费级手机出厂系统无法直接adb rootadb root命令通常仅在自定义ROM或部分工程测试机上有效。理解这些底层原理能让你明白为什么有些命令需要root而有些不需要为什么有时候连接不上以及当命令执行失败时应该从哪个环节开始排查。3. 设备管理与基础操作命令详解这是使用ADB的第一步也是最基础、最常用的一组命令关乎你能否与设备正常“对话”。3.1 设备连接与状态查询adb devices这是你的“望远镜”。列出当前所有连接到电脑的Android设备和模拟器。输出示例List of devices attached emulator-5554 device 9ABCDEF012345678 unauthorized 192.168.1.100:5555 devicedevice设备已连接且授权调试。unauthorized设备已连接但未在手机上点击“允许USB调试”授权。去手机屏幕上点“确定”吧。offline设备连接异常adbd进程可能无响应。尝试重插USB、重启adbd或设备。adb get-state快速获取指定设备的状态device,offline,unknown。adb get-serialno获取设备的序列号在有多台设备时用于精确指定目标。多设备操作当连接了多台设备时任何命令都需要通过-s 设备序列号来指定目标。例如adb -s emulator-5554 shell。如果不指定adb会报错error: more than one device/emulator。3.2 应用包管理核心命令应用安装、卸载、查看是测试和开发中的日常。adb install [-lrtsdg] apk路径安装应用。-l锁定应用Forward lock。-r覆盖安装保留数据。这是最常用的参数用于应用升级测试。-t允许安装测试APK。-s安装到SD卡现在很少用了。-d允许版本降级安装。-g授予APK清单文件中声明的所有运行时权限。Android 6.0 (API 23) 及以上版本必备参数否则安装后需要手动在设备上点授权。adb uninstall [-k] 包名卸载应用。包名如com.example.app。如何获取包名后面会讲。-k卸载应用但保留数据和缓存目录。这在测试数据清理或特定场景下很有用但通常我们完全卸载时不加此参数。adb shell pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [过滤器]列出应用包名。这是pm(Package Manager) 工具的命令。-f显示关联的APK文件路径。-3只显示第三方应用。-s只显示系统应用。-i同时显示安装来源Installer。过滤器可以模糊搜索如adb shell pm list packages | grep tencent查找腾讯系应用。实操心得adb install -r -g是我在自动化测试脚本中的标准安装姿势确保应用总能获得所需权限。而adb shell pm path 包名能快速定位一个已安装应用的APK在设备上的具体存放路径通常在/data/app/...或/system/app/...对于提取APK进行分析非常有用。3.3 文件传输与操作adb push 本地路径 设备路径将电脑文件推送到设备。adb pull 设备路径 [本地路径]将设备文件拉取到电脑。如果省略本地路径则拉取到当前命令行目录。路径注意事项设备路径如果包含空格需要用引号括起来如adb push my file.txt /sdcard/Download/。向/sdcard/内部存储或/storage/emulated/0/同上推送文件通常不需要root权限。但向/data/local/tmp推送可能需要这个目录常用于临时存放测试脚本或工具。使用adb shell进入后可以用cp,mv,rm,chmod等Linux命令直接操作设备文件比push/pull更灵活。常见问题执行adb push时提示failed to copy ...: Permission denied。这通常是因为目标目录没有写权限。尝试推送到/sdcard/目录下或者先adb shell进去用su提权后再用cat或dd命令间接写入。4. 调试与信息获取命令实战这部分命令是定位问题、分析应用行为的关键尤其对于开发和测试人员。4.1 日志抓取与分析adb logcat这是最重要的调试命令用于查看设备系统日志。但直接使用会信息爆炸。adb logcat -v time显示每条日志的详细时间戳。adb logcat -v threadtime显示时间、进程/线程ID格式清晰推荐使用。adb logcat *:W只显示警告Warning及以上级别的日志过滤掉冗长的Verbose和Debug信息。adb logcat -s TAG只显示特定标签TAG的日志如adb logcat -s MyApp。adb logcat -c清空当前的日志缓冲区。adb logcat -d log.txt将当前缓冲区中的所有日志导出到电脑的log.txt文件中然后退出。常用于一次性抓取。高级用法按进程过滤。首先通过adb shell ps | grep 包名找到目标应用的进程IDPID例如PID是12345。然后使用adb logcat --pid12345就可以只抓取该进程的日志非常纯净。adb bugreport生成一个完整的错误报告zip包包含系统状态、日志、堆栈跟踪等信息。文件较大但分析复杂系统性问题时是宝藏。生成后会自动拉取到电脑当前目录。4.2 系统状态与性能监控adb shell dumpsys这是一个信息宝库可以dump出几乎所有系统服务的状态。adb shell dumpsys activity activities查看当前Activity栈信息对于分析页面跳转问题至关重要。adb shell dumpsys meminfo 包名或PID查看指定应用的内存使用详情包括Java堆、Native堆、PSS等。adb shell dumpsys cpuinfo查看CPU占用情况。adb shell dumpsys battery查看电池状态还可以通过adb shell dumpsys battery set level 50模拟电量变化需要root。adb shell dumpsys package 包名查看某个应用的完整安装信息包括版本号、权限、组件等。adb shell top实时查看进程的CPU和内存占用情况类似于Linux的top命令。按q退出。adb shell procrank查看进程的内存占用排名VSS, RSS, PSS, USS。这个命令需要设备有procrank可执行文件通常需要root权限或工程机。4.3 输入模拟与事件注入adb shell input模拟各种输入事件。adb shell input text HelloWorld在当前焦点输入框输入文本不支持中文。adb shell input keyevent 键值模拟按键如KEYCODE_HOME3KEYCODE_BACK4KEYCODE_ENTER66。可以通过adb shell input keyevent 3模拟按下Home键。adb shell input tap x y在屏幕坐标(x, y)处模拟点击。adb shell input swipe x1 y1 x2 y2 [duration]从(x1,y1)滑动到(x2,y2)可指定持续时间毫秒。坐标获取可以通过开发者选项中的“指针位置”功能在屏幕上实时查看坐标。对于自动化脚本更可靠的方式是使用UI Automator等工具基于控件属性定位而非绝对坐标。adb shell screencap -p /sdcard/screen.png截取屏幕截图并保存到设备。adb shell screenrecord /sdcard/demo.mp4录制屏幕默认最多180秒按CtrlC停止。录制视频对于提交Bug或演示操作流程非常有用。5. 高级功能与自动化脚本集成当基础命令玩转后就可以组合它们实现一些高级功能和自动化。5.1 无线调试与端口转发adb tcpip 端口如前所述将设备监听模式切换到TCP/IP指定端口。adb connect 主机:端口连接网络设备。adb disconnect 主机:端口断开网络连接。adb forward 本地端口 设备端口端口转发。例如adb forward tcp:6100 tcp:7100将电脑的6100端口数据转发到设备的7100端口。这常用于在电脑上通过本地浏览器调试设备上的WebView内容或者让电脑上的IDE连接设备上的调试服务。adb reverse 设备端口 本地端口反向端口转发Android 5.0。将设备端某个端口的请求转发到电脑的端口。这在开发时特别有用比如设备上的应用需要访问电脑上运行的本地开发服务器如React Native packager可以执行adb reverse tcp:8081 tcp:8081。5.2 Shell命令的进阶用法直接在adb shell后接命令可以让命令在设备上执行后立即返回结果到电脑终端无需进入交互式Shell。例如adb shell ls /sdcard/列出设备sdcard目录。adb shell pm clear 包名清空指定应用的所有数据相当于“恢复出厂设置”该应用。测试数据清理的利器。adb shell am start -n 包名/Activity全限定名启动一个Activity。例如adb shell am start -n com.android.settings/.Settings。adb shell am force-stop 包名强制停止一个应用。组合技示例一键清理并重启应用adb shell pm clear com.example.myapp adb shell am start -n com.example.myapp/.MainActivity这个组合在自动化测试的初始化环节非常常用。5.3 集成到脚本与自动化流程ADB命令是Android自动化测试无论是单元测试、UI测试还是Monkey测试的基石。它们可以轻松地被集成到Shell脚本、Python脚本或CI/CD如Jenkins流水线中。一个简单的自动化测试片段Shell脚本#!/bin/bash # 1. 连接设备 adb connect 192.168.1.100:5555 # 2. 卸载旧版本如果存在 adb uninstall com.example.testapp # 3. 安装新APK adb install -r -g app-debug.apk # 4. 授予额外权限如果需要 adb shell pm grant com.example.testapp android.permission.ACCESS_FINE_LOCATION # 5. 启动应用 adb shell am start -n com.example.testapp/.MainActivity # 6. 等待并抓取日志 sleep 2 adb logcat -d --pid$(adb shell pidof -s com.example.testapp) startup.log # 7. 执行Monkey测试 adb shell monkey -p com.example.testapp --throttle 100 -v 500注意事项在自动化脚本中务必加入错误检查和重试机制。例如在执行关键命令后检查其返回值$?在Shell中为上一条命令的退出状态0表示成功如果失败则记录日志并尝试恢复操作或退出。6. 常见问题排查与实战技巧实录即使命令背得再熟实战中依然会踩坑。这里记录了一些高频问题和解决思路。6.1 连接类问题问题adb devices显示unauthorized。排查检查手机屏幕是否有“允许USB调试”的弹窗点击确认。如果之前点过但无效尝试在开发者选项里“撤销USB调试授权”然后重新插拔。进阶有时是电脑上的RSA密钥指纹不匹配。可以删除电脑用户目录下的.android/adbkey和.android/adbkey.pub文件Linux/Mac在~/.android/Windows在C:\Users\用户名\.android\然后重试。注意这会清除所有已授权设备的记录。问题设备列表为空或反复掉线。排查1 - 数据线换一根确认能传输数据不只是充电的USB线。这是最常见的原因。排查2 - 驱动在Windows上确保安装了正确的USB驱动。可以尝试使用Google官方USB驱动或手机厂商提供的驱动。排查3 - 进程冲突关闭电脑上可能占用5037端口的程序如其他Android模拟器、手机助手。用netstat -ano | findstr :5037(Windows) 或lsof -i :5037(Mac/Linux) 查看。排查4 - 重启大法依次尝试adb kill-server-adb start-server重启手机重启电脑。6.2 命令执行类问题问题adb install失败提示INSTALL_FAILED_INSUFFICIENT_STORAGE。排查设备存储空间不足。清理设备空间或使用adb shell pm trim-caches 大小需要root来清理缓存文件。问题adb shell执行某些命令提示Permission denied。分析权限不足。分两种情况文件系统权限尝试操作/system等受保护目录的文件。需要root权限先执行su。SELinux权限在较新Android版本上即使root了SELinux策略也可能阻止操作。命令提示可能包含avc: denied。临时关闭SELinux审计仅限调试有安全风险adb shell setenforce 0。查看状态adb shell getenforce。问题logcat看不到自己应用的日志。排查1 - 日志级别默认是Verbose可能被其他日志淹没。使用adb logcat -s YourAppTag或按PID过滤。排查2 - 应用未开启调试确保应用AndroidManifest.xml中的application标签设置了android:debuggabletrueDebug构建默认是trueRelease构建是false。排查3 - 缓冲区有些日志可能写入其他缓冲区如events,radio。尝试adb logcat -b all查看所有缓冲区。6.3 效率工具与技巧别名Alias在~/.bashrc或~/.zshrc中为常用命令设置别名极大提升效率。alias adbdadb devices alias adbiadb install -r -g alias adbuadb uninstall alias adblcadb logcat -c alias adbldadb logcat -d -v threadtime alias adbsadb shell使用adb wait-for-device在脚本中这个命令会阻塞直到有设备连接上来。可以确保后续命令在设备就绪后才执行。组合命令与管道利用Shell的管道功能。例如一键清除所有第三方应用日志adb logcat -c adb shell pm list packages -3 | cut -f 2 -d : | xargs -L1 adb shell pm clear警告此命令会清空所有第三方应用数据慎用。备份与还原已弃用但需了解adb backup和adb restore命令在较新Android版本中已基本失效不应再作为主要备份手段。应用数据备份应考虑各应用自带的云同步或使用需要root权限的第三方工具如Titanium Backup。掌握ADB不仅仅是记住命令更是理解Android系统与外界交互的桥梁。从简单的文件传输到复杂的系统调试从手动操作到自动化脚本这套工具链的熟练度直接体现了你对Android平台的理解深度和问题解决效率。希望这份融合了原理与实战的总结能成为你手边常备的利器让开发和调试工作更加得心应手。