WLAN下进行adb调试

1,271 阅读5分钟

Android 调试桥 (Android Debug Bridge,简称 ADB)。本文主要是记录如何在 WLAN 网络下进行 ABD 连接设备以及一些常用的 ADB 命令,还有 ADB 的组成以及原理简要说明。

ADB 的组成

客户端:用于发送命令,客户端在开发计算机上运行,可以通过 adb 从命令行终端调用 Android 设备。
守护程序 (adbd):用于在 Android 设备上运行命令,守护程序在每个设备上作为后台进程运行。
服务器:用于管理客户端与守护程序之间的通信,服务器在开发机器上作为后台进程运行。

ADB 的原理

当启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令,所有 adb 客户端均通过端口 5037 与 adb 服务器通信。可以看成是 MySQL 与 3306 的端口的关系。

然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:

模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推

如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。
服务器与所有设备均建立连接后,便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此可以从任意客户端(或从某个脚本)控制任意设备。

使用 WLAN 进行 ADB 连接

使用 WLAN 进行 ADB 连接的前提仍然是需要有一根 USB 数据线,但是只要 Android 设备的 WLAN 下的 IP 不变,就可以丢掉数据线了。
1、首先将 Android 设备和 adb 主机连接到这两者都可以访问的同一 WLAN 网络。请注意,并非所有接入点都适用;您可能需要使用防火墙已正确配置为支持 adb 的接入点。

2、使用 USB 线将设备连接到主机。

3、设置目标设备以监听端口 5555 上的 TCP/IP 连接:

adb tcpip 5555

4、拔掉连接目标设备的 USB 线,找到 Android 设备的 IP 地址。例如,设置 > WLAN 设置 > 高级 > IP 地址下找到 IP 地址。

5、通过 IP 地址连接到设备:

adb connect ${device_ip_address}

6、确认主机已连接到目标设备:

adb devices -l

如果 adb 连接断开:
确保主机仍与 Android 设备连接到同一个 WLAN 网络,通过再次执行 adbconnect 步骤重新连接。如果上述操作未解决问题,则需要重置 adb 主机:

adb kill-server

下面是我通过 Wi-Fi 连接两台设备的示例:

# 此时只有一台小米通过USB进行ABD连接
# adb devices -l 用于查看处于连接中的设备
changlinzou@mac ~ % adb devices -l
List of devices attached
a9c5d217               device usb:339869696X product:gauguinpro model:M2007J17C device:gauguinpro transport_id:72

# 设置小米这台设备以监听端口5555上的TCP/IP连接:
changlinzou@mac ~ % adb tcpip 5555
restarting in TCP mode port: 5555

# 此时移除USB/type-c等有线连接
changlinzou@mac ~ % adb connect 10.73.13.237
connected to 10.73.13.237:5555

# 查看连接结果
changlinzou@mac ~ % adb devices -l          
List of devices attached
10.73.13.237:5555      device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77

# 再通过USB连接一台华为的设备
changlinzou@mac ~ % adb devices -l
List of devices attached
PWHNW19709002241       device usb:339869696X product:GLK-AL00 model:GLK_AL00 device:HWGLK transport_id:78
10.73.13.237:5555      device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77

# adb -s可以指定对设备进行操作
changlinzou@mac ~ % adb -s PWHNW19709002241 shell
HWGLK:/ $ exit

# 给华为这台设备设置监听端口5557上的TCP/IP连接:
changlinzou@mac ~ % adb -s PWHNW19709002241 tcpip 5557
restarting in TCP mode port: 5557

changlinzou@mac ~ % adb devices -l                    
List of devices attached
PWHNW19709002241       device usb:339869696X product:GLK-AL00 model:GLK_AL00 device:HWGLK transport_id:79
10.73.13.237:5555      device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77

# 此时移除华为这台设备的USB连接
changlinzou@mac ~ % adb devices -l         
List of devices attached
10.73.13.237:5555      device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
changlinzou@mac ~ % adb connect 10.73.14.11
failed to connect to '10.73.14.11:5555': Connection refused

# 多台设备需要指定具体端口,如下
changlinzou@mac ~ % adb connect 10.73.14.11:5557
connected to 10.73.14.11:5557

# 连接成功
changlinzou@mac ~ % adb devices -l              
List of devices attached
10.73.13.237:5555      device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
10.73.14.11:5557       device product:GLK-AL00 model:GLK_AL00 device:HWGLK transport_id:80

在 AndroidStudio 中也是可以成功看见两台设备的。

ADB 常用命令

虽然使用 GUI 操作起来比较方便,但是有时候还是需要通过命令来帮我们完成一些事情,所以还是记一下 ADB 的常用命令,查起来比较方便。

启动 / 关闭 adb
关闭 adb 服务 adb kill-server
开启 adb 服务 adb start-server

查看手机设备 adb devices
查看手机设备 adb devices -l

安装 / 卸载应用
安装本地应用 adb install apk文件的绝对路径
保留数据及缓存文件安装新包 adb install -r apk文件的绝对路径
卸载应用 adb uninstall 应用包名

使用 adb 读取 / 写入手机文件
保存手机中文件到本地 adb pull 手机中路径 电脑路径
将本地文件传入手机 adb push 电脑路径 手机中路径

进入 shell 模式 adb shell

以下命令都是在 shell 里面执行的

列出手机上面所有安装的 apk 包名 pm list packages
列出手机上面所有安装的第三方 apk 包名 pm list packages -3
在包名的基础上面列出 apk 的路径 pm list packages -f
查看指定包名 app 的详细信息 dumpsys package package-name
截屏并保存文件在手机 /system/bin/screencap -p /sdcard/xx.png
清除缓存数据 pm clear com.xxx.xxx
指定 APP 产生随机事件 100 次 monkey -p 包名 100