WLAN下进行adb调试
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 连接的奇数号端口。例如:
如上所示,在端口5555处与adb连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。 服务器与所有设备均建立连接后,便可以使用adb命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个adb客户端的命令,因此可以从任意客户端(或从某个脚本)控制任意设备。
使用WLAN进行ADB连接
使用WLAN进行ADB连接的前提仍然是需要有一根USB数据线,但是只要Android设备的WLAN下的IP不变,就可以丢掉数据线了。 1、首先将Android设备和adb主机连接到这两者都可以访问的同一WLAN网络。请注意,并非所有接入点都适用;您可能需要使用防火墙已正确配置为支持adb 的接入点。
2、使用 USB 线将设备连接到主机。
3、设置目标设备以监听端口5555上的TCP/IP连接:
1adb tcpip 5555
4、拔掉连接目标设备的USB线,找到Android设备的IP地址。例如,设置 > WLAN设置 > 高级 > IP地址下找到 IP 地址。
5、通过 IP 地址连接到设备:
1adb connect ${device_ip_address}
6、确认主机已连接到目标设备:
1adb devices -l
如果 adb 连接断开: 确保主机仍与Android设备连接到同一个WLAN网络,通过再次执行adbconnect 步骤重新连接。如果上述操作未解决问题,则需要重置adb主机:
1adb kill-server
下面是我通过Wi-Fi连接两台设备的示例:
1# 此时只有一台小米通过USB进行ABD连接
2# adb devices -l 用于查看处于连接中的设备
3changlinzou@mac ~ % adb devices -l
4List of devices attached
5a9c5d217 device usb:339869696X product:gauguinpro model:M2007J17C device:gauguinpro transport_id:72
6
7# 设置小米这台设备以监听端口5555上的TCP/IP连接:
8changlinzou@mac ~ % adb tcpip 5555
9restarting in TCP mode port: 5555
10
11# 此时移除USB/type-c等有线连接
12changlinzou@mac ~ % adb connect 10.73.13.237
13connected to 10.73.13.237:5555
14
15# 查看连接结果
16changlinzou@mac ~ % adb devices -l
17List of devices attached
1810.73.13.237:5555 device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
19
20# 再通过USB连接一台华为的设备
21changlinzou@mac ~ % adb devices -l
22List of devices attached
23PWHNW19709002241 device usb:339869696X product:GLK-AL00 model:GLK_AL00 device:HWGLK transport_id:78
2410.73.13.237:5555 device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
25
26# adb -s可以指定对设备进行操作
27changlinzou@mac ~ % adb -s PWHNW19709002241 shell
28HWGLK:/ $ exit
29
30# 给华为这台设备设置监听端口5557上的TCP/IP连接:
31changlinzou@mac ~ % adb -s PWHNW19709002241 tcpip 5557
32restarting in TCP mode port: 5557
33
34changlinzou@mac ~ % adb devices -l
35List of devices attached
36PWHNW19709002241 device usb:339869696X product:GLK-AL00 model:GLK_AL00 device:HWGLK transport_id:79
3710.73.13.237:5555 device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
38
39# 此时移除华为这台设备的USB连接
40changlinzou@mac ~ % adb devices -l
41List of devices attached
4210.73.13.237:5555 device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
43changlinzou@mac ~ % adb connect 10.73.14.11
44failed to connect to '10.73.14.11:5555': Connection refused
45
46# 多台设备需要指定具体端口,如下
47changlinzou@mac ~ % adb connect 10.73.14.11:5557
48connected to 10.73.14.11:5557
49
50# 连接成功
51changlinzou@mac ~ % adb devices -l
52List of devices attached
5310.73.13.237:5555 device product:gauguinpro model:M2007J17C device:gauguinpro transport_id:77
5410.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