当前位置:   article > 正文

Android自动化测试探索(一)adb详细介绍

su 执行 service call iphonesubinfo 1

adb详细介绍

 

#1. 基本简介

adb,即Android Debug Bridge,它是Android开发/测试人员不可替代的强大工具

 

#2. Mac上安装adb

安装brew

ruby -e “$(curl –insecure -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”.

安装adb

brew install Caskroom/cask/android-platform-tools

测试是否安装成功, 打开手机开发者模式, 打开USB调式和安装功能

adb devices

第一次执行会提示没有启动, 会自动启动

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
* daemon not running; starting now at tcp:5037
* daemon started successfully

再执行一次

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached

这次没有提示错误, 但没有列出手机。是因为没有开启手机开发者模式和USB调试安装功能

我们打开后再试一次, 这次就能看到有列出我们的设备了, device前面一段就是我们的设备的serialNumber

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
62ab58430211    device

 

#3. 设备连接管理

1) USB连接

通过 USB 连接来正常使用 adb 需要保证几点:

  1. 硬件状态正常。

    包括 Android 设备处于正常开机状态,USB 连接线和各种接口完好。

  2. Android 设备的开发者选项和 USB 调试模式已开启。

    可以到「设置」-「开发者选项」-「Android 调试」查看。

    如果在设置里找不到开发者选项,那需要通过一个彩蛋来让它显示出来:在「设置」-「关于手机」连续点击「版本号」7 次。

  3. 设备驱动状态正常。

    这一点貌似在 Linux 和 Mac OS X 下不用操心,在 Windows 下有可能遇到需要安装驱动的情况,确认这一点可以右键「计算机」-「属性」,到「设备管理器」里查看相关设备上是否有黄色感叹号或问号,如果没有就说明驱动状态已经好了。否则可以下载一个手机助手类程序来安装驱动先。

  4. 通过 USB 线连接好电脑和设备后确认状态。

    如果能看到

    说明连接成功.

2) 无线连接(需借助USB线)

除了可以通过 USB 连接设备与电脑来使用 adb,也可以通过无线连接——虽然连接过程中也有需要使用 USB 的步骤,但是连接成功之后你的设备就可以在一定范围内摆脱 USB 连接线的限制啦!

操作步骤:

  1. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。

  2. 将设备与电脑通过 USB 线连接。

    应确保连接成功(可运行 adb devices 看是否能列出该设备)。

  3. 让设备在 5555 端口监听 TCP/IP 连接:

    adb tcpip 5555
  4. 断开 USB 连接。

  5. 找到设备的 IP 地址。

    一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文提到的获取设备IP的方法用 adb 命令来查看。

  6. 通过 IP 地址连接设备。

    adb connect <device-ip-address>:<port>

    这里的 <device-ip-address> 就是上一步中找到的设备 IP 地址, <port>就是上面设置的5555端口。

  7. 拔掉USB线, 确认连接状态。

    adb devices
  8. 如果能看到

    Jackeys-MacBook-Pro:xiaoailite jackey$ adb devices
    List of devices attached
    192.168.1.10:5555    device 

    说明连接成功。

如果连接不了,请确认 Android 设备与电脑是连接到了同一个 WiFi,然后再次执行 adb connect <device-ip-address>:<port> 那一步;

如果还是不行的话,通过 adb kill-server 重新启动 adb 然后从头再来一次试试。

断开无线连接命令:

adb disconnect <device-ip-address>

 

#4. 常用指令

1) 启动
adb start-server
2) 停止
adb kill-server
3) 查看adb版本
adb version
4) 查看已连接的设备
adb devices

 

输出:

Jackeys-MacBook-Pro:~ jackey$ adb devices
List of devices attached
62ab58430211    device

输出格式为[serialNumber][state], 其中state有如下几种:

  • offline - 表示设备未连接成功或无响应
  • device - 设备已连接. 需要注意这个状态并不标识Android系统以及完全启动和可操作, 在设备启动过程中设备实例就可连接到adb, 但启动完毕后系统才处于可操作状态
  • no device - 没有设备/模拟器连接
5) 为命令指定目标设备
adb [-d|-e|-s <serialNumber>] <command>

在多个设备/模拟器连接的情况下较常用的是 -s <serialNumber> 参数,serialNumber 可以通过 adb devices 命令获取

6) 指定adb server的网络端口
adb -P <port> start-server

默认端口是5037

7) 获取设备的IP
adb shell ifconfig | grep Mask
8)查看应用列表
adb shell pm list packages

在 adb shell pm list packages 的基础上可以加一些参数进行过滤查看不同的列表,支持的过滤参数如下:

9) 安装APK
adb install [-lrtsdg] <path_to_apk>

[100%] /data/local/tmp/1.apk
    pkg: /data/local/tmp/1.apk
Success
10)卸载应用
adb uninstall [-k] <packagename>

<packagename> 表示应用的包名,-k 参数可选,表示卸载应用但保留数据和缓存目录。

示例:

adb uninstall com.qihoo360.mobilesafe
11)清除应用数据与缓存
adb shell pm clear <packagename>

<packagename> 表示应用名包,这条命令的效果相当于在设置里的应用信息界面点击了「清除缓存」和「清除数据」。

示例:

adb shell pm clear com.qihoo360.mobilesafe
 12)查看前台Activity
adb shell dumpsys activity activities | grep mFocusedActivity
13) 查看正在运行的Services
adb shell dumpsys activity services [<packagename>]

<packagename> 参数不是必须的,指定 <packagename> 表示查看与某个包名相关的 Services,不指定表示查看所有 Services。

<packagename> 不一定要给出完整的包名,比如运行 adb shell dumpsys activity services org.mazhuang,那么包名 org.mazhuang.demo1org.mazhuang.demo2 和 org.mazhuang123 等相关的 Services 都会列出来。

14) 与应用交互 

15) 调起Activity
adb shell am start [options] <INTENT>

例如调起微信主界面:

adb shell am start -n com.tencent.mm/.ui.LauncherUI

调起 org.mazhuang.boottimemeasure/.MainActivity 并传给它 string 数据键值对 toast - hello, world

adb shell am start -n org.mazhuang.boottimemeasure/.MainActivity --es "toast" "hello, world"
16) 调起Service
adb shell am startservice [options] <INTENT>

例如调起微信的某Service

adb shell am startservice -n com.tencent.mm/.plugin.accountsync.model.AccountAuthenticatorService
17) 发送广播
adb shell am broadcast [options] <INTENT>

可以向所有组件广播,也可以只向指定组件广播。

例如,向所有组件广播 BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

又例如,只向 org.mazhuang.boottimemeasure/.BootCompletedReceiver 广播 BOOT_COMPLETED

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n org.mazhuang.boottimemeasure/.BootCompletedReceiver

这类用法在测试的时候很实用,比如某个广播的场景很难制造,可以考虑通过这种方式来发送广播。

既能发送系统预定义的广播,也能发送自定义广播。如下是部分系统预定义广播及正常触发时机:

 

 18) 强制停止应用
adb shell am force-stop <packagename>

示例:

adb shell am force-stop com.qihoo360.mobilesafe
19) 文件管理

复制设备里的文件到电脑

adb pull <设备里的文件路径> [电脑上的目录]

其中 电脑上的目录 参数可以省略,默认复制到当前目录。

示例:

adb pull /sdcard/sr.mp4 ~/tmp/

说明:设备上的文件路径可能需要 root 权限才能访问,如果你的设备已经 root 过,可以先使用 adb shell 和 su 命令在 adb shell 里获取 root 权限后,先 cp /path/on/device /sdcard/filename 将文件复制到 sdcard,然后 adb pull /sdcard/filename /path/on/pc

 

复制电脑里的文件到设备

adb push <电脑上的文件路径> <设备里的目录>

示例:

adb push ~/sr.mp4 /sdcard/

说明:设备上的文件路径普通权限可能无法直接写入,如果你的设备已经 root 过,可以先 adb push /path/on/pc /sdcard/filename,然后 adb shell 和 su 在 adb shell 里获取 r

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/76582
推荐阅读
相关标签
  

闽ICP备14008679号