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)
image.png

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

adb shell pm list packages


image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

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可以查看命令相关参数:


image.png

image.png
4.具体解释如下:

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

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

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

--pct-motion <percent> (滑动事件)

--pct-trackball <percent> (轨迹球事件)

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

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

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

--pct-appswitch <percent> (activity之间的切换)

--pct-anyevent <percent>(任意事件)

-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架构
image.png
六:日志结果分析

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

看Monkey日志

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

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

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

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

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

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

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

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

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

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


image.png

WiFi关闭的状态:


image.png

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

例子:


image.png
八:性能测试之cpu统计
1.Android手机上的总体CPU使用率的计算方法:

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


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 包名


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 包名 查询后的内容如下:


image.png

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
image.png

Free RAM :剩余可用内存大小

十:性能测试之流量统计
1.首先获取待测试app的pid: adb shell ps | grep 包名(windows是findstr) 查询后:
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:
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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355