ADB 分层
ADB为 Android Debug Bridge(调试桥)的缩写,本质上是一个 C/S
架构的命令行工具。整个ADB模块由如下几部分组成(详细参见system/core/adb/OVERVIEW.txt和transports.txt):The ADB server(adb):运行在PC端的一个后台应用程序,用来检测Android Devices的连接或去除,进而维护设备状态列表。另外,ADB Server也会负责协调Client、Services和Android
devices之间传输数据。The ADB daemon (adbd) : 运行在Android Devices或Emulator上的后台守护进程。该进程主要是用来连接ADB Server,并通过USB(或者TCP)为adb
clients提供一些services服务。The ADB command-line client: 执行adb 命令的终端。具体来说,会连接adb server并向adb server发送请求命令。若是发现adb server没有启动,则会自动唤起adb server.
Services: adb具备的一些能力可以抽象成服务(services),供The ADB command-line client访问。可以分为 Host Services和Local Services两种
adb默认5555端口分析
-
路径在 system/core/adb/daemon/main.cpp
int adbd_main(int server_port) { bool is_usb = false; if (access(USB_FFS_ADB_EP0, F_OK) == 0) { usb_init(); is_usb = true; } std::string prop_port = android::base::GetProperty("service.adb.tcp.port", ""); if (prop_port.empty()) { prop_port = android::base::GetProperty("persist.adb.tcp.port", ""); } int port; int port; if (sscanf(prop_port.c_str(), "%d", &port) == 1 && port > 0) { D("using port=%d", port); setup_port(port); } else if (!is_usb) { setup_port(DEFAULT_ADB_LOCAL_TRANSPORT_PORT); } return 0; }
- 首先会去判断 service.adb.tcp.port 和 persist.adb.tcp.port中是否配置了端口号,如果没有配置端口号
在去判断是否挂在了 USB_FFS_ADB_EP0,如果挂载了,则会监听 USB_FFS_ADB_EP0,如果没有挂在,则会监听 DEFAULT_ADB_LOCAL_TRANSPORT_PORT=5555端口
基本真机都有EP0,EP1,EP2,节点,模拟器是没有的默认会启动初始化5555并且监听此端口
要彻底关闭和打开ADB
SystemProperties.set("ctl.start", "adbd"); SystemProperties.set("ctl.stop", "adbd");