大数跨境

【ADB核心场景命令】:用 20% 命令解决 80% 问题

【ADB核心场景命令】:用 20% 命令解决 80% 问题 51Testing软件测试网
2026-09-30
1
导读:阅读本文你将收获:• 什么是 ADB?• 测试人为什么必须会 ADB;• 8 大场景 ADB 命令合集;• ADB 高频命令速查表。
点击蓝字,关注我们

 

ADB,常被称作测试工程师的“问题定位放大器”。但一提到它,很多测试同学心里会冒出三个疑问:

一是:ADB 是 Android 开发者的日常工具,测试工程师真的用得到吗?
二是:不少测试对 ADB 的认知还停留在“装包工具”,它还有哪些被忽略的价值?
三是:命令收藏了一大堆,真到排查问题时,却不知道该用哪一条。

今天,我们不堆“ADB 命令全攻略”,而是从“为什么测试必须会 ADB”出发,按“场景—命令—输出解读—避坑”的思路,梳理一份测试工程师真正用得上的 ADB 高频命令汇总。目标只有一个:用 20% 的命令,解决 80% 的测试问题。

阅读本文你将收获:

  • • 什么是 ADB?
  • • 测试人为什么必须会 ADB;
  • • 8 大场景 ADB 命令合集;
  • • ADB 高频命令速查表。

一、什么是 ADB?

ADB 全称 Android Debug Bridge,是电脑和 Android 设备之间的调试桥。

它由三部分组成:

组件
位置
作用
Client
你的电脑
接收你输入的 ADB 命令
Server
你的电脑
管理客户端与设备通信,默认监听 5037 端口
Daemon
Android 设备
真正执行命令并返回结果

你不需要背架构,但要知道:很多连接问题不是手机坏了,而是某一环断了。所以 adb kill-server、adb start-server、重新插拔、重新授权,往往能解决大半问题。


二、测试人为什么必须会 ADB?

ADB 不只是开发工具,测试日常中大量问题都离不开它:

  • • 新包安装失败,要知道是签名、版本还是测试包问题;
  • • 偶现闪退,要自己先抓日志,而不是只说“它崩了”;
  • • 复现 Bug,要清数据、切环境、固定网络;
  • • 做稳定性,要跑 Monkey、看崩溃和 ANR;
  • • 做性能初筛,要采内存、CPU、卡顿数据;
  • • 接自动化或 CI,底层也常通过 ADB 操作设备。

ADB 不是开发专属,它是测试工程师的问题定位工具、环境控制工具和效率工具。


三、8 大场景 ADB 命令合集

场景 1:连接设备

场景:设备连不上、多设备切换、无线调试。


   
   
   
   
    
   
   
   
   adb devices -l
adb kill-server
adb start-server
adb reconnect
adb -s <serial> shell

无线连接:


   
   
   
   
    
   
   
   
   adb tcpip 5555
adb connect 手机IP:5555

Android 11+:


   
   
   
   
    
   
   
   
   adb pair 手机IP:配对端口
adb connect 手机IP:连接端口

输出解读:

  • • device:正常;
  • • unauthorized:手机未授权 USB 调试;
  • • offline:设备离线,重新插拔或重启 ADB;
  • • no devices:检查 USB 调试、驱动、数据线;
  • • 多设备时,必须用 -s <serial> 指定设备。

避坑:

  • • 公司网络可能隔离手机和电脑,无线连不上不一定是 ADB 问题;
  • • 多设备不指定序列号,命令可能作用到错误设备;
  • • 不要在未授权设备上乱操作。

场景 2:装包与包管理

场景:拿到新包,安装、覆盖、清数据、启动、停止。


   
   
   
   
    
   
   
   
   adb install app-release.apk
adb install -r app-release.apk
adb install -t app-release.apk
adb install -d app-release.apk
adb install -g app-release.apk

adb shell pm list packages -3
adb shell pm path com.example.app
adb shell pm clear com.example.app
adb shell am start -n com.example.app/.MainActivity
adb shell am force-stop com.example.app
adb uninstall com.example.app

输出解读:

  • • Success:安装成功;
  • • INSTALL_FAILED_UPDATE_INCOMPATIBLE:签名不一致,先卸载旧包;
  • • INSTALL_FAILED_VERSION_DOWNGRADE:版本降级,可加 -d;
  • • INSTALL_FAILED_TEST_ONLY:测试包限制,可加 -t;
  • • pm clear 后应用像首次安装,登录态、缓存、数据库都会清掉。

避坑:

  • • 需要保留现场时,不要随手 pm clear;
  • • 覆盖安装不一定能复现首次安装问题;
  • • 包名不要靠猜,用 pm list packages -3 查。

场景 3:抓日志与崩溃定位

场景:偶现闪退、ANR、开发问“日志呢?”


   
   
   
   
    
   
   
   
   adb logcat -c
adb logcat -v time > logcat.log
adb logcat -b crash
adb logcat --pid=$(adb shell pidof -s com.example.app)
adb logcat | grep -E "FATAL|AndroidRuntime|ANR"
adb logcat '*:E'
adb bugreport

输出解读:

  • • FATAL EXCEPTION:Java 层崩溃;
  • • Caused by:真正原因往往在这行;
  • • ANR in:主线程阻塞;
  • • ActivityManager:进程、Activity、ANR 相关信息;
  • • Low Memory Killer:可能被系统杀进程。

避坑:

  • • 先 adb logcat -c 清日志,再复现,否则日志太长;
  • • 带时间戳,方便对齐操作步骤;
  • • adb logcat *E 容易误导,常用写法是 adb logcat '*:E';
  • • 日志、截图、录屏可能含隐私,发出去前脱敏;
  • • 提 Bug 时附:版本、设备、系统、步骤、日志时间点、关键堆栈。

场景 4:模拟用户操作

场景:批量回归、自动解锁、跳过动画、固定环境。


   
   
   
   
    
   
   
   
   adb shell input tap 500 1000
adb shell input swipe 500 1500 500 500 300
adb shell input text "hello"
adb shell input keyevent 3
adb shell input keyevent 4
adb shell input keyevent 26
adb shell wm size
adb shell wm density

关闭动画,提升自动化稳定性:


   
   
   
   
    
   
   
   
   adb shell settings put global window_animation_scale 0
adb shell settings put global transition_animation_scale 0
adb shell settings put global animator_duration_scale 0

输出解读:

  • • tap 基于屏幕坐标;
  • • keyevent 3 是 Home,4 是 Back,26 是电源;
  • • 坐标依赖分辨率,换设备可能失效。

避坑:

  • • input text 对中文和空格支持差,空格可用 %s,中文建议 ADBKeyboard;
  • • 模拟操作适合辅助,不要完全替代 UI 自动化框架;
  • • 改动画、分辨率后记得恢复。

场景 5:Monkey 稳定性冒烟

场景:版本提测前,做基础稳定性冒烟。


   
   
   
   
    
   
   
   
   adb shell monkey -p com.example.app --throttle 500 -v -v -v 10000 > monkey.log

输出解读:

  • • -p:指定包名;
  • • --throttle 500:事件间隔 500ms;
  • • 10000:事件数,不是秒数;
  • • 想跑约 1 小时,事件数约 7200;想跑约 2 小时,约 14400。

查关键错误:


   
   
   
   
    
   
   
   
   grep -E "FATAL|ANR|Exception|Crash" monkey.log

避坑:

  • • 不指定包名可能点到系统设置;
  • • Monkey 适合冒烟和稳定性初筛,不适合验证业务逻辑;
  • • --ignore-crashes、--ignore-timeouts 要谨慎使用,否则可能掩盖问题;
  • • 跑之前最好清数据、固定网络、关闭通知干扰。

场景 6:性能初筛

场景:页面越用越卡,怀疑内存泄漏或 CPU 异常。


   
   
   
   
    
   
   
   
   adb shell dumpsys meminfo com.example.app
adb shell top -n 1 | grep com.example.app
adb shell dumpsys cpuinfo
adb shell dumpsys gfxinfo com.example.app
adb shell dumpsys battery

输出解读:

  • • meminfo:看 PSS Total、Heap Size、Activities、Views;
  • • top / cpuinfo:看 CPU 占用;
  • • gfxinfo:看 Janky frames、90th/95th/99th percentile;
  • • battery:看电量、温度、WakeLock。

避坑:

  • • 单次数据没意义,要前后对比;
  • • 固定设备、版本、场景再比较;
  • • 测试能采数据、描述现象,不一定要定位到代码行。

场景 7:文件、截图、录屏、端口转发


   
   
   
   
    
   
   
   
   adb push local.txt /sdcard/
adb pull /sdcard/log.txt
adb exec-out screencap -p > screen.png
adb shell screenrecord /sdcard/demo.mp4
adb forward tcp:8080 tcp:8080
adb reverse tcp:8080 tcp:8080

输出解读:

  • • push / pull:电脑与设备互传文件;
  • • 截图、录屏:提 Bug 的好证据;
  • • forward:电脑端口转发到设备;
  • • reverse:设备端口反向转发到电脑,常用于抓包、Mock、本地服务调试。

避坑:

  • • Windows 下截图重定向可能乱码,可先存到设备再 pull;
  • • screenrecord 默认最长约 180 秒;
  • • 截图、录屏注意隐私合规。

场景 8:多设备与脚本化


   
   
   
   
    
   
   
   
   adb devices
adb -s 1234567890ABCDEF shell getprop ro.product.model

批量查看设备型号:


   
   
   
   
    
   
   
   
   adb devices | grep device | awk '{print $1}' | while read s; do
  echo "设备:$s"
  adb -s $s shell getprop ro.product.model
done

简单脚本:


   
   
   
   
    
   
   
   
   #!/bin/bash
adb devices
adb install -r app-release.apk
adb shell am start -n com.example.app/.MainActivity
adb logcat -c
adb logcat -v time > logcat.log

避坑:

  • • 多设备必须指定 -s;
  • • CI 中要处理授权、掉线、端口占用;
  • • 包名、路径、序列号尽量参数化。

四、ADB 高频速查表

场景
命令
查看设备
adb devices -l
指定设备
adb -s <serial> shell
安装
adb install -r -t -d app.apk
卸载
adb uninstall com.xxx
清数据
adb shell pm clear com.xxx
启动
adb shell am start -n com.xxx/.MainActivity
停止
adb shell am force-stop com.xxx
清日志
adb logcat -c
抓日志
adb logcat -v time > logcat.log
抓崩溃
adb logcat -b crash
过滤错误
adb logcat '*:E'
点击
adb shell input tap x y
滑动
adb shell input swipe x1 y1 x2 y2 300
输入
adb shell input text "hello"
Monkey
adb shell monkey -p com.xxx --throttle 500 -v -v -v 10000
内存
adb shell dumpsys meminfo com.xxx
CPU
adb shell top -n 1
卡顿
adb shell dumpsys gfxinfo com.xxx
截图
adb exec-out screencap -p > screen.png
录屏
adb shell screenrecord /sdcard/demo.mp4
文件
adb push
 / adb pull
端口
adb forward
 / adb reverse

记住:不要按“全攻略”学 ADB,要按“场景”用 ADB。用 20% 的高频命令,解决 80% 的测试问题。

 


图片
END



图片
点点赞
图片
点分享
图片
点推

【声明】内容源于网络
0
0
51Testing软件测试网
博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
内容 3958
粉丝 0
51Testing软件测试网 博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
总阅读4.1k
粉丝0
内容4.0k