ADB 分層
ADB為 Android Debug Bridge(調(diào)試橋)的縮寫,本質(zhì)上是一個(gè) C/S
架構(gòu)的命令行工具灼芭。整個(gè)ADB模塊由如下幾部分組成(詳細(xì)參見system/core/adb/OVERVIEW.txt和transports.txt):The ADB server(adb):運(yùn)行在PC端的一個(gè)后臺(tái)應(yīng)用程序有额,用來檢測(cè)Android Devices的連接或去除,進(jìn)而維護(hù)設(shè)備狀態(tài)列表彼绷。另外谆吴,ADB Server也會(huì)負(fù)責(zé)協(xié)調(diào)Client、Services和Android
devices之間傳輸數(shù)據(jù)苛预。The ADB daemon (adbd) : 運(yùn)行在Android Devices或Emulator上的后臺(tái)守護(hù)進(jìn)程句狼。該進(jìn)程主要是用來連接ADB Server,并通過USB(或者TCP)為adb
clients提供一些services服務(wù)热某。The ADB command-line client: 執(zhí)行adb 命令的終端腻菇。具體來說,會(huì)連接adb server并向adb server發(fā)送請(qǐng)求命令昔馋。若是發(fā)現(xiàn)adb server沒有啟動(dòng)筹吐,則會(huì)自動(dòng)喚起adb server.
Services: adb具備的一些能力可以抽象成服務(wù)(services),供The ADB command-line client訪問秘遏∏鹧Γ可以分為 Host Services和Local Services兩種
adb默認(rèn)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; }
- 首先會(huì)去判斷 service.adb.tcp.port 和 persist.adb.tcp.port中是否配置了端口號(hào),如果沒有配置端口號(hào)
在去判斷是否掛在了 USB_FFS_ADB_EP0邦危,如果掛載了洋侨,則會(huì)監(jiān)聽 USB_FFS_ADB_EP0,如果沒有掛在倦蚪,則會(huì)監(jiān)聽 DEFAULT_ADB_LOCAL_TRANSPORT_PORT=5555端口
基本真機(jī)都有EP0希坚,EP1,EP2,節(jié)點(diǎn)陵且,模擬器是沒有的默認(rèn)會(huì)啟動(dòng)初始化5555并且監(jiān)聽此端口
要徹底關(guān)閉和打開ADB
SystemProperties.set("ctl.start", "adbd"); SystemProperties.set("ctl.stop", "adbd");