1、adb命令
adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。
adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作,例如安装和调试应用,并提供对 Unix shell 的访问权限。
2、adb组成
adb采用了客户端-服务器(c/s)模型,包括3部分,如图
adb的Client:当adb运行在计算机上时,我们可以在命令行中通过adb命令来调用adb的客户端(Client)。Client本质上就是Shell,它可以发送命令给Server。Client发送命令时,首先会检测PC上有没有启动Server,如果没有启动Server,则会自动启动一个Server,然后将命令发送到Server。
adb的Server:运行在计算机后台的进程,用于管理客户端与运行在模拟器或真机上的守护进行通信。
adb的daemon:守护进程作为一个后台进程在Android设备或模拟器系统中运行,它的作用是连接adb服务端,并且为运行在主机上的adb客户端提供一些服务。
3、adb工作原理
当adb客户端启动时,客户端会先检查adb服务端是否启动。如果没有,会先启动服务端进程。adb服务端启动后,会与计算机上的5037端口绑定,并监听adb客户端发出的命令。
然后服务端会与正在运行的Android设备建立连接。服务端通过扫描计算机上的5555到5585之间的奇数号端口查找Android设备。服务端一旦发现Android设备都使用一对端口,偶数端口用于控制台连接,奇数端口用于与adb连接。
服务端与所有Android设备建立连接后,就可以使用adb命令来访问Android设备了。服务端会管理已经建立的连接,并处理来自adb客户端的命令,如图
4、启用adb调试
Android系统的移动设备(如手机)可以通过USB连接到adb,连接时需要在移动设备的系统设置中启动USB调试(位于手机的开发者选项下),启动USB调试后,设备上的adb守护进程就会被启动,adb服务端才可以和Android设备建立连接。
如果希望计算机连接Android模拟器或者真机,需要先打开USB调试开关。
(1)模拟器,不需要手动设置USB调试开关,默认就是打开USB调试开关。
(2)真机设备,需要手动打开USB调试开关。
1)首先需要在计算机上安装Android手机驱动。
2)然后打开移动设备的设置应用,进入关于界面,然后开启USB调试模式。
5、adb常用命令
1.adb命令格式
adb [-d|-e|-s <serialNumber>] <command>
-d:指定当前唯一通过USB连接的Android设备为命令目标。
-e:指定当前唯一运行的模拟器为命令目标。
-s:指定相应serialNumber号的设备/模拟器为命令目标。
命令格式中方括号的内容是可选的,尖括号中的内容是必填的。方括号中参数可以指定设备,关于设备的指定有3个参数可以使用:-d、-e和-s。其中使用最多的是-s。程序员在连接多台设备的时候,一般都是使用-s加上设备的序列号这种方式去指定具体设备。
一台计算机上可以同时连接多台设备,当计算机上连接多台设备时,我们如果想通过adb操作某台设备,必须在命令中指定设备的序列号,这样命令才可以在某个特定的设备上被执行。
2.查询设备
把Android设备连接到adb服务端后,需要确认设备的连接状态。这时可以使用查询命令进行查询。
3.连接模拟器(以MuMu模拟器为例)
adb connect 127 0.0.1:7555
adb devices
-
adb connect命令可以通过WLAN的方式连接到模拟器,7555为MuMu模拟器使用的计算机上的端口。
-
adb devices可以查询设备连接的状态。
Windows系统中,连接模拟器需要先执行connect命令去连接模拟器,127.0.0.1是本地的IP地址,因为模拟器是安装在本地计算机上的,所以要使用本地的IP地址,加上模拟器使用的一个端口来连接模拟器。MuMu的端口是7555,如果使用的是其他类型的模拟器,需要先了解它用的计算机上端口是什么,然后再去连接。macOS系统中连接模拟器不需要执行connect命令,直接执行adb kill-server && adb devices命令即可。
4.连接真机
真机直接用USB连接到计算机,不需要执行connect命令。
在计算机上直接用adb devices命令,可查看已经连接到计算机上的设备列表。
hogwarts@ ~ % adb devices
List of devices attached
emulator-5554 device
使用命令后,如果设备已经成功连接到计算机上,那么设备列表中就会展示已连接设备的信息。主要信息包括如下。
emualotr-5554:设备序列号。
device:设备连接状态为成功。
5.安装或卸载App
测试人员在测试App过程中,如果需要安装或者卸载App,可以直接用adb命令来操作。
-
普通安装:adb install <apk 路径>
-
覆盖安装:abd install -r<apk 路径>
-
完全卸载:adb uninstall <包名>
-
保留配置文件的卸载:adb uninstall -k <包名>
6、设备与计算机传输文件
adb命令支持计算机和Android设备之间的文件互传,例如,要提取Android设备中的日志文件到本地计算机,就可以通过adb命令的方式来完成。
从计算机上传文件至设备:adb push <计算机路径><设备路径>
从设备上复制文件至计算机:adb pull <设备路径><计算机路径>
7、日志
打印与计算机连接的设备的日志(log)信息命名格式与描述如下。
-
屏幕输出日志:adb logcat
-
通过标签过滤信息:adb logcat -s标签
-
显示时间:adb logcat -v time
-
输出所有信息:adb logcat -v long
-
输出日志到文件:adb logcat -v time > log.txt
-
清楚缓存中日志信息:abd logcat -c
使用adb shell 命令远程登录Android系统,可以进入Android设备的系统内部。进入Android设备系统内部后,测试人员在系统内部即可以执行一些简单的Lunix命令,也可以执行很多特有的命令。
使用adb shell 命令有两种方式。
一种是直接在adb shell后面跟上命令
adb [-s serial_number] shell <command>
例如:
hogwarts@ ~ % adb shell ls
acct
cache
charger
config
d
data
default.prop
dev
etc
...
另一种是在Android设备上启动交互adb shell
adb [-s serial_number] shell
例如,进入Android设备内部,可以查看设备内部的目录结构和内容,执行的命令如下:
hogwarts@ ~ % adb shell
root@x86:/ # ls
acct
cache
Charger
config
d
data
default.prop
dev
...
要退出交互式adb shell,可以按Ctrl+D组合键或输入“exit” 实现退出操作。
8、Android 常用测试命令
1.设备截图/录屏
在测试过程中,测试人员如果需要对测试过程中进行截图或者录屏,也可以使用adb命令完成
截图:adb shell screencap<设备路径>
录屏:adb shell screenrecord<设备路径>
2.调用Activit管理器
在adb shell中,我们可以使用Activity管理器(am)工具发出命令以执行各种系统操作,如启动Activity、强行停止进程、修改设备屏幕属性等。
在测试过程中,如果我们需要启动App或强制关闭App,可以通过adb命令来实现。
-
启动应用(App):adb shell am start -n <包名>/<Activity 名>
-
强制停止应用(App):adb shell am force-stop<包名>
3.调用软件包管理器
在adb shell中,我们可以使用软件包管理器(pm)工具发出命令,以对Android设备上安装的App包执行一些操作。
如果需要查询Android设备里都安装了什么应用(App),我们即可以使用adb shell pm list 命令来查看,也可以再上述命令中加上不同的参数区查看不同类型的应用,还可以通过adb命令来清楚应用中相关的数据。具体命令格式如下。
-
显示Android 设备中安装的所有应用:adb shell pm list packages.
-
只显示系统应用:adb shell pm list packages -s.
-
只显示第三方应用:adb shell pm list packages -3
-
删除与App 包关联的所有数据:adb shell pm clear<包名>
4.adb shell dumpsys
dumpsys是一种在Android设备上运行的工具,它可提供有关系统服务的信息。我们可以在adb中使用命令行调用dumpsys,用以获取链接的设备上运行的所有系统服务的信息。
在测试中,如果我们需要通过adb命令启动App,则需要知道App的包名和人口的Activity名。这个时候,我们就可以通过下面这个条命令获取到这两个信息。
注:这个场景下,需要我们启动应用程序,让应用程序在前台运行,然后再执行下面的命令。
adb shell dumpsys activity | grep mFocusedActivity
hogwarts@ ~ % adb shell dumpsys activity | grep mFocusedActivity
mFocusedActivity: ActivityRecord 9date986 u0
com.xueqiu.android/.common.MainActivity t139}
上面的信息中展示了当前的App包名和Activity名称。
-
包名:com.xueqiu.android。
-
Activity 名:common.MainActivity。
5.adb uiautomator
adb 命令还支持直接获取App的页面信息。页面信息包含了页面中元素的属性,我们做自动化测试时,可以通过这些元素的属性去定位元素。获取到的页面元素布局会输出到一个xml文件中。
-
获取当前窗口的UI布局简化信息:adb shell uiautomator dump --compressed。
hogwarts@ ~ % adb shell uiautomator dump --compressed
UI hierchary dumped to : /sdcard/window_dump.xml
不指定输出文件路径时,dump输出的文件默认存储路径为/sdcard/window_dump.xml。
我们可以通过adb pull 命令把文件传输到计算机中,然后用UI Automator Viewer 工具打开文件并查看页面布局。
-
指定输出文件路径:adb shell uiautomator dump file<设备路径>。