Android 自动化测试 adb
adb 介绍
adb 其实就是 Android Debug Bridge, Android 调试桥的缩写,adb 是一个 C/S 架构的命令行工具,主要由 3 部分组成:
- 运行在 PC 端的 Client : 可以通过它对 Android 应用进行安装、卸载及调试
- 运行在 PC 端的 Service : 其管理客户端到 Android 设备上 adb 后台进程的连接
- 运行在 Android 设备上的 adb 后台进程, 可以通过该指令查看该进程
adb shell ps | grep adbd
windows 请使用findstr
替代grep
注意:adb 使用的端口号,5037
adb 命令
adb 命令一般格式为:
adb 【-e | -d | -s<设备序列号>]<子命令>
1.帮助
adb help
2.获取设备列表以及设备状态
adb devices
3.获取设备状态
adb get-state
adb -s 设备名称 get-state // 多设备时,获取指定设备状态
设备状态有3种:
* device: 设备正常连接
* offline: 连接出现异常
* unknown: 没有连接设备
4.结束/启动adb服务
adb kill-server // 结束adb服务
adb start-server // 启动adb服务
5.日志相关 (用于分析错误)
adb logcat // 打印Android系统日志
adb bugreport // 打印dumpsys、dumpstate、logcat的输出
adb bugreport > d:\bugreport.log // 输出比较多,建议重定向到一个文件中
6.安装卸载apk
adb install // 后面跟 apk文件名, 覆盖安装使用参数 -r
adb install 相对路径 // 如: adb install Desktop/app-debug.apk
adb -s 设备名称 install apk绝对路径 // 多个设备同时存在时,指定设备进行apk安装
adb -s 设备名称 install -r apk绝对路径 // 多个设备同时存在时,指定设备进行apk 覆盖安装(覆盖之前的版本)
adb uninstall // 卸载应用,后面跟的参数是应用的包名,请区别于 apk 文件名,卸载时保存数据和缓存使用参数 -k
adb -s 设备名称 uninstall 应用的包名 // 多个设备同时存在时,指定设备进行卸载应用
7.文件处理
adb pull // 将 Android 设备上的文件或者文件夹复制到本地, 如:
例如复制 Sdcard 下的 pull.txt 文件到 D 盘:
adb pull sdcard/pull.txt d:\
如果需要重命名为 rename.txt:
adb pull sdcard/pull.txt d:\rename.txt // 与D盘同级(\)
adb pull sdcard/screen.png /Users/tacker/Desktop/screen.png // 在Desktop 下面(/)
注意: 注意权限,复制系统权限的目录下的文件,需要 root ,并且一般的
Android 机 root 之后并不能使用命令去复制,而需要在手机上使用类似于
RE 的文件浏览器,先对系统的文件系统进行挂载为可读写后,才能在手机上复
制移动系统文件,这里推荐使用小米手机的开发版本,IUNI 也可以
db push // 推送本地文件至 Android 设备, 例如:
adb push d:\push.txt sdcard/
8.重启设备
adb reboot // 重启设备,进入fastboot模式
adb recovery // 重启设备, 进入recovery模式(刷机)
adb shell input keyevent 26 // 唤醒设备
9.将宿主机上的某个端口重定向到设备的某个端口
adb forward tcp:1314 tcp :8888
执行该命令后所有发往宿主机 1314 端口的消息、数据都会转发到 Android 设备的 8888 端口上,
因此可以通过远程的方式控制 Android 设备。
10.远程连接 Android 设备
方法一:
前提: 手机, PC 处于相同的网络下, 手机root, 安装应用adbWireless。
步骤:
1. 启动adbWireless ,点击中间按钮。
2. adb connect 192.168.1.102 // 后面的连接是adbWireless 给的
3. 即可通过无线的方式连接手机,缺点是速度比较慢
方法二: (上面方法的补充)
前提: 手机, PC 处于相同的网络下
步骤:
1. 首先用USB链接上手机
2. adb tcpip 5555
3. adb connect 192.168.1.102 // 后面的连接是adbWireless 给的
4. 即可通过无线的方式连接手机,缺点是速度比较慢
adb shell 命令
adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下
pm 命令
Package Manager , 可以用获取到一些安装在 Android 设备上得应用信息
adb shell pm list package // 列出安装在设备上的应用
adb shell pm list package -s // 列出系统应用
adb shell pm list package -3 // 列出第三方应用
adb shell pm list package -f // 列出应用包名以及对应的apk 名称及存放位置
adb shell pm list package -i // 列出应用包名及其安装来源
adb shell pm list features // 列出硬件信息
命令最后增加 FILTER:过滤关键字,可以很方便地查找自己想要的应用,例如:
adb shell pm list package -f -i tencent // 可以找到tencent 相关的应用
adb shell pm path com.tencent.mobileqq // 列出对应包名 .apk的位置
adb shell pm list instrumentation // 列出含有单元测试 case 的应用,后面可跟参数 -f (与 pm list package 中一样),以及 [TARGET-PACKAGE]
adb shell pm dump 后跟包名 // 列出指定应用的 dump 信息,里面有各种信息,自行查看
adb shell pm install apk文件名 // 安装Apk, 区别于 adb install 安装,
目标apk 存放于PC端, 使用adb install 安装
目标apk 存放于Android 设备上, 使用pm install 安装
adb shell pm unistall 应用的包名 // 卸载应用,注意同adb uninstall 后面的参数是应用的包名
adb shell pm clear 包名 // 清楚应用的数据
adb shell pm set-install-location // 设置应用安装位置
adb shell pm get-install-location // 获取应用安装位置
[0/auto]: 默认为自动
[1/internal]: 默认为安装在手机内部
[2/external]: 默认安装在外部存储
am命令
am命令 主要负责应用内部
adb shell am start -n com.android.camera/.Camera // 启动系统相机的Camera Activity (实践中发现 包名 com.android.camera 如果是自己的项目可以在build.gradle 中找到, .Camera 可以在manifest 中查找, 暂时还未实践在他人的apk中如何查找)
adb -s 设备名称 shell am start -n com.android.camera/.Camera // 多设备时,启动系统相机的Camera Activity, 其他操作同理
adb shell am start -S com.android.camera/.Camera // 先停止相机应用,在启动相机应用(S 大写)
adb shell am start -W com.android.camera/.Camera // 等待应用完成启动
adb shell am start -a android.intent.action.VIEW -d http://testerhome.com // 启动默认浏览器打开一个特定网页
adb shell am start -a android.intent.action.CALL -d tel:10086 // 启动拨号器拨打 10086
adb shell am instrument // 启动一个 instrumentation , 单元测试或者 Robotium 会用到
adb shell am monitor // 监控 crash 与 ANR
adb shell am force-stop 包名 // 结束应用
adb shell am startservice 服务(类似于启动Activity) // 启动服务
adb shell am broadcast 广播(类似于Activity) // 启动广播
Input
这个命令可以向 Android 设备发送按键事件
adb shell input text abcd1234 // 发送文本内容,不能发送中文, 且键盘要是英文键盘
adb shell input keyevent KEYCODE_HOME // 发送按键事件(模拟 按下 Home键)
adb shell input tap 500 300 // 对屏幕发送点击事件(位置)
adb shell input swipe 300 100 1000 600 // 滑动事件, 需要注意的是在小的距离内,在较长的持续时间内进行滑动,最后表现出来的结果就是长按动作
adb shell screencap -p /sdcard/screen.png // 截屏并保存到sdcard 目录下
adb shell screenrecord sdcard/record.mp4 // 录屏,结束后保存在sdcard 中,ctrl + c 结束录制
uiautomator
执行 UI automation tests , 获取当前界面的控件信息
adb shell uiautomator dump // 获取空间信息
adb shell uiautomator runtest //
ime
输入法相关
adb shell ime list -s // 列出设备上的输入法
adb adb shell ime set com.baidu.input_mi/.ImeService // 选择输入法(这里设置为百度输入法)
wm
设备相关
adb shell wm size // 获取设备分辨率
补充:
补充连接: <a href='http://www.cnblogs.com/bravesnail/articles/5850335.html', target='__blank'>http://www.cnblogs.com/bravesnail/articles/5850335.html</a>
在 PC 端执行 monkey 命令,将信息保存至 D 盘 monkey.log,会这么写:
adb shell monkey -p com.android.settings 5000 > d:\monkey.log
在 PC 端执行 monkey 命令,将信息保存至手机的 Sdcard,可能会这么写:
这样写会报错 adb shell monkey -p com.android.settings 5000 > sdcard/monkey.log 这样写会报错
正确的如下:
adb shell "monkey -p com.android.settings 5000 > sdcard/monkey.log"