1. 为什么每个测试工程师都要掌握ADB命令?
作为一名在移动测试领域摸爬滚打多年的老手,我可以很负责任地说:ADB(Android Debug Bridge)是测试工程师的瑞士军刀。记得刚入行时,我花了整整两周才搞明白为什么同事能5分钟定位的问题,我却要折腾半天——差距就在于对ADB命令的掌握程度。
ADB的本质是Android系统与PC端通信的桥梁。通过这个命令行工具,我们可以绕过UI界面直接与设备底层交互。在自动化测试、性能调优、异常排查等场景中,熟练使用ADB往往能事半功倍。比如:
- 快速安装/卸载测试包(比手动点击快10倍)
- 获取系统日志定位崩溃原因
- 模拟各种用户操作(按键、滑动等)
- 批量操作多台设备
重要提示:使用ADB前需确保设备已开启USB调试模式。在开发者选项中勾选"USB调试",连接电脑时选择"文件传输"模式。
2. 环境配置与基础校验
2.1 搭建ADB运行环境
我推荐直接下载Android SDK Platform Tools(约10MB),解压后即可使用,无需完整SDK。下载地址为官方开发者网站(建议用Chrome访问避免下载到第三方修改版)。解压后建议将platform-tools目录添加到系统PATH环境变量:
bash复制# Windows示例(永久生效):
1. 右键"此电脑" → 属性 → 高级系统设置
2. 环境变量 → 系统变量Path → 编辑
3. 添加platform-tools完整路径如:C:\android\platform-tools
验证安装是否成功:
bash复制adb version
# 应显示类似:Android Debug Bridge version 1.0.41
2.2 设备连接问题排查
新手最常遇到"adb devices无设备"的问题,按以下步骤排查:
- 检查USB线是否支持数据传输(有些充电线只有电力传输)
- 设备端是否弹出"允许USB调试"的授权对话框(必须勾选)
- 电脑驱动是否正常(设备管理器查看是否有黄色感叹号)
- 尝试更换USB接口(特别是USB3.0可能兼容性问题)
bash复制# 查看连接状态
adb devices
# 正常应显示设备序列号及状态:
# List of devices attached
# emulator-5554 device
3. 高频核心命令实战
3.1 应用管理命令
安装APK的几种方式对比:
bash复制# 常规安装(会显示安装进度)
adb install app-debug.apk
# 覆盖安装(保留数据)
adb install -r app-debug.apk
# 快速安装(不显示进度)
adb install -t -g --fastdeploy app-debug.apk
# 卸载应用(需要包名)
adb uninstall com.example.app
获取包名的技巧:
bash复制# 查看前台Activity(含包名)
adb shell dumpsys window | find "mCurrentFocus"
# 输出示例:mCurrentFocus=Window{... com.example.app/.MainActivity}
3.2 文件操作命令
设备与PC间文件传输:
bash复制# PC → 设备
adb push local.txt /sdcard/
# 设备 → PC
adb pull /sdcard/remote.txt .
# 查看设备文件
adb shell ls /sdcard/
常见坑点:Android 11+需要申请MANAGE_EXTERNAL_STORAGE权限才能访问/sdcard/下所有文件,建议改用应用专属目录如/sdcard/Android/data/
/。
3.3 调试与日志命令
抓取日志的进阶用法:
bash复制# 基本日志抓取
adb logcat
# 按标签过滤(-s指定tag)
adb logcat -s AndroidRuntime
# 按优先级过滤(*:E表示只显示Error)
adb logcat *:E
# 清空日志缓冲区
adb logcat -c
# 将日志写入文件
adb logcat > log.txt
崩溃日志分析技巧:
- 搜索"Crash"或"Exception"关键词
- 关注"Caused by"后的堆栈信息
- 查看"pid"匹配的进程信息
4. 自动化测试中的妙用
4.1 设备操作模拟
bash复制# 按键事件
adb shell input keyevent 3 # HOME键
adb shell input keyevent 4 # BACK键
adb shell input keyevent 26 # 电源键
# 触摸操作(x y坐标)
adb shell input tap 500 1000
# 滑动操作(起始/结束坐标+时长ms)
adb shell input swipe 300 1000 300 500 200
4.2 性能数据采集
获取CPU占用率:
bash复制adb shell top -n 1 | find "com.example.app"
内存占用检查:
bash复制adb shell dumpsys meminfo com.example.app
4.3 截图与录屏
bash复制# 截图(需Android 4.4+)
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
# 录屏(最长3分钟)
adb shell screenrecord /sdcard/demo.mp4
# 按Ctrl+C停止
5. 高阶技巧与排错指南
5.1 无线调试配置
摆脱USB线的束缚:
bash复制# 先用USB连接执行:
adb tcpip 5555
adb connect 192.168.1.100:5555
# 断开USB后可通过IP连接
adb -s 192.168.1.100:5555 shell
5.2 多设备管理
当连接多台设备时:
bash复制# 查看所有设备
adb devices
# 指定设备执行命令
adb -s emulator-5554 shell
5.3 常见错误解决
问题:adb server版本不匹配
解决方法:
bash复制adb kill-server
adb start-server
问题:INSTALL_FAILED_TEST_ONLY
解决方法:
bash复制adb install -t app-debug.apk
问题:insufficient permissions
解决方法:
- 检查设备授权弹窗
- 重启adb服务
- 在Linux/Mac下可能需要sudo
6. 实战经验分享
在金融类APP测试中,我发现一个隐蔽的内存泄漏问题:通过adb shell dumpsys meminfo发现Activity实例数异常增加,最终定位到是静态Context引用导致。这个案例教会我:
- 不要只看表面现象,要善用ADB深入系统层面观察
- 关键指标要记录基线数据(如正常情况下的内存占用)
- 结合多个命令交叉验证(如meminfo + procstats)
另一个电商项目的教训:用adb install安装测试包时总失败,后来发现是手机存储空间不足(通过adb shell df查看),但错误提示并不直观。现在我的检查清单里一定会包含存储空间检查。
对于Monkey测试,我常用的压力测试命令:
bash复制adb shell monkey -p com.example.app --throttle 100 --ignore-crashes --ignore-timeouts -v 50000
参数说明:
- --throttle:事件间隔(ms)
- --ignore-crashes:崩溃后继续
- -v:详细日志级别
- 50000:事件总数
建议配合adb logcat在另一个终端实时监控日志。
