ADB简介

Adb的全称为AndroidDebugBridge:android调试桥梁,可以看出,Android的初衷是用adb这样的一个工具来协助开发人员在开发android应用的过程中更快更好的调试apk,因此adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能;我们可以在androidsdk安装目录的platform-tools目录下找到adb工具;现有安卓系统的权限机制越来越完善,很多希望能够绕开权限管理机制进行的一些操作都已经无法使用,但是Adb却可以实现。实际上Adb在某种程度上有很大权限的,即使是在最新版本的Android系统上。因为Adb的设计初衷是为了方便开发人员调试,因此必然需要暴露一些权限以外的接口。于是很多公司利用这个特性可以绕开权限机制在非Root非定制机上做一些操作(具体用法就是下面说的这些),当然方式也是五花八门,比如通过手机OTG连接,这里不再赘述了。

ADB三大组件

为了方便理解,我们从三个指令入手,我们经常会用到
adbstart-server
adbdevices,adbkill-server
然后我们经常会看到这样的输出界面:
C:\Users\dell>adbdevices
Listofdevicesattached
daemonnotrunning.startingitnowattcp:5037
daemonstartedsuccessfully
于是这里有三点疑问,为什么是server,server对应的是服务器或者服务端吧?如果手机是客户端,服务端是不是指电脑上开启的服务。还有这个呆萌(daemon)又是啥?ADB是一个C/S架构的应用程序,由三部分组成:
1.运行在pc端的adbclient:
命令行程序”adb”用于从shell或脚本中运行adb命令。首先,“adb”程序尝试定位主机上的ADB服务器,如果找不到ADB服务器,“adb”程序自动启动一个ADB服务器。接下来,当设备的adbd和pc端的adbserver建立连接后adbclient就可以向ADBservcer发送服务请求;
2.运行在pc端的adbserver:
ADBServer是运行在主机上的一个后台进程。它的作用在于检测USB端口感知设备的连接和拔除,以及模拟器实例的启动或停止,ADBServer还需要将adbclient的请求通过usb或者tcp的方式发送到对应的adbd上;
3.运行在设备端的常驻进程
adbdemon(adbd):
程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务。

ADB常用命令

1.adbdevices,获取设备列表及设备状态
APP专项测试之ADB常用命令_第1张图片
2.adbget-state,获取设备的状态
APP专项测试之ADB常用命令_第2张图片
设备的状态有3种,device,offline,unknown
device:设备正常连接
offline:连接出现异常,设备无响应
unknown:没有连接设备
3.安装卸载应用程序
adbinstall用于安装
APP专项测试之ADB常用命令_第3张图片
安装成功,返回成功提示"Success";
安装失败,会返回以下:
INSTALL_FAILED_ALREADY_EXISTS
此时需要用-r参数来重新安装。
INSTALL_FAILED_SIGNATURE_ERROR
应用的签名不一致,可能是发布版和调试版签名不同所致。也有可能是没卸载旧应用导致。
INSTALL_FAILED_INSUFFICIENT_STORAGE
存储空间不足,需要检查设备存储情况。
adbuninstall用于卸载
adbuninstall后面带的是应用的包名,而不是应用名。
查看系统所有应用的包名:
adbshellpmlistpackages–f
APP专项测试之ADB常用命令_第4张图片
4.上传、下载文件

adbpush命令将PC机上的文件推到DLT-RK3288机器上;
adbpull命令将DLT-RK3288机器上的文件拉到PC机上;
例如:
adbpushd:/new.txt/sdcard/
将D盘下new.txt文件到内部存储器
adbpull/sdcard/new.txtd:\将DLT-RK3288内部存储器根目录下的new.txt拉到D盘
APP专项测试之ADB常用命令_第5张图片
5.adbshellpmlistpackage

PackageManager,可以用获取到一些安装在Android设备上的应用信息
-s:列出系统应用
-f:列出应用包名及对应的apk名及存放位置
APP专项测试之ADB常用命令_第6张图片
6.adbshell

通过adbshell命令,就可以进入设备或者模拟器的shell环境了,在这个Linuxshell中,我们就可以执行各种Linux命令了。
如果只想执行一条shell命令,就可以采用:adbshell[shell_command],在实际使用中,经常与grep或findstr一起使用,起到过滤作用,查看自己需要的关键信息。
7.常见命令:
如ls,cd,rm,mkdir,touch,pwd,cp,mv,ifconfig,netstat,ping,ps,top等,进入adbshell即可执行,与linux相似
8.adblogcat
A.在cmd窗口查看手机的Log日志
有时候我们在手机程序上的日志要在其他地方调试,然后要看里面的Log日志。在cmd窗口中输入如下命令:
//格式1:打印默认日志数据
adblogcat
//格式2:需要打印日志详细时间的简单数据
adblogcat-vtime
//格式3:需要打印级别为Error的信息
adblogcat:E
//格式4:需要打印时间和级别是Error的信息
adblogcat-vtime
:E
//格式5:将日志保存到电脑固定的位置,比如D:\log.txt
adblogcat-vtime>D:\log.txt
这时手机日志更新什么日志,cmd窗口也会同步更新数据。
但是这样没有过滤条件,如果Log日志很多,很难找到我们想要的信息,
当然也可以复制cmd中的数据到一个文本中慢慢处理的,就是效率不高。
下面介绍adblogcat中的详细参数命令以及如何才能高效的打印日志,或者把日志保存到我们指定的位置。
B.adblogcat详解
adblogcat如果用过,但是具体命令又不记得,可以输入adblogcat-help,查看一下一些简单的数据格式日志过滤:adblogcat[:priority]
tag表示标签,priority输出的级别,日志默认级别是V,如果错误日志我们选择E就可以。
Android的日志分为如下几个优先级(priority):
V——Verbose(最低,输出得最多)
D——Debug
I——Info
W——Warning
E——Error
F——Fatal
S——Silent(最高,啥也不输出)
按某级别过滤日志则会将该级别及以上的日志输出。比如,命令:adblogcat:W
其实
可以是某个tag,如果没有指明,就表示所有。
tag可以由多个[:priority]组成。比如,命令:
adblogcatActivityManager:IMyApp:D:S
表示输出tagActivityManager的Info以上级别日志,输出tagMyApp的Debug以上级别日志,及其它tag的Silent级别日志(即屏蔽其它tag日志)。
adblogcat选项解析
--"-s"选项:设置输出日志
:s的标签,只显示该标签的日志;
--"-f"选项:将日志输出到文件,默认输出到标准输出流中,-f参数执行不成功;
--"-r"选项:按照每千字节输出日志,需要-f参数,不过这个命令没有执行成功;
--"-n"选项:设置日志输出的最大数目,需要-r参数,这个执行感觉跟adblogcat效果一样;
--"-v"选项:设置日志的输出格式,注意只能设置一项;
--"-c"选项:清空所有的日志缓存信息;
--"-d"选项:将缓存的日志输出到屏幕上,并且不会阻塞;
--"-t"选项:输出最近的几行日志,输出完退出,不阻塞;
--"-g"选项:查看日志缓冲区信息;
--"-B"选项:以二进制形式输出日志;
把日志信息保存到电脑中
adblogcat最后添加”>保存文件的地址,比如需要将的信息保存到电脑中使用下面的命令:adblogcat-vtime>D:\log.txt

monkey测试

Monkey测试简介
Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行压
Monkey命令的简单帮助
要获取Monkey命令自带的简单帮助,在CMD中执行命令:
adbshellmonkey–help

Monkey命令参数介绍

说明:第一个-s指定设备,如果只连接了一台设备,可不用该参数。
-p只允许系统启动指定的app,如果不指定,将允许系统启动设备中的所有app,也可指定多个包。
--throttle<毫秒数>指定用户操作(事件)间的时延。
--ignore-crashes指定当应用程序崩溃时,Monkey依然发送事件,直到事件计数完成。
--ignore-timeouts当应用程序发生ANR错误时,Monkey依然会发送事件,直到事件计数完成。
第2个-s,用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
-v用于指定反馈信息级别,总共分为level0、level1、level2三个级别,级别越高,输出的日志越详细。
日志级别Level0示例
adbshellmonkey-pcom.amaker.mp–v100
说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息
日志级别Level1示例
adbshellmonkey-pcom.amaker.mp–v-v100
说明提供较为详细的日志,包括每个发送到Activity的事件信息
日志级别Level2示例
adbshellmonkey-pcom.amaker.mp–v-v–v100
说明最详细的日志,包括了测试中选中/未选中的Activity信息
最后的数字(这里是500):表示Monkey程序模拟500次随机用户操作事件。

输出测试结果到D:\monkeylog.txt