APP专项测试之ADB常用命令

ADB常用命令

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,获取设备列表及设备状态 

2.adbget-state,获取设备的状态  

设备的状态有3种,device,offline,unknown  

device:设备正常连接  

offline:连接出现异常,设备无响应  

unknown:没有连接设备

3.安装卸载应用程序  

adbinstall用于安装

安装成功,返回成功提示"Success";  

安装失败,会返回以下:  

INSTALL_FAILED_ALREADY_EXISTS  

此时需要用-r参数来重新安装。  

INSTALL_FAILED_SIGNATURE_ERROR  

应用的签名不一致,可能是发布版和调试版签名不同所致。也有可能是没卸载旧应用导致。  

INSTALL_FAILED_INSUFFICIENT_STORAGE  

存储空间不足,需要检查设备存储情况。  

adbuninstall用于卸载  

adbuninstall后面带的是应用的包名,而不是应用名。  

查看系统所有应用的包名:

adbshellpmlistpackages–f

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盘 

5.adbshellpmlistpackage 

PackageManager,可以用获取到一些安装在Android设备上的应用信息  

-s:列出系统应用  

-f:列出应用包名及对应的apk名及存放位置 

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 

你可能感兴趣的:(APP专项测试之ADB常用命令)