adb 学习


一、adb 是什么?

  • Android Debug Bridge (adb) 是一种多功能命令行工具,可以和设备通信, 是一个客户端 - 服务器程序 . 简单来说就是 不仅可以操作手机 设备, 还可以用于 app 自动化测试. (操作安卓手机!!!)

二、adb 工作原理

  • 是一个客户端-服务器 (C/S) 程序,包括三个组件:
    • 一个客户端,它发送命令。可以通过发出 adb 命令从命令行终端调用客户端
    • 一个守护进程 ( adb daemon adbd),它在设备上运行命令。守护程序在每个设备上作为后台进程运行。
    • 一个服务端,它管理客户端和守护进程之间的通信,就是接受客户端的指令,把指令转发给移动设备,然后设备识别指令,做出响应, 把结果返回给客户端.
      两条通道:客户端 向 服务端 发送指令、 服务端 和 手机端 (服务端会扫描当前所有设备,某一端口进行通信.
      它通过扫描 5555 到 5585 范围内的奇数端口来定位模拟器,这是前 16 个模拟器使用的范围。当服务器找到一个 adb 守护进程 (adbd) 时,它会建立到该端口的连接。请注意,每个模拟器使用一对顺序端口——一个用于控制台连接的偶数端口和一个用于 adb 连接的奇数端口。例如:模拟器 1,控制台:5554、模拟器 1,adb:5555。 模拟器 2,控制台:5556、模拟器 2,adb:5557. 就是 连接到 adb 端口 5555 的模拟器与控制台监听端口 5554 的模拟器相同
      总结 : 就是客服端 发送给 服务端 指令, 服务端去操作手机设备,执行结果返回给 服务端 , 服务端在返回给客户端.

三、连接手机设备、查看设备状态

模拟机、真机
真机: 选择开发者模式 —》usb 调试 机型不同, 设置不一样
开源模拟器: 模拟真机操作(某一真机的特定版本上开发的)、回归测试/功能测试验证等使用

四、 adb命令

命令组成: adb [-d | -e | -s 设备号 ] 具体命令
-d 当前唯一通过 usb 连接的 android 设备为命令目标
-e 指定当前唯一运行的模拟器为命令目标
-s 指定相应的设备为命令目标!!!
安装/卸载包. 只有一个设备,没有添加其他的 -e 等
.apk文件。 应用宝中下载
普通安装 : adb install <apk路径>. mac 直接找到文件拖拽到终端页面就是显示出路径
请添加图片描述

覆盖安装/代替安装 : adb install -r <apk路径>
请添加图片描述

卸载应用.彻底卸载: adb uninstall 包名
请添加图片描述

卸载应用 . 不删除应用文件,保留缓存数据 : adb uninstall -k 包名
通过 adb shall 进入到手机命令环境
请添加图片描述

出现问题: 没有权限Android adb shell进入data目录,Permission denied 权限被拒绝.
!!!未解决:

五、启动页面

包 : 是安卓应用的唯一标识
活动页 : Android 应用页面,一个页面就是一个Activity. (生命周期:创建 —— 》恢复——》暂停——》停止——》销毁)

获取当前页面名:打开手机微信的页面: (先打开页面)
adb shell “dumpsys window | grep mCurrentFocus”
拿到命令以后,可以知道 [ 包名 / 页面名] 然后要打开这个页面就是:
请添加图片描述

adb shell am start -n [包名 / 页面名]

用户角度:
使用时先点击图标,在进入启动页,在进入广告页 ,容易错失信息.所以要获取 启动页的信息: (后打开页面)
adb logcat ActivityManager:I | grep “cmp”
获取空白下面的第一条 cmp 后面的信息.验证是否抓取成功:adb shell am start -n [包名 / 页面名]
错误思想:是从启动页面开始,不是停留在启动页面!!!

六、清理应用缓存

查看系统

  • 查看目录结构 : adb shall ls
  • 退出: exit
  • 查看系统当前日期 : adb shell date
  • 查看系统 cpu 使用情况: adb shell cat /proc/cpuinfo
  • 查看系统内存使用情况: adb shell cat /proc/meminfo

查看应用列表

  • 显示所有应用 : adb shell pm list packages

  • 显示系统自带应用 : adb shell pm list packages -s

  • 自己安装的 : adb shell pm list packages -3

  • 清除应用缓存数据 : adb shell pm clear <包名>

七、 设备与电脑传输文件

电脑到手机上传输(电脑往外推) :

adb push 电脑路径 设备路径
adb shell 进入到手机环境, 操作到 sdcard (相当于外部外接的一个 sd 卡).
请添加图片描述

查看: adb shell ls /sdcard/

手机文件拉取下来 :

adb pull 设备路径 电脑路径
例如手机有错误截图 日志需要在电脑上查看, 先模拟在手机 scared 上创建一个日志,如下图:
请添加图片描述
请添加图片描述
请添加图片描述

八、 查看系统日志

日志级别:

V 明细 verbose 最低优先级 会打印所有的日志
D 调试 debug
I 信息 info
W 警告 warn 代码可能会有问题,抛出 warn 级别日志
E 错误 error
F 严重错误 fatal
S 无记载 silent 最高优先级,不输出任何内容

查看日志:

打印默认日志数据 : adb logcat
请添加图片描述

格式: 时间。 进程号。 线程号。级别。tag。 massage
安卓手机有日志缓存,会保存最近一段时间(多久?)的日志,当日志量超过缓存数就会被覆盖
(打开手机开发者选项,可以看到有个选项叫做“日志记录器缓冲区大小”,默认是256K。由上文所述,日志是循环写入环形缓冲区的。在通常情况下,写满时最旧的日志会被删除以给新输出的日志留内存空间。设置的越大就可以保存离当前时间越久远的日志。但相对地,设置的越大对内存的占用也越大,内存的可用空间也越少,请酌情修改)

使用不同颜色来打印每个优先级 : adb logcat -v color
将日志输出到文件中 : adb logcat -f <文件地址。手机端的>。 可以通过 pull 上传到电脑查看.
保存日志到电脑文件上 : adb logcat > ~/Downloads/android.log. > 表示重定向
清理已缓存的日志 : adb logcat -c

根据条件过滤日志 :

打印 warn 及以上级别的日志 : adb logcat ":w"
打印标签 ActivityManager (管理所有页面的标签)日志 : adb logcat ActivityManager:D '
:S’ 打印所有
标签为 ActivityManager 的文件, 并只有 debug 级别以上的日志。’:S’ 表示把所有标签设置成为 silent 静默模式, 就可以只展示想要输出的一些日志。
加颜色 : adb logcat -v color ActivityManager:D '
:S’

常见 Crashes/ANRs 日志分析 链接 : https://developer.android.com/topic/performance/vitals/crash

九、 adb 模拟按键 (音量键 、放大、缩小、手机返回、home键、点击、滑动、返回键)

1、打开 指针位置设置: 手机开发者模式 —》输入—》指针位置。打开

2、执行 adb shell input
模拟点击事件 : adb shell input tap x坐标 y坐标 (注意手机屏幕上方会有坐标显示 左上角 0,0点 右下角 最大点)
模拟输入事件: adb shell input text 输入内容英文 ,但是需要先把光标放到输入框
模拟滑动事件: adb shell input swipe 起点x 起点y 终点x 终点y 2000 滑动很快 (2000ms 时间 要想准确,时间要慢)

模拟手机按键。查看所有按键 : https://developer.android.com/reference/android/view/KeyEvent
返回键 : adb shell input keyevent 4
home键 : adb shell input keyevent 3 应用在后台运行
音量放大 : adb shell input keyevent 24
音量放小 : adb shell input keyevent 25

十、 查看应用的性能指标 (cpu、内存、电量、流量)

查看当前系统 CPU 使用情况 : adb shell dumpsys cpuinfo 是某一时间之内的占有情况
请添加图片描述

内存使用情况

查看当前系统的内存 : adb shell dumpsys meminfo 通过这个情况查看当前应用内存占用率。可以分析 物理内存、虚拟内存的占用量。
查看某个应用的内存 : adb shell dumpsys meminfo 应用名。 通过定期采集数据 来分析代码当中是否会有内存问题 例如内存泄漏 ( 内存长期占有量较高,没有及时回收 )

top 命令 : linux 使用 top 命令来获取性能指标的 ,安卓也可用
adb shell top 来获取各个系统进程占有情况(实时)
过滤 某个包的性能指标 : adb shell top | grep 包名
固定时间 每隔 1 s : adb shell top -d 1 | grep 包名

总结 : 都能获取 cpu 使用情况 ,二者区别 : adb shell dumpsys cpuinfo 可以获取一个时间段内的 ,一个平均值,可能不太准确, top 是实时的,更加精确.

查看电池电量 : adb shell dumpsys battery
请添加图片描述

十一、 adb 实现 monkey 压力测试。

1、什么是 monkey
是 google 提供的一个用于 稳定性与压力测试的命令行工具

2、为什么要对 app 进行压力测试
当大量用户同时访问网站服务器时,能够保证接口在大流量保持稳定,
随机性 : 随机去点击,
完整性 : 尽可能多的去点击多页面,实现一个更完整的测试
持续性 : 设置很大的事件数,就可以持续性的操作设备,只需收集日志去分析

3、monkey 命令格式
查看 : adb shell monkey

4、monkey 基本用法
首先确定手机设备连接,获取 app 包名.
执行命令 : adb shell monkey 参数 { 随机发送事件数}

添加事件数 : adb shell monkey 事件数
打印详细日志 : adb shell monkey -v 事件数。 -vv 更加详细的日志 -vvv 最全面的日志
停止条件 : 指令执行完成。 遇到崩溃/异常 杀掉进程
ctrl + c 只是在电脑上关掉了,杀掉进程:adb shell。 ps | grep monkey。 kill -9 进程号(第一个数)
运行某个包(对某软件测试) : adb shell monkey -p 包名 事件数
运行多个包 : adb shell monkey -p 包名 -p 包名 … - vvv 事件数
制定事件间隔时间 : --throttle 时间/ms monkey不管是否页面加载出来就开始操作,所以需要等待响应,更贴用户使用
设置种子数 : -s 种子数 指令是随机的,如有崩溃 复现较难.如果种子数一致,下一次会按照复现(相当于random理解)。
查看种子数就找执行后的结果中第一行 seed=…
包括 11 种事件:
请添加图片描述

设置事件比例 : --pct-touch 80 会默认分配 ,但是 比如某 app 点击事件较多,就可以设置点击比例大一点 80% 不超100%
忽略异常 : monkey就是想长时间运行, 可以在有异常的时候继续执行,如果遇到异常就可以保存到日志中
请添加图片描述

保存日志 :
法一 : adb shell monkey 100 后面加 > 文件名字.log。查看: cat 文件名.log 有大量无用日志,占用空间
法二 : adb logcat -v time ‘*:E’ > monkey.log 获取 error 级别日志

练习:
请添加图片描述

猜你喜欢

转载自blog.csdn.net/ccyzq/article/details/123046687
adb