安卓手机相对 iPhone 来说生态系统更加开放,可以做各种各样酷酷的事情,例如通过自己电脑上的命令行来刷刷朋友圈之类的,下面我们来看看如何通过 adb 这个神器来控制我们的安卓机吧。
adb ,全称是 Android Debug Bridge ,也就是安卓调试桥,实际上就是一个命令行工具(并没有这么简单),通过它,我们就可以使用一系列命令来控制我们的手机了。
adb 架构
为了更好的理解,我们先来看一下 adb 的基本架构,在整个架构中存在三个重要的组件,client ,ADB Server 和 ADB Daemon 。各个组件之间通过 TCP/IP 或者 USB 进行通信来交流信息。

client
客户端,用于向ADB Server发送命令的工具,可以是命令行工具(Terminal)或者是Android Studio,存在于我们自己电脑上。ADB Server
电脑上的客户端和手机中守护进程之间的中介,类似一座桥(这就是为什么adb叫做桥的原因了),主要负责两者之间的通信,在本地计算机上作为后台进程运行。我们可以通过grepps命令的输出,来发现守护进程adb正在监听的TCP端口。
1 | $ ps -e | grep adb |
- ADB Daemon
存在于手机之上的守护进程,负责接受并处理来自ADB Server的消息。类似的,我们可以通过adb shell ps | grep adbd来寻找手机上的adbd进程及相应的pid。
1 | $ adb shell ps | grep adbd |
也就是说 client 和 adb server 存在于宿主机之上,采用传统的 C/S 模型,而 adb server 通过 TCP 或 USB 来向手机上的 adb daemon 发送消息。
adb 通信
通信肯定会涉及到协议,只有通信的双方都遵守协议才能顺利运行,下面是 abd 协议报文的基本结构,与 HTTP 协议类似,abd 协议同样也处于应用层。传输层既可以采用 USB 来传送,也可以使用我们熟悉的 TCP/IP 。
1 | unsigned command; /* command identifier constant / |
也就是说 adb server 和 adb daemon 之间可以通过两种传输协议来发送 adb 协议报文。
USB
采用 USB 进行传输时,我们需要先将手机通过数据线连接到电脑上,注意手机需要进入开发者模式,并且通过相应的权限设置,如果连接成功的话,在命令行中输入 adb devices 就可以看到连接的设备了。
1 | List of devices attached |
TCP/IP
当然除了 USB 这种传统方式的话,我们还可以利用酷酷的 TCP/IP 进行通信,首先也是通过 USB 连接手机和电脑,并确保两者连接到同一个局域网,在命令行中输入 adb tcpip 5555 使得 adb daemon 监听 5555 端口,然后通过 adb connect <IP_OF_YOUR_ANDROID_PHONE> 命令来连接我们的手机,这里 <IP_OF_YOUR_ANDROID_PHONE> 代表手机的 IP 地址。
1 | $ adb tcpip 5555 |
如果连接成功,再使用 adb devices 命令会获得以下输出,这里的输出和上面有写不同,这里会输出 192.168.1.101:5555 ,这样就说明我们已经成功连接,可以拔掉我们的数据线进行通信了。
1 | List of devices attached |
adb 常用命令
正确连接上了我们的手机之后,我们就可以干各种很酷的事情了。
获取版本信息
1 | $ adb shell getprop ro.build.version.release |
拷贝文件
1 | $ adb push [source] [destination] |
screenshot 和 screenrecord
1 | $ adb shell screencap -p /sdcard/screenshot.png |
1 | $ adb shell screenrecord /sdcard/notabletologin.mp4 |
手势模拟
1 | $ adb shell swipe x1 y1 x2 y2 |
模拟基本操作
1 | // Home btn |