adb的下载安装以及使用

一:adb介绍:

Android Debug Bridge(安卓调试桥) tools。它就是一个命令行窗口,用于通过电脑端与模拟器或者是设备之间的交互。

ADB是一个C/S架构的应用程序,由三部分组成:
运行在pc端的adb client:
命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adb server建立连接后,adb client就可以向ADB servcer发送服务请求;
运行在pc端的adb server:
ADB Server是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADB Server还需要将adb client的请求通过usb或者tcp的方式发送到对应的adbd上;
运行在设备端的常驻进程adb demon (adbd):
程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务。

二:adb下载及安装

1.下载adb压缩包去解压即可:链接:[https://pan.baidu.com/s/1SKu24yyShwg16lyIupO5VA(https://pan.baidu.com/s/1SKu24yyShwg16lyIupO5VA) 提取码:ih0i

(备注:如果下载放入到D盘去解压,打开dos窗口那么就要进入到D盘,然后再去执行adb命令,输入adb查看它是否安装成功)

2.安装Android Studio,它本身带有adb命令,如果配置好的Android Studio 一般都是可以直接调用adb命令的;如果不行,找到adb在SDK里的绝对路径,放入环境变量path中(绝对路径不带入adb.exe)
adb的下载安装以及使用_第1张图片
image.png

adb的下载安装以及使用_第2张图片
image.png
输入adb version 查看版本 可以看出是否安装成功,如下就已经成功了。
image.png
三:adb命令
1.如何查看当前app的包名:

adb shell pm list packages


adb的下载安装以及使用_第3张图片
image.png

adb的下载安装以及使用_第4张图片
image.png

adb的下载安装以及使用_第5张图片
image.png

adb的下载安装以及使用_第6张图片
image.png

adb的下载安装以及使用_第7张图片
image.png

adb的下载安装以及使用_第8张图片
image.png

adb的下载安装以及使用_第9张图片
image.png

adb的下载安装以及使用_第10张图片
image.png

adb的下载安装以及使用_第11张图片
image.png

adb的下载安装以及使用_第12张图片
image.png

adb的下载安装以及使用_第13张图片
image.png

adb的下载安装以及使用_第14张图片
image.png

adb的下载安装以及使用_第15张图片
image.png
四:压力测试工具
1.什么是稳定性测试?

通过随机向待测试的APP发送触摸、滑动、系统按键等事件一段时间,查看app会不会奔溃,能不能维持正常运行。

2.Money是什么?

Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。

Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar

Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

3.Monkey 命令启动方式

a.可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
b.在PC上adb shell 进入Android系统,通过执行monkey {+命令参数} 来进行Monkey 测试
c.在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

通过adb shell mokey -help可以查看命令相关参数:


adb的下载安装以及使用_第16张图片
image.png

adb的下载安装以及使用_第17张图片
image.png
4.具体解释如下:

-s:指定产生随机事件种子值,相同的种子值产生相同的事件序列。如: -s 200

--throttle:每个事件结束后的间隔时间——降低系统的压力(如不指定,系统会尽快的发送事件序列)。如:--throttle 100

--pct-touch:指定触摸事件的百分比,如:--pct-touch 5% , 相关的还有以下option:

--pct-motion (滑动事件)

--pct-trackball (轨迹球事件)

--pct-nav (导航事件 up/down/left/right)

--pct-majornav (主要导航事件 back key 、 menu key)

--pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)

--pct-appswitch (activity之间的切换)

--pct-anyevent (任意事件)

-p:指定有效的package(如不指定,则对系统中所有package有效),一个-p 对应一个有效package, 如:-p com.ckt.asura;

-c:activity必须至少包含一个指定的category,才能被启动,否则启动不了;

--dbg-no-events:初始化启动的activity,但是不产生任何事件。

--hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。

--ignore-crashes:忽略崩溃

--ignore-timeouts:忽略超时

--ignore-security-exceptions:忽略安全异常

--kill-process-after-error:发生错误后直接杀掉进程

--monitor-native-crashes:跟踪本地方法的崩溃问题

--wait-dbg:知道连接了调试器才执行monkey测试。

例子:

adb shell monkey -p com.tpnet.hlquery --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >monkeytest.txt

测试com.tpnet.hlquery这个app,间隔100毫秒,50%的触摸事件,50%的滑动事件,三个-v输出详细的日志,执行1000个事件,日志输出到monkeytest.txt

五:monkey架构
adb的下载安装以及使用_第18张图片
image.png
六:日志结果分析

Monkey测试出现错误之后,分析步骤如下:

看Monkey日志

程序无响应问题,在日志中搜索 “ANR”

奔溃问题: 在日志中搜索 “Exception”

如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey finished代表执行完成。

Monkey执行中断,在log的最后也能查看到当前的已经执行的次数。

七:压力测试工具优化方案

在进行Monkey测试时会遇到以下问题:

1.monkey测试会跑出要测试的app进行测试:

解决方案:通过获取当前的activity是否是要测试的app的,如果不是,就kill掉monkey的进程,重新进行测试

2.随机点击的时候会把wifi关闭:

解决方案:dump 负一屏的页面,通过状态来判断
WiFi打开的状态:


adb的下载安装以及使用_第19张图片
image.png

WiFi关闭的状态:


adb的下载安装以及使用_第20张图片
image.png

也可以通过adb命令实现查看wifi的状态,但手机需要root:
adb的下载安装以及使用_第21张图片
image.png
3.monkey是随机的,没法精准的对某个功能进行压力测试,那么就需要手动写基于某个功能的压力测试脚本(基于adb shell input命令):
adb的下载安装以及使用_第22张图片
image.png

例子:


adb的下载安装以及使用_第23张图片
image.png
八:性能测试之cpu统计
1.Android手机上的总体CPU使用率的计算方法:

1.确保手机连接上电脑
2.执行adb shell cat /proc/stat 命令,得到如下内容:


adb的下载安装以及使用_第24张图片
image.png

手机是8核,显示从cpu0到cpu7的数据。
现在分析第一行:从第一行的第二列到第八列代表的意思如下:
user:从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice : 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)

system :从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle :从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait :从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq : 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq :从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

totalCpuTime=user+nice+system+idle+iowait+irq+softirq
计算瞬时的CPU使用率: CPU总使用率(%) = 100(totalCpuTime - idle)/totalCpuTime
计算两个时间点之间的CPU使用率: 先取两个采样点,然后计算其差值:
CPU总使用率(%) = 100
((totalCpuTime2- totalCpuTime1)-(idle2-idle1))/(totalCpuTime2-totalCpuTime1)

2.Android手机上单独APP的CPU使用率计算方法:

1.确保手机连上电脑;
2.根据adb shell ps | grep包含,得到待测试APP的pid:如果是windows电脑,查询报名是findstr,内容如下:adb shell ps | grep 包名


adb的下载安装以及使用_第25张图片
image.png

3.执行adb shell cat/proc/pid/stat,得到如下内容:


image.png

现在分析第一行:以下只解释对我们计算Cpu使用率有用相关参数:

位置 参数 解释

第一列 :pid=17297 进程号

第十四列:utime 该任务在用户态运行的时间,单位为jiffies

第十五列:stime 该任务在核心态运行的时间,单位为jiffies

第十六列:cutime 所有已死线程在用户态运行的时间,单位为jiffies

第十七列:cstime 所有已死在核心态运行的时间,单位为jiffies

processCpuTime = utime + stime + cutime + cstime

计算瞬时的CPU使用率: 单个程序CPU使用率(%):

processCpuRatio = 100 * processCpuTime / totalCpuTime

计算两个时间点之间的CPU使用率:

先取两个采样点,然后计算其差值:

单个程序的CPU使用率(%) processCpuRatio = 100*(processCpuTime2-processCpuTime1)/(totalCpuTime2-totalCpuTime1)

问1:为什么不用top?

top也是通过查询/proc目录得到的数据,top的优点就是获取信息简单容易。使用此方法的缺点也一目了然,就是精确度不是很高

在不同的手机上,top命令的输出结构可能会不同,有时候并不是第三列

问2:为什么不用dump cpuinfo?

top分母是CPU jiffies,而dump cpuinfo是uptime,是时间

缺点就是这种方法会有权限问题,ROOT了之后才能使用

dumpsys 拿到的是几个cpu的值,所以可能得到100+%的值

延迟较高,更新较慢。当前的cpuinfo数据已经是90秒之前的信息。

问3:jiffies是什么?

全局变量jiffies用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为0,此后,每次时钟中断处理程序都会增加该变量的值。

一秒内时钟中断的次数等于Hz,所以jiffies一秒内增加的值也就是Hz。系统运行时间以秒为单位,等于jiffies/Hz

more:

http://blog.csdn.net/qinzhonghello/article/details/3588224

https://blog.csdn.net/nonmarking/article/details/77924477

https://www.jianshu.com/p/6bf564f7cdf0

九:性能测试之内存统计
1.查看单独app的内存占用:

adb shell dumpsys meminfo 包名 查询后的内容如下:


adb的下载安装以及使用_第26张图片
image.png

adb的下载安装以及使用_第27张图片
image.png

说明:
Pss对应的TOTAL值:内存所实际占用的值。
Dalvik Heap Size:从RuntimetotalMemory()获得,DalvikHeap总共的内存大小。
Dalvik HeapAlloc:RuntimetotalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。
Dalvik Heap Free:从RuntimefreeMemory()获得,DalvikHeap剩余的内存大小。
Dalvik Heap Size 约等于Dalvik HeapAlloc+ Dalvik HeapFree。
Cursor:/dev/ashmem/Cursor Cursor消耗的内存(KB)。
Ashmem:/dev/ashmem,匿名共享内存用来提供共享内存通过分配一个多个进程可以共享的带名称的内存块。
Other dev:/dev/,内部driver占用的在 “Otherdev”。
.so mmap:C 库代码占用的内存。
.jar mmap:Java 文件代码占用的内存。
.apk mmap:apk代码占用的内存。
.ttf mmap:ttf 文件代码占用的内存。
.dex mmap:Dex 文件代码占用的内存。
Other mmap:其他文件占用的内存。

2.查询手机整体内存使用情况,adb shell dumpsys meminfo
adb的下载安装以及使用_第28张图片
image.png

Free RAM :剩余可用内存大小

十:性能测试之流量统计
1.首先获取待测试app的pid: adb shell ps | grep 包名(windows是findstr) 查询后:
adb的下载安装以及使用_第29张图片
image.png
2.根据pid获取uid: adb shell cat /proc/pid/status | grep Uid 查询后:
image.png
3.测试前,执行adb shell cat /proc/net/xt_qtaguid/stats|grep uid获取当前该uid总流量消耗 查询后:
image.png

说明:
1.wlan0 代表是 WiFi 接收发送的流量数值,单位为:bytes
2.第6列是接收的流量数值,单位:bytes;
3.第8列是发送的流量数值,单位:bytes;
4.一个UID可能对应多个进程,如果结果出现多行数据,相加的总数即为结果

十一:性能测试之app耗电量测试
1.首先重启adb:

adb kill-server
adb start-server
使用adb devecies查看手机是否连接上电脑

2.重置电池数据:

adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats -reset

3.拔掉数据线
4.开始进行测试
5.测试完成后使用数据线连接电脑
6.收集电量数据

adb shell dumpsys batterystats > batterystats.txt

7.根据测试的包名找到对应的UID:
adb的下载安装以及使用_第30张图片
image.png

从batterystats.txt中也可以查到测试的app对应的uid:


image.png
8.根据uid查询电量消耗:
image.png
注意:
1.oppo A57(rom:6.0.1)

usb调试模式只能打开10分钟,之后系统会自动关闭,网上说可以升级到9.0的系统解决,但是手机上显示系统是最新的。

2.oppo R11(rom:7.1.1)

usb调试模式只能打开10分钟,之后系统会自动关闭

3.华为手机总是会点击wifi和飞行模式,即使手机处于无网的状态

解决办法:把顶部的屏幕显示关闭

————————————————

参考链接:https://blog.csdn.net/weixin_43927138/article/details/90477966;
参考链接:https://blog.csdn.net/weixin_40849588/article/details/90575618

你可能感兴趣的:(adb的下载安装以及使用)