摘要:
做过安卓移动端手机开发或测试的朋友们,或多或少地听过用过ADB命令。古人云:知其然知其所以然。本篇笔者为大家说明ADB是什么,如何使用,及其背后的原理。
ADB解说
ADB即Android Debug Bridge,是一个让我们与Android模拟器或真机通信的命令行工具,可以在 android sdk/platform-tools路径中或者下载ADB Kits找到这个工具。在实际工作中它可以给我们们很多帮助。
首先我们整理下工作中常用到的ADB命令。
重点说明一下打印日志的方法,这对调试bug非常有帮助。首先,执行命令ADB devices,连接上Android真机后,再执行命令ADB logcat >e:log.txt,这时候可以在APP进行复现bug的操作,操作结束后,按住ctrl+c,退出命令执行。然后在命令行指定的路径下看到新建的log.txt文件。
ADB原理
ADB即Android 调试桥,是一种功能多样的命令行工具,可与设备进行通信。ADB 命令可用于执行各种设备操作,例如安装和调试应用,并提供对 Unix shell(用来在设备上运行各种命令)的访问权限。
它是一种客户端-服务器程序,包括以下三个组件:
Ø 客户端:用于发送命令。客户端在计算机上运行,可以通过发出 ADB 命令从命令行终端调用客户端。
Ø 守护程序 (ADBd) :用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
Ø 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。ADB 包含在 Android SDK 平台工具软件包中。可以使用 SDK 管理器下载此软件包,该管理器会将它安装在 android_sdk/platform-tools/ 下。
当启动某个 ADB 客户端时,该客户端会先检查是否有 ADB 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 ADB 客户端发出的命令。所有ADB客户端均通过端口5037与ADB服务器通信。然后,服务器会与所有正在运行的设备建立连接。它通过扫描奇数号端口查找模拟器。服务器一旦发现 ADB 守护程序 (ADBd),便会与相应的端口建立连接。
每个模拟器都使用一对按顺序排列的端口,用于控制台连接的偶数号端口和用于 ADB 连接的奇数号端口。比如:
手机1,控制台:5554
手机1,ADB:5555
手机2,控制台:5556
手机2,ADB:5557
如上所示,在端口 5555 处与 ADB 连接的模拟器与控制台监听端口为 5554 的手机是同一个。
服务器与所有设备均建立连接后,可以使用ADB命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个ADB客户端的命令,因此可以从任意客户端(或从某个脚本)控制任意设备。