第4章4节《MonkeyRunner源码剖析》ADB协议及服务: ADB命令行客户

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息。

从前面几个小节我们知道ADB命令行客户端是存在与主机端的一个命令,用户可以使用该命令来发送服务请求到ADB服务器,ADB服务器再判断该服务请求是主机服务请求还是本地服务请求来决定是否应该将请求传送给远程adbd守护进程进行执行。

在测试过程中,我们经常会用到ADB这个命令行客户端来辅助测试,那么我们这里就对我们经常会用到的命令进行学习和实践。

ADB命令之-列出所有设备信息:”adb devices -l”。

该命令的作用是将所有连接上来的安卓设备的基本信息给列出来,比如该设备的设备id,有了该id后我们编写脚本的时候就可以在MonkeyRunner类的waitForConnection中指定该id来建立MonkeyRunner后台和目标安卓机器的连接。

图4-4-1 列出所有设备信息

ADB命令之-指定一个设备进行通信:”adb -s”。

如上面列出来的信息中显示有多个设备挂载上了主机,那么我们如何才能发送一个命令到想要的一个设备上面了,比如进入到目标设备的交互shell。这个时候我们就可以通过”-s”选项来指定目标设备的设备id来指定想要连接的目标设备来发送想要的命令了,比如”adb -s 192.168.1.103:5555 shell”。下图显示了该命令发送后的结果,红色圈起来的部分代表已经进入到目标安卓机器的交互shell。

图4-4-2 发送命令到指定目标设备

当然,如果当前挂载上来的只有一个设备的话,,你也可以不知道ing任何设备就能发送命令。但如果有多过设备而没有指定目标设备的话,命令会因为不知道发送到哪个设备而报错:

图4-4-3 发送命令到没有指定的设备的错误输出

ADB命令之-通过TCP连接目标设备。

有时候可能你不想通过USB线直接连上你的主机来进行测试,因为USB连接毕竟是物理连接,在测试运行过程中可能你不小心动了下USB连线就会导致整个测试需要重头再来。这个时候你就可以考虑使用TCP协议来连接你的目标安卓设备了。但连接之前,你需要先在USB有线连接的基础上保证目标安卓机器上的adbd有在监听默认TCP端口5555,否则主机端是不能连接上adbd的(当然你也可以指定adbd去监听其他TCP端口,只是这样的话,主机端就需要指定该端口进行连接了)。默认情况下adbd是没有开启该TCP端口监听的。

我们可以通过往目标安卓机器发送“adb shell getprop service.adb.tcp.port”命令去检查adbd是否有设置监听任何TCP端口,安卓的getpropr命令是去获取一个系统属性,这个在上一章我们已经描述过,这里指定的”service.adb.tcp.port”这个系统属性指的就是adbd监听的TCP端口。当然,如果你对linux命令比较熟悉的话,也可以直接发送‘adb shell netstat|grep 5555”命令去检查当前是否有任何服务在监听该端口。这里给出当没有设置监听的时候的两个命令的输出结果如下:

图4-4-4 判断adbd是否有监听TCP默认端口

这个时候我们就需要把”service.adb.tcp.port”这个属性设置成默认监听端口5555,需要发送的命令是”adb shell setprop service.adb.tcp.port 5555”。当设置好该监听端口后我们再通过上面的两个命令去查看该端口是否有起效:

图4-4-5 adbd默认TCP监听端口已打开

下一步我们要做的就是获得安卓目标设备的IP地址了,可以通过发送命令”adb shell netcfg”来获得:

图4-4-6 获得目标安卓机器ip地址

最后我们就可以通过”adb connect”命令来连接上指定的ip地址所表示的安卓设备了,下图给出了连接前后的”adb devices -l”列出来的连接上来的设备信息对比,可以看到比连接前多了个已IP:port为设备id的安卓设备信息:

图4-4-7 连接前后设备列表对比

ADB命令之-端口转发

用户可以通过ADB命令行客户端的端口转发选项把一个本地端口转发到目标安卓设备的对应端口,这样本地应用就能直接跟本地端口进行通信,其效果有如直接跟远端对应端口进行通信。比如我们可以将本地4939端口设置成对目标安卓设备的ViewServer服务监听端口4939的转发,这样我们就可以直接操作该本地端口进行ViewServer通信了。下图显示了如何通过”adb forward”命令对该端口进行转发,然后通过”adb forward –list”命令将所有设置了端口转发的连接给列出来。

图4-4-8 端口转发命令示例

ADB命令之-安装应用

可以通过“adb install”命令将指定路径的安装包安装到目标安卓机器上面,请看下图示例:

图4-4-9 安装应用命令示例

ADB命令之-卸载应用

可以通过”adb uninstall”命令卸载指定包名的应用。通过安卓系统的”pm”包管理命令”pm list packages”可以列出所有已经安装的包名,然后找到需要卸载的应用包。

图4-4-10 列出所有已安装应用包

在找到需要卸载的应用包后就可以通过”adb uninstall”命令将其卸载掉了,请看下图:

图4-4-11 卸载应用命令示例

ADB命令之-推送文件到目标设备每个人在他的人生发轫之初,总有一段时光,

第4章4节《MonkeyRunner源码剖析》ADB协议及服务: ADB命令行客户

相关文章:

你感兴趣的文章:

标签云: