家资是何物,积帙列梁梠。这篇文章主要讲述Appium 自动化测试第一天——基础知识相关的知识,希望能为你提供帮助。
概述Adb作为PC和android设备交互与通信的工具
Android调试桥接,Android DebugBridge,它是一个CS架构的命令行工具,作用就是PC通过adb来操作手机
Adb的组成客户端(client):所有命令都是PC发起,可以对Android应用进行安装,卸载和调试(可以有多个窗口或程序发送命令)
服务端(server):管理客户端到Android设备上adb后台进程的连接(不同客户端发来的命令都由服务器负责和Android设备通信,他们之间的通信都是通过5037端口连接)
守护进程:Android后台运行的进程,负责接收命令(ADB服务器和守护进程的通信是通过相邻的两个端口实现的,偶数端口(比如5554)负责处理命令行的通信,奇数端口(比如5555)是用来保持连接的,我们可以看到,adb服务器可以和多台设备连接,每连接一个,会分配两个相邻的端口出来,第一对是5554/5555,第二对就是5556/5557,相对应的,我们adb连接多台设备的时候,需要指定端口号或者设备名称,服务器会找到对应的设备,进行通信)
文章图片
Adb环境配置下载SDK-------将tools和platform-tools两个目录配置到系统环境变量PATH中-----这样就可以直接在命令行中使用adb命令进行验证了
ADB命令 ADB基本命令格式adb [-e | -d | -s< 设备序列号> ]< 子命令>
参数 |
说明 |
-e |
只运行在模拟器 adb -e shell |
-d |
只运行在真机adb -d shell |
-s |
运行在指定的设备中,设备序列号通过adb device获取到 |
help |
列出adb帮助文件 |
version |
列出adb版本 |
Adb基础命令
文件传输和安装命令
子命令 |
参数 |
说明 |
devices |
[-l]详细信息 |
列出所有已经连接的设备,有三种状态 device/offline/device not fount 分别对应设备连接正常,设备断线和设备未找到 |
push |
<
local>
<
remote>
|
复制电脑本地文件到手机设备 |
pull |
<
remote>
<
local>
|
拉取手机设备文件到本地 |
install |
[-lrtsd] <
file>
|
安装apk -l:标识应用为受限制应用 -r:替换安装 -t:运行安装测试包 -s:安装到SD卡 -d:允许降级安装 |
install -mutiple |
[-lrtsd] <
file ...>
|
批量安装 -p:部分应用程序安装 |
uninstall |
[-k] <
package>
查找包名可以通过命令(adb shell pm list packages | find “***”) |
卸载 -k:保持data和cache下的文件 |
获取信息命令
子命令 |
参数 |
说明 |
wait-for-device |
无 |
等待设备连接 |
start-server |
无 |
开启adb服务 |
kill-server |
无 |
杀掉adb服务(adb连不上的时候可以尝试) |
get-state |
无 |
获取adb服务状态 offline | bootloader | device |
get-serialno |
无 |
获取SN号 |
get-devpath |
无 |
获取device-path |
status-window |
无 |
连续打印指定设备的设备状态(监听状态)—做开发工具时使用较多 |
Log与重启相关命令
子命令 |
参数 |
说明 |
bugreport |
无 |
打印当前的dumpsys,sumpstate,logcat的输出 |
logcat |
参数较多, 需要单独研究 |
输出Android系统日志 |
shell |
参数较多, 需要单独研究 |
进入远程shell端 |
remount |
无 |
重新挂载系统分区,是的系统分区重新可写(多用于push到系统目录之前) |
reboot |
[bootloader | recovery] |
重启 |
reboot -bootloader |
无 |
重启到bootloader |
root |
无 |
重新启动adbd获取root身份 |
usb |
无 |
重新启动adbd来监听USB,相当于重新插拔USB |
tcpip |
<
port>
|
重新启动adbd来监听指定的TCP端口 |
Adb备份与恢复命令
子命令 |
参数 |
说明 |
backup (将一页的数据文件写入到指定的文件,如果没有指定-f输出目录,则保存在当前目录的backup.ab) |
[-f<
file>
] |
指定备份目录 |
[-apk | -noapk] |
是否备份apk文件,默认为否 | |
[-obb | -noobb] |
是否备份obb数据包,默认为否 | |
[-shared | -noshared] |
是否备份SD卡共享内容,默认为否 | |
[-all] |
备份所有已安装应用 | |
[-system | -nosystem] |
是否备份系统应用,-all包括系统应用 | |
[<
packages...>
] |
备份指定的应用列表 | |
restore |
无 |
将备份文件恢复到手机中 |
这两个命令可以实现数据的备份以及两台手机间的数据恢复等场景
如下图的操作步骤可以将手机完全备份,备份的过程中可以进行加密,这样恢复的时候也需要密码
文章图片
Adb重定向端口命令
端口映射模型
将开发PC上的端口(1314)重定向到设备的端口(5200)上,这样所有发往PC端口1314的数据都会被转发到设备端口5200。
这个机制可以实现远程控制Android设备应用。
如下图
文章图片
具体命令如下表格,具体应用后续如果使用到再进行补充
子命令 |
参数 |
说明 |
forward --list |
无 |
列出所有套接字连接列表 |
forward |
<
local>
<
remote>
|
重定向端口 |
forward --norebind |
<
local>
<
remote>
|
重定向端口,假如local端口已经被占用则失败 |
forward --remove |
<
remote>
|
移除本地已连接的套接字 |
forward --remove-all |
无 |
移除本地已连接的所有套接字 |
reverse --list |
无 |
列出所有连接设备的反向连接套接字 |
reverse |
<
remote>
<
local>
|
反向连接套接字 |
reverse --norebind |
<
remote>
<
local>
|
反向连接,假如端口被占用则失败 |
reverse --remove |
<
remote>
|
删除一个特定的逆转套接字连接 |
reverse --remove-all |
无 |
删除所有特定的逆转套接字连接 |
Adb无线连接与文件同步
Adb无线连接可以不使用USB来直接调试Android设备,这样就是通过TCP/IP连接来操作设备,其实和操作模拟器的原理是一致的
子命令 |
参数 |
说明 |
connect |
<
host>
[:<
port>
] |
通过TCP/IP连接到设备,如果没有指定端口号则使用5555作为默认端口 |
disconnect |
<
host>
[:<
port>
] |
断开与TCP/IP设备的连接,如果没有指定端口号则使用5555作为默认端口,如果使用这个命令没有附加参数,将端口所有连接的TCP/IP设备 |
sync |
[<
directory>
] |
只要文件发生改变时就会自动从主机拷贝到设备,需要指定环境变量ANDROID_PRODUCT_OUT为同步目录 |
无线连接和同步的具体操作后续完善补充
Adb连接问题 Adb list of devices attachedWindows:
首先安装驱动程序,看设备管理器驱动是否安装成功,不能安装驱动可以借助随便一个手机助手解决
然后打开手机开发者选项中的usb调试,并允许电脑始终对手机usb调试
连不了的时候首先用adb kill-server和adb start-server进行重启adb,或者用命令查看是哪个进程占用了5037端口,然后进行释放
参考:http://blog.csdn.net/johnnycode/article/details/7678083
这时候如果这些准备好的话应该是可以正常连接的,我们的手机序号应该已经写入了Windows下的.android隐藏目录下的adb_usb.ini文件,但还是同样的adb list of devices attached,这时候我们要考虑自动连接写入的adb设备号是否和我们终端使用的adb为同一个路径,在合适的位置写入正确的设备号即可,亲测有效,记得加0x
参考:http://blog.csdn.net/join_12/article/details/45970717
Ubuntu:和Windows下的基本思路是一致的,具体的操作方法参考如下帖子:
http://blog.csdn.net/mr_driver/article/details/8449642
Adb devices offline端口抢占,可以参考上述方法解决
【Appium 自动化测试第一天——基础知识】
推荐阅读
- android如何与asp.net服务端共享session
- Headless Android开发板的调试及远程显示和控制
- call apply bind
- HBuilder打包App方法
- 单页面跳转添加返回和跳转动画(仿app) 只对单页面和跳转有用,我用的是angualr,有不会的可以私信问我。
- 2.android
- Android 如何使edittext默认失去焦点
- springboot之配置文件application
- 取代Android(聊聊谷歌的Fuchsia新操作系统)