Android调试桥(ADB, Android Debug Bridge)是一个Android命令行工具,包含在SDK 平台工具包中,adb可以用于连接Android设备,或者模拟器,实现对设备的控制,比如安装和调试应用。和Appium一样,adb也是基于C/S架构实现的。
目录
一、ADB运行原理
adb分为三个部分:PC上的adb client,adb server和手机(也可能是PC上的模拟器)上的adb daemon。这是一个多多连接的设计。即一台PC可以连接多个手机,一台手机也可以连接多个PC。
- Client本质上就是Shell,用来发送命令给Server。发送命令时,首先检测PC上有没有启动Server,如果没有Server,则自动启动一个Server,绑定 TCP 的 5037 端口,然后将命令发送到Server,并不关心命令发送过去以后会怎样。
- ADB Server:运行在PC上的后台程序,目的是检测USB接口何时连接或者移除设备。ADB Server维护着一个“已连接的设备的链表”,并且为每一个设备标记了一个状态:offline,bootloader,recovery或者online;Server一直在做一些循环和等待,,监听从 clients 发来的命令,协调client和Server还有daemon之间的通信。
- ADB Daemon:程序“adbd”作为一个后台进程在Android设备或模拟器系统中运行。它的作用是连接ADB服务器,并且为运行在主机上的客户端提供一些服务;
Client和Server之间通过TCP/IP通信,Server侦听本机的5037端口,Client试图去连接这个端口。基于ADB的工具有 DDMS 、monkey 测试等
- adb源码:https://android.googlesource.com/platform/system/core/+/refs/heads/android10-c2f2-release/adb/
netstat -nao | findstr 5037
二、ADB安装
adb
包含在 Android SDK 平台工具软件包中,有两种方法安装adb工具:
- 使用SDK Manager安装,会安装到
platform-tools
目录下。具体安装方法可参考Appium 介绍及环境安装中的安装Android SDK部分。 - 单独下载平台工具,下载地址:https://developer.android.com/studio/releases/platform-tools。下载完成后解压,添加到环境变量即可。
查看是否安装成功:
$ adb --version
Android Debug Bridge version 1.0.40
Version 4986621
Installed as D:\android-sdk-windows\platform-tools\adb.exe
三、ADB常用命令
1. adb server启动和连接
- 启动 adb server
adb start-server
- 停止 adb server
adb kill-server
- 指定 adb server 的网络端口<adb默认端口为5037>
adb -P <port> start-server
在发送adb命令时,如果没有pc没有启动Server,则会自动启动一个Server,然后将命令发送到Server。
- 通过adb usb打开设备上的tcpip服务并绑定一个端口
adb tcpip 5555 adb -s 611DKBQC22SH2 tcpip 5555 # 设备在 5555 端口监听 TCP/IP 连接
无线连接要将 Android 设备与将运行 adb 的电脑连接到同一个局域网
-
ADB Client通过命令adb connect ip连接远程的终端
adb connect 127.0.0.1:62001 #夜游神模拟器 adb connect 127.0.0.1:7555 #网易mumu模拟器 adb disconnect <device-ip-address> # 断开连接
USB连接
开启Android 设备的开发者选项和 USB 调试模式
2. adb常用命令
以 root 权限运行 adbd
adb root
adb -s 611DKBQC22SH2 root
查看 adb 版本
adb version
查看设备名称
adb devices
重启手机
adb reboot
安装卸载apk包
模拟器可以直接把安装包拖入模拟器进行安装
adb安装卸载方法:
# 卸载
adb uninstall 包名
# 安装
adb install app.apk
adb install -r app.apk # 强制安装
打印手机日志
adb logcat | findstr -i displayed # 打印手机日志
3. 查看appPackage和appActivity
测试某个APP时,通常是先拉起这个APP,需要知道APP包名appPackage,appium启动APP时还需要知道APP某个页面的activity名称appActivity,可以通过adb命令来获取。
获取所有活动
adb shell dumpsys activity | grep tencent # linux
adb shell dumpsys activity | findstr tencent # windows
或者先进入shell环境:
$ adb shell
root@shamu:/ # dumpsys activity | grep tencent
获取当前APP的Package和Activity名:
adb shell dumpsys activity activities | findstr mResumedActivity
例如,打开微信(android 10):
$ adb shell dumpsys activity activities | findstr mResumedActivity
mResumedActivity: ActivityRecord{
3a7bec6 u0 com.tencent.mm/.ui.LauncherUI t50558}
获取最顶层的activity,也可用来获取当前打开应用的Package和Activity名。
adb shell dumpsys activity top
上面的命令会打印大量日志信息,需要过滤一下:
adb shell dumpsys activity | findstr mFocusedActivity
adb shell dumpsys window windows|findstr "mCurrentFocus"
如果是Android 8.0及以上的版本,上面的命令可能不能获取到任何信息,因为没有 mFocusedActivity
和