16、adb工具
安装包在百度网盘-安装包-Android环境。
1、adb工作原理
adb包含了三个部分:
adb客户端:用来下发adb的指令工具
server客户端:adb.exe执行之后的进程,表示adb的服务端,通过服务端与手机上adb守护进程进行通信
adb守护进程:随之Android系统启动而启动,当Android系统关闭后关闭。
2、adb 连接
https://blog.csdn.net/weixin_43927138/article/details/90477966
连接方式有三种方法:
一、WiFi连接(手机与pc同一个局域网下)
与电脑在同一局域网内,Android设备连接WiFi,然后adb命令#adb connect <设备IP>
二、USB数据线连接
确保Android 设备的开发者选项和 USB 调试模式已开启:
「设置」-「开发者选项」-「Android 调试」查看。开发者选项,点允许usb调试,然后就可以连上电脑了cmd框键入#adb devices命令查看设备连接情况
三。· 无线连接(需要借助 USB 线)
除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接,一定范围内摆脱 USB 连接线的限制啦!
操作步骤:
将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。将设备与电脑通过 USB 线连接。
应确保连接成功(可运行 adb devices 看是否能列出该设备)。
让设备在 5555 端口监听 TCP/IP 连接:
开发者选项,点允许usb调试adb tcpip 5555找到设备的 IP 地址。一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到。
通过 IP 地址连接设备:命令框#adb connect <ip>出现#connected to 192.168.31.109:5555,表示连接成功。
第一步:Android设备开启USB调试,并且通过USB线连接到电脑。
第二步:在终端执行以下命令”adb tcpip 5555“。
第三步:在终端执行以下命令”adb connect 192.168.1.110“(192.168.1.110为Android设备的IP地址)。此时拔出USB线,应该就可以adb通过wifi调试Android设备。
3、adb常用命令
* adb devices 查看手机设备ID名称及状态
如果出现offline,则需重启adb服务
* adb start-server 启动服务
* adb kill-server 关闭服务
4、获取包名和界面名
包名:每个APP都有唯一的 包名。通过包名来区分不同的APP。
界面名(启动名):相当于web页面中的链接地址,在APP中,每个界面都有一个名字。自动化中,需要通过两者来启动APP。
操作步骤:adb命令
在手机或者模拟器打开APP
linux/macos命令1 :adb shell dumpsys window windows | grep mFocusedApp
linux/macos命令2:adb shell dumpsys window | grep “usedApp”
windows 命令1:adb shell dumpsys window windows | findstr mFocusedApp
windows 命令2:adb shell dumpsys window | findstr “usedApp”
包名/界面名
* adb shell pm list packages:查看手机上应用的packageName
也可以通过aapt获取app的包名和界面名
5、安装卸载APP
* app安装: adb install <路径/app安装包名称>
* app卸载: adb uninstall <包名>
6、上传下载文件
* 上传 将电脑上的文件上传到手机:adb push <电脑上的文件路径> <手机的路径>
例:adb push ./monkey.txt /sdcard
* 下载 将手机上的文件下载到电脑: adb pull <手机的路径> <电脑的路径>
例: adb pull /sdcard/monkey.txt D:\opt
7、查看日志信息
为什么要获取日志信息:用来给开发定位问题
* adb logcat > log1.log:查看手机相关日志信息,并写入log1.log文件中。(运用>管道符写入文件,如果是>>则为追加)
8、测试app的启动速度(性能测试)
* 测试APP启动速度的命令:
adb shell am start -W 包名/界面名
先获取APP的包名/界面名,然后关闭应用进程。后执行上述命令,此时会打开APP,同时获取如图三个时间。
时间
需要关注TotalTime,一般多次测试,取平均值。
9、内存信息,内存泄漏
* 查看是否存在内存泄漏情况-堆空间没有被回收
adb shell dumpsys meminfo 包名
* 查看是否存在内存泄漏情况
adb shell dumpsys cpuinfo 包名
10、稳定性测试(8小时)
* monkey集成在adb工具中,主要做稳定性测试,monkey是通过java语言编写的一种稳定性测试工具,主要用来测试APP会不会出现crash(崩溃)的情况。
相当于让一只猴子来随机操作APP,所有的操作都有可能出现,长时间操作来测试APP会不会出现问题。
—monkey常用参数
* -p参数 对指定app进行随机操作 (-p后为包名)
adb shell monkey -p com.baidu.homework 100 (100次随机事件)
* -v参数 表示记录信息的级别
level 0:adb shell monkey -p com.baidu.homework -v 100 默认级别
level 1:adb shell monkey -p com.baidu.homework -v -v 100 打印出来的信息比较详细,建议使用。
level2:adb shell monkey -p com.baidu.homework -v -v -v 100 打印出来的信息会更多,会显示出其他程序运行的信息。
* -s参数 用于指定伪随机数。如果两次的伪随机数相同,那么两次操作步骤,流程,操作事件完全一样。主要作用,就是用来复现上次的问题。
例:adb shell monkey -p com.baidu.homework -v -s 10 100
* --throttle参数 用于指定随机事件的间隔时间,单位是毫秒。
例:adb shell monkey -p com.baidu.homework -v -v --throttle 3000 -s 10 100
组合使用:
adb shell monkey -p com.baidu.homework --throttle 500 --pct--touch --pct-motion 50 -v -v -s 100 100 >log.log
--pct--touch 10 触摸(10表示整个随机事件中,触摸事件占比10%)
--pct--motion 50 滑屏(50表示整个随机事件中,滑屏事件占比50%)
–ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到crash或者timeout的情况时忽略掉,一般不设置,出现crash或者timeouts时,Monkey测试会终止。这里是防止Monkey测试终止
例:adb shell monkey -p com.baidu.homework -v -v -s 100 --throttle 500 –ignore-crashes --ignore-timeouts 1000 (包名及前部分固定,最后的次数固定,中间的可以调换位置)
level 1
日志分析:
# 如果在日志里面出现了ANR(application not responsing),说明程序出现了假死。
# 如果日志中出现了Exception,可能程序崩溃。
11、adb手势操作
—手势操作命令
* 模拟点击事件: adb shell input tap x,y (x,y为坐标)
* 模拟滑屏事件:adb shell input swipe startx,starty,endx,endy ((startx,starty)为起始点位置,(endx,endy)为终点位置)
* 模拟键盘操作:adb shell input keyevent 键值 (3表示HOME键;4表示返回键;66表示回车键)
* 模拟输入操作:adb shell input text 内容 (输入前需确保光标在输入框中;且输入内容不能为中文)
12、多个设备的注意点
* 如果出现offline的设备(如下图),记得重启adb服务;
* 如果电脑上面连接了多个模拟器或者手机,那么需要加上一个参数 -s device_name
如: adb -s emulator-5554 shell input keyevent4
12、logcat
学自:https://blog.csdn.net/weixin_35825766/article/details/79855956
1、logcat命令格式:
[adb] logcat [<option>] … [<filter – spec>] …
PC端使用:
adb logcat
shell模式下使用:
logcat
logcat参数说明
举例
2、logcat缓冲区
android log输出量巨大,特别是通信系统的log,因此,android把log输出到不同的缓冲区中,目前定义了四个log缓冲区:
1)Radio:输出通信系统的log
2)System:输出系统组件的log
3)Event:输出event模块的log
4)Main:所有java层的log,遗迹不属于上面3层的log
获取缓冲区命令:-b
如:adb logcat –b radio
adb logcat –b system
3、logcat格式化输出
日志消息包含一个元数据字段,除了标签和优先级,您可以修改输出显示一个特定的元数据字段格式的消息。为此,您使用-v选项来指定一个支持的输出格式。一下为支持的格式:
当logcat开始,指定想要输出格式-v选项:
[adb] logcat [-v <format>]
adb logcat –v thread
只能指定一个输出格式-v
4、logcat优先级
优先级使用字符标识,以下优先级从低到高
V –Verbose(最低优先级)
D – Debug
I – Info
W – Warning
E – Error
F – Fatal
S – Silent
为了减少不想要日志的输出,可以建立一个过滤器
过滤语法:tag:priority
//过滤TAG为ActivityManager输出级别大于I的日志与TAG为MyApp输出级别大于D的日志
adb logcat ActivityManager:I My App:D *:S
adb logcat *:W
//设置过滤级别为W以上
如果用的比较多可以设置环境变量:
export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D*:S"
5、显示时间
adb logcat -v time -s appname:E>d:/1.log
-v 显示日志格式 -v time 以时间为显示格式
-s 默认过滤,不显示默认tag。系统把tag的默认过滤级别是设置为Verbos,tag需要显示。如果设置-S等同于*:V
appname:E 显示appname操作中优先级大于等于“error”的日志