作为Android测试工程师,常会遇到APP卡死、多设备批量操作繁琐、性能数据获取不精准、日志抓取不完整等问题,而ADB(Android Debug Bridge)是解决这些问题的高效工具,本文将详细介绍ADB的基础使用及各类常用核心命令。
一、ADB是什么?简单来说,它是“桥梁”
ADB全称Android Debug Bridge(安卓调试桥),是连接电脑与安卓设备/模拟器的桥梁,可在电脑端通过命令行对连接设备执行安装应用、拷贝文件、运行命令、抓取日志等操作。
准备工作
- 开启手机的开发者选项:连续点击“设置”->“关于手机”中的“版本号”7次;
- 开启USB调试:在“开发者选项”中找到并开启;
- 安装ADB工具:下载Android SDK Platform-Tools或直接搜索“ADB工具包”,将其路径添加到系统环境变量PATH中;
- 连接手机:用USB线连接手机和电脑,在手机上授权调试;
- 验证连接:打开命令行(CMD/Terminal),输入
adb devices,若显示设备序列号且后跟device,则连接成功。
二、ADB核心命令
类别一:设备管理
# 查看已连接设备/模拟器
adb devices
# 指定设备执行命令(多设备时使用)
adb -s <设备号> ... // 示例:adb -s <设备号> install app.apk
# 无线连接设备
adb connect <IP>:端口号 // 摆脱数据线
# 断开无线连接设备
adb disconnect <IP>:端口号
# 重启ADB服务(连接异常时使用)
adb kill-server类别二:应用管理
# 安装APK
adb install <apk路径> // 示例:adb install ~/downloads/demo.apk
# 覆盖安装
adb -r install <apk路径> // 示例:adb install -r demo.apk
# 卸载应用
adb uninstall <包名> // 示例:adb uninstall com.example.demo
# 列出所有应用包名(-3 仅列第三方应用)
adb shell pm list packages // 示例:adb shell pm list packages -3
# 查看应用详细信息(Activity、权限、版本等)
adb shell dumpsys package <包名>
# 启动应用
adb shell am start -n <包名>/<主Activity> // 示例:adb shell am start -n com.demo/.MainActivity
# 模拟系统回收应用进程
adb shell am kill com.example.app如何找包名和Activity?
adb shell pm list packages | grep demo
# 2. 找启动Activity(需先安装应用)
adb shell dumpsys package com.demo.app | grep -A 5 MAIN
# Tips: 如提示grep不是内部或外部命令,替换为findstr
# 同时获取包名&Activity(前提:进入APP首页)
adb shell dumpsys window w | findstr \/ |findstr name=类别三:文件操作 – 拉取日志与截图
# 从设备拉取文件到电脑
adb pull <设备路径> <电脑路径> // 示例:adb pull /sdcard/log.txt ~/Desktop/
# 从电脑推送文件到设备
adb push <电脑路径> <设备路径> // 示例:adb push ~/test.mp4 /sdcard/
# 在设备端截图(需配合pull拉取到电脑)
adb shell screencap -p <路径> // 示例:adb shell screencap -p /sdcard/screen.png 后执行 adb pull /sdcard/screen.png
# 录屏(按 Ctrl+C 停止,需pull拉取)
adb shell screenrecord <路径> // 示例:adb shell screenrecord /sdcard/demo.mp4实战场景:发现一个闪退Bug,立即执行以下命令
# 1. 截图保存现场
adb shell screencap -p /sdcard/crash.png
adb pull /sdcard/crash.png ./
# 2. 保存日志(文件名带时间戳,避免覆盖)
adb logcat -v time > "D:\log%time:~0,2%%time:~3,2%%time:~6,2%.txt"
# 3. 开始录屏准备复现(后台运行)
adb shell screenrecord /sdcard/bug.mp4 &
# ... 执行复现操作 ...
# 按Ctrl+C停止录屏后台进程,拉取录屏文件
adb pull /sdcard/bug.mp4 ./
# 如出现ANR,导出trace/anr文件
adb pull /data/anr d:\trace.txt
adb pull /data/anr d:\anr类别四:系统操作与信息
# 查看/抓取系统日志(带时间戳输出到文件,避免覆盖)
adb logcat // 示例:adb logcat -v time > log.txt
adb logcat -v time > "D:\log\sunnyfit%time:~0,2%%time:~3,2%%time:~6,2%.txt"
# 过滤特定TAG的日志(示例:只看MyApp的Debug以上日志)
adb logcat -s <TAG> // adb logcat -s MyApp:D
# 清空日志(抓取前执行,避免干扰)
adb logcat -c
# 查看应用内存详情(性能测试必备)
adb shell dumpsys meminfo <包名>
# 查看系统属性(示例:查看手机型号)
adb shell getprop // eg:adb shell getprop ro.product.model
# 模拟按键(示例:电源键26、Home键3)
adb shell input keyevent <键值> // eg:adb shell input keyevent 26
# 模拟点击(示例:点击坐标 500,500)
adb shell input tap <x> <y> // eg:adb shell input tap 500 500
# 模拟输入文本
adb shell input text "hello"
# CPU信息-监控系统负载
adb shell dumpsys cpuinfo
# 获取设备WiFi IP
adb shell ifconfig | findstr "inet addr"类别五:其它实用命令
# 设置全局代理(适用于Android系统无法进入wifi高级设置代理的场景)
adb shell settings put global http_proxy <IP>:端口号
# 取消全局代理
adb shell settings put global http_proxy :0
# 查询是否设置代理(未设置返回null或0)
adb shell settings get global http_proxy三、实战进阶:构建你的效率工作流
场景一:快速问题排查组合(一键抓取所有证据)
adb bugreport > bugreport.zip &
adb logcat -v time > logcat.log &
adb shell screencap -p /sdcard/error.png
adb pull /sdcard/error.png ./THE END








