针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中。
Android Debug Bridge
adb其实就是Android Debug Bridge,安卓调试桥的缩写,adb.exe在安装的anroid的sdk开发包platform-tools目录下,它是一个C/S架构的命令行主要由3部分组成:
1、运行在PC端的Client:可以通过它对Android应用进行安装、卸载及调试
Eclipse 中的 ADT、SDK Tools 目录下的 DDMS、Monitor 等工具,都是同样地用到了 adb 的功能来与 Android 设备进行交互。
PC 端的手机助手,诸如 360 手机助手、豌豆荚、应用宝等,其除了安装第三方应用方便,其他的功能,基本上都可以通过 adb 命令去完成,这里建议测试人员
尽量不要在电脑上安装这类手机助手,因为其自带的 adb 程序可能会与 Android SDK 下的 adb 程序产生冲突,5037
端口被占用,导致使用 adb 命令时无法连接到设备
2、运行在PC端的Service:其管理客户端到Android设备上adb后台进程的连接
adb 服务启动后,Windows 可以在任务管理器中找到 adb.exe 这个进程
3、运行在 Android 设备上的 adb 后台进程(adb daemon,守护进程,一个以后台进程的形式运行于模拟器或物理手机设备上的守护程序(daemon))
执行 adb shell ps | grep adbd
,可以找到该后台进程,windows 请使用 findstr
替代 grep
[xuxu:~]$ adb shell ps | grep adbd root 23227 1 6672 832 ffffffff 00019bb4 S /sbin/adbd
这里注意一个地方,就是 adb 使用的端口号,5037
,有必要记一下
当用户启动一个adb客户端,客户端首先确认是否已有一个adb服务进程在运行。如果没有,则启动服务进程。当服务器运行,adb服务器就会绑定本地的TCP端口5037并监听adb客户端发来的命令,所有的adb客户端都是使用端口5037与adb服务器进行对话的。接着服务器将所有运行中的模拟器或设备实例建立连接。它通过扫描所有5555到5585范围内的奇数端口来定位所有的模拟器或设备。一旦服务器找到了adb守护程序,它将建立一个到该端口的连接。请注意任何模拟器或设备实例会取得两个连接的端口,一个偶数端口用来控制与控制台的连接,和一个技术端口用来控制与adb连接。
adb命令
在开发或者测试的过程中,我们可以通过adb来管理多台设备,其一般的格式为:
adb [-e | -d | -s <设备序列号>] <子命令>
在配好环境变量的前提下,在命令窗口当中输入adb help或者直接输入adb,将会列出所有选项的说明及子命令
这里介绍一些里面蝉蛹的命令:
1、adb devices,获取设备列表及设备状态
[xuxu:~]$ adb devices List of devices attached 44c826a0 device
2、adb get-state,获取设备的状态
[xuxu:~]$ adb get-state device
设备的状态有3种,device,offline,unknown
device:设备正常连接
offline:表明设备或者模拟器没有连接到adb服务器或者没有响应,连接异常,设备无响应
unknown:没有连接设备
3、adb install,安装应用
只有一个手机设备或者一个模拟器设备:adb install 路径
指定设备或者模拟器安装:adb -s 物理手机设备序列号/手机模拟器设备序列号 install 安装包路径
覆盖安装:adb -s 设备序列号 install -r 安装包路径
windows 下如果需要安装含有中文名的 apk ,需要对 adb 进行修改,百度可以找到做出修改的adb , 支持中文命令的 apk,请自行搜索
4、adb uninstall,卸载应用
adb uninstall 包名
指定设备或者模拟器设备卸载:adb -s 手机设备序列号/手机模拟器设备序列号 uninstall 已安装的应用报名
保留配置和缓存文件卸载:adb -s 设备序列号 shell pm uninstall -k 已安装的应用包名
5、adb pul,将 Android 设备上的文件或者文件夹复制到本地
例如复制 Sdcard 下的 pull.txt 文件到 D 盘:
adb pull sdcard/pull.txt d:/
指定设备或者模拟器:adb -s 设备序列号 pull 手机上文件路径 电脑上的路径
如果需要重命名为 rename.txt:
db pull sdcard/pull.txt d:/rename.txt
注意权限,复制系统权限的目录下的文件,需要 root ,并且一般的 Android 机 root 之后并不能使用命令去复制,而需要在手机上使用类似于 RE 的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复制移动系统文件,这里推荐使用小米手机的开发版本,IUNI 也是不错滴~~
6、adb push,推送本地文件或文件夹至Android设备
例如推送 D 盘下的 push.txt 至 Sdcard:
adb push d:/push.txt /sdcard/
推送D盘下的“pass”文件夹至Sdcard:
adb -s 设备号 push d:/pass /sdcard/pass/
7、adb shell命令
安卓系统是基于Linux系统开发的,支持常见的linxu命令,这些命令都保存在手机的“/system/bin/”文件夹下,在该文件夹下能看到我们一些平时在应用linux系统时经常操作的指令,如"ls、cat、df、uptime、ps、kill"等。我们可以通过使用adb shell命令后直接加上相关的指定及其参数来执行这些指令
例如:查看手机当前目录的所有内容,可以输入adb shell ls命令查看
可以输入“exit”来退出“adb shell”提示符。回到windows命令行控制台
有时候,我们可能关心手机上安装了哪些应用,可以使用adb shell命令来访问手机系统/data/data目录进行查看。提醒,在操作的过程中需要切换root用户
具体操作如下:
adb shell su root cd /data/data ls
如果没有root,则会出现访问权限问题
8、adb shell dumpsys battery,查看电池电量的相关信息
各参数的含义:
AC powered:false 表示是否连接电源供电,false也就是没有使用电源供电
USB powered:true 表示是否使用USE供电,true是使用USB供电
status:2 表示电池充电状态,这里2表示电池电量
health:2 表示电池的健康情况,2表示电池的状态为良好
present:true 表示手机上是否有电池,true表示有电池
level:66 表示当前剩余的电量信息,66表示剩余电量为66%
scale:100 表示电池电量的最大值
voltage:4035 表示当前电池的电压,模拟器上的电压是0,这里我们手机上电池的电压为4035毫伏
temperature: 310 表示当前电池的温度,它是一个整数值,310表示31.0度
technology: Li-ion 表示电池使用的技术,z合理的Li-ion表示锂电池
9、adb shell dumpsys WiFi,查看无线网络的信息
运行该命令后输出信息内容很多,所以这里加入了“| more”参数,这样当输出信息在满一页时就暂停输出,若需要查看后续输出内容,就可以按空格继续显示下页内容,或者按Q键停止显示后续输出内容
相关输出信息的含义:
Wi-Fi is enabled:表示wifi的连接状态信息,安卓系统中,包含了5中wifi连接状态
WIFI_STATE_DISABLED wifi已关闭
WIFI_STATE_DISBLING WIFI正在关闭中
WIFI_STATE_ENABLED WIFI已启用
WIFI_STATE_ENABLING WIF正在启动中
WIFI_STATE_UNKNOWN 未知WIFI状态
Internal state: 在该部分罗列了一些关于wifi设备名称、wifi的名称,状态,IP地址,MAC地址,网络加密方式等信息
如果需要查看后面的输出信息,单机空格键可进行查看
10、adb shell dumpsys power,查看你电源管理的相关信息
在进行移动测试自动化测试的或死后,有时候需要判断手机是否处于锁屏状态,以及根据手机的一些设置来决定其操作,比如手机设置的是5分钟不进行操作就关闭屏幕,我们在进行自动化脚本设计的时候,在长时间停顿后就需要判断其是否超过锁屏了时间,从而采取后续不同的操作,如果没超过改时间则就进行输入操作,而超过了这个时间则需要激活屏幕,锁锁定了屏幕还需要解锁,再进行响应的输入操作,这里的“mScreenOffTimeoutSetting=60000”,其值“60000”表示1分钟
过滤信息: 在windows可以加入“findstr”或者“grep”,在Linux中只能加入“grep”。 adb shell dumpsys power | findstr "mScreenOffTimeoutSetting" 就可以只输出屏幕个i鞍鼻时间的设置信息
11、adb shell dumpsys telephony.registry,查看电话相关信息
mCallState=0 表示呼叫状态,0表示待机状态;1表示来电尚未接听;2表示电话占线
mCallIncomingNumber= 表示最近一次来电的电话号码
mServiceState 表示服务的状态,0表示正常使用状态
mSignalStrengt 表示信号强度
mMessageWaiting 表示是否在等待无线电信息
mCallForwarding 表示是否启用了呼叫转移
mDataActivity 表示无线数据通话情况,0表示没有通话,1表示正在接受IP PPP信号,2表示正在发送IP PPP信号,3表示正在发送和接受IP PPP信号
mDataConnectionState 表示无线数据连接情况,0表示无数据连接,1表示正在创建数据连接,2表示已连接,3表示已挂起状态,已经建好连接,但是IP数据通信暂时无法使用
mDataConnectionPossible 表示是否有数据连接
mDataConnectionReason 表示数据连接的原因
mDataConnectionApn 表示APN,即接入点名称
mDataConnectionLinkProperties 表示数据连接的链路属性
mDataConnectionLinkCapabilities 表示数据链路连接的能力
mCellLocation 表示基站相关信息
registrations 表示登记记录计数
12、adb shell cat /proc/cpuinfo,CPU硬件的相关信息
安卓系统的“/proc”分区保存的系统各种实时信息,如CPU、内存等信息
13、adb shell cat /proc/meminfo,查看内存的相关信息
14、adb shell cat /proc/iomem,查看I/O内存分区的相关信息