wordpress 黃藍(lán) 現(xiàn)代企業(yè)教程seo推廣排名網(wǎng)站
adbclient adbserver adbd 三者之間的關(guān)系
adbclient, adbserver, 和 adbd 是 Android Debug Bridge (ADB) 組件中的三個(gè)主要組成部分。它們各自扮演著不同的角色,共同協(xié)作來實(shí)現(xiàn)設(shè)備調(diào)試和管理的功能。下面我將詳細(xì)介紹這三個(gè)組件之間的關(guān)系:
adbd (Android Debug Bridge Daemon):
作用: adbd 是運(yùn)行在 Android 設(shè)備上的守護(hù)進(jìn)程(后臺(tái)服務(wù)),負(fù)責(zé)處理來自 adb 工具的所有命令。
位置: 當(dāng)您在 Android 設(shè)備或模擬器上運(yùn)行 adb 命令時(shí),這些命令最終會(huì)被傳遞給設(shè)備上的 adbd 服務(wù)。
啟動(dòng): adbd 通常在設(shè)備啟動(dòng)時(shí)自動(dòng)啟動(dòng),或者通過命令行工具如 adb start-server 或 adb tcpip 5555 啟動(dòng)。
adbserver (ADB Server):
作用: adbserver 是運(yùn)行在開發(fā)機(jī)器上的服務(wù),負(fù)責(zé)管理與多個(gè)設(shè)備的連接,并將命令轉(zhuǎn)發(fā)給正確的設(shè)備。
位置: adbserver 運(yùn)行在開發(fā)機(jī)器上,通常與 adbclient 在同一臺(tái)機(jī)器上。
啟動(dòng): 當(dāng)您首次運(yùn)行 adb 命令時(shí),adbserver 會(huì)在后臺(tái)啟動(dòng)(如果尚未運(yùn)行)。您也可以通過 adb start-server 顯式啟動(dòng)它。
adbclient (ADB Client):
作用: adbclient 是您實(shí)際運(yùn)行命令的客戶端程序,它向 adbserver 發(fā)送命令,并從 adbserver 接收響應(yīng)。
位置: adbclient 也是運(yùn)行在開發(fā)機(jī)器上,是您在命令行中直接使用的工具。
啟動(dòng): 每次您在命令行中輸入 adb 命令時(shí),都會(huì)啟動(dòng)一個(gè) adbclient 實(shí)例。
關(guān)系概述:
當(dāng)您在開發(fā)機(jī)器上運(yùn)行 adb 命令時(shí),您實(shí)際上是在與 adbclient 交互。
- adbclient 會(huì)將命令發(fā)送給 adbserver,后者負(fù)責(zé)管理與設(shè)備的連接。
- adbserver 將命令轉(zhuǎn)發(fā)給目標(biāo)設(shè)備上的 adbd 服務(wù)。
- adbd 處理命令并在設(shè)備上執(zhí)行相應(yīng)的操作,然后將結(jié)果返回給 adbserver。
- adbserver 再將結(jié)果轉(zhuǎn)發(fā)回 adbclient,最后顯示在您的命令行界面上。
示例:
假設(shè)您要在設(shè)備上安裝一個(gè)應(yīng)用,流程如下:
您運(yùn)行 adb install <apk_path>。
- adbclient 收到命令后將其轉(zhuǎn)發(fā)給 adbserver。
- adbserver 查找連接的設(shè)備,并確定要將命令發(fā)送給哪個(gè)設(shè)備。
- adbserver 將安裝命令發(fā)送給目標(biāo)設(shè)備上的 adbd 服務(wù)。
- adbd 在設(shè)備上執(zhí)行安裝操作并將結(jié)果返回給 adbserver。
- adbserver 將結(jié)果返回給 adbclient。
- adbclient 顯示安裝結(jié)果在命令行界面上。
雷電模擬器和主機(jī)默認(rèn)網(wǎng)絡(luò)模式
雷電模擬器是一款用于在個(gè)人電腦上運(yùn)行 Android 應(yīng)用程序的模擬器軟件。它提供了多種網(wǎng)絡(luò)模式供用戶選擇,以滿足不同的使用需求。以下是雷電模擬器中幾種常見的網(wǎng)絡(luò)模式及其說明:
NAT (Network Address Translation) 模式:
特點(diǎn): NAT 模式是最常用的網(wǎng)絡(luò)模式之一,它可以自動(dòng)分配一個(gè)內(nèi)部 IP 地址給模擬器,并允許模擬器通過宿主機(jī)(即運(yùn)行模擬器的 PC)的網(wǎng)絡(luò)連接訪問互聯(lián)網(wǎng)。
- 優(yōu)點(diǎn): 配置簡(jiǎn)單,不需要額外的網(wǎng)絡(luò)設(shè)置,適合大多數(shù)用戶。
- 缺點(diǎn): 可能會(huì)遇到一些限制,比如某些應(yīng)用可能無法正常工作或存在網(wǎng)絡(luò)延遲問題。
Bridge (橋接) 模式:
特點(diǎn): 在橋接模式下,模擬器將獲得與宿主機(jī)相同的網(wǎng)絡(luò)配置,并直接連接到網(wǎng)絡(luò),就好像它是一個(gè)獨(dú)立的設(shè)備一樣。
-
優(yōu)點(diǎn): 提供更好的網(wǎng)絡(luò)性能和穩(wěn)定性,適用于需要更高網(wǎng)絡(luò)質(zhì)量的應(yīng)用場(chǎng)景。
-
缺點(diǎn): 需要手動(dòng)配置 IP 地址等網(wǎng)絡(luò)參數(shù),對(duì)于普通用戶來說可能較為復(fù)雜。
Host-Only (僅限主機(jī)) 模式:
特點(diǎn): 在此模式下,模擬器只能與宿主機(jī)通信,不能直接訪問外部網(wǎng)絡(luò)。
用途: 主要用于測(cè)試和開發(fā)目的,當(dāng)需要在模擬器與宿主機(jī)之間進(jìn)行數(shù)據(jù)交換但不希望模擬器直接連接互聯(lián)網(wǎng)時(shí)使用。
-
優(yōu)點(diǎn): 安全性較高,適合于安全敏感的應(yīng)用開發(fā)。
-
缺點(diǎn): 無法訪問外部網(wǎng)絡(luò)資源。
默認(rèn)情況下,雷電模擬器通常會(huì)使用 NAT 模式作為其網(wǎng)絡(luò)模式。如果您需要更改網(wǎng)絡(luò)模式,可以在雷電模擬器的設(shè)置中找到相應(yīng)的選項(xiàng)。具體步驟如下:
打開雷電模擬器。
在模擬器界面右上角點(diǎn)擊“設(shè)置”圖標(biāo)(齒輪形狀)。
在設(shè)置菜單中找到“網(wǎng)絡(luò)設(shè)置”或類似命名的選項(xiàng)。
在網(wǎng)絡(luò)設(shè)置中選擇您想要使用的網(wǎng)絡(luò)模式。
那為什么連接模擬器的時(shí)候輸入的卻是主機(jī)的ip
當(dāng)您通過網(wǎng)絡(luò)連接到模擬器時(shí),您通常會(huì)使用模擬器所在主機(jī)(即運(yùn)行模擬器的計(jì)算機(jī))的 IP 地址,而不是模擬器本身的 IP 地址。這是因?yàn)槟M器通常是在主機(jī)操作系統(tǒng)上作為一個(gè)應(yīng)用程序運(yùn)行的,它通過主機(jī)的網(wǎng)絡(luò)接口與外界通信。
詳細(xì)解釋:
模擬器的工作原理:
- 模擬器是在主機(jī)操作系統(tǒng)上運(yùn)行的一個(gè)應(yīng)用程序,它模擬了一個(gè)完整的 Android 設(shè)備環(huán)境。
- 模擬器通過主機(jī)的網(wǎng)絡(luò)接口進(jìn)行網(wǎng)絡(luò)通信,這意味著它實(shí)際上并不擁有自己的 IP 地址。
網(wǎng)絡(luò)配置:
- 當(dāng)您配置模擬器通過網(wǎng)絡(luò)連接時(shí),您實(shí)際上是告訴模擬器上的 adbd 服務(wù)監(jiān)聽特定的 TCP 端口(例如 5555)。
- 一旦 adbd 服務(wù)開始監(jiān)聽該端口,您就可以從主機(jī)或其他網(wǎng)絡(luò)中的計(jì)算機(jī)通過該端口與模擬器上的 adbd 服務(wù)進(jìn)行通信。
連接到模擬器:
當(dāng)您想要通過網(wǎng)絡(luò)連接到模擬器時(shí),您需要使用主機(jī)的 IP 地址,因?yàn)槟M器是通過主機(jī)的網(wǎng)絡(luò)接口與外界通信的。
您可以通過以下命令連接到模擬器:
adb connect <主機(jī)IP>:<端口號(hào)>
其中 <主機(jī)IP> 是運(yùn)行模擬器的計(jì)算機(jī)的 IP 地址,而 <端口號(hào)> 通常是 5555 或您配置的其他端口。
示例:
假設(shè)您正在運(yùn)行模擬器的主機(jī) IP 地址為 192.168.1.100,并且您已經(jīng)配置了模擬器上的 adbd 服務(wù)監(jiān)聽 5555 端口。
配置模擬器監(jiān)聽端口:
在模擬器的命令行中運(yùn)行以下命令:
adb tcpip 5555
從開發(fā)機(jī)器連接到模擬器:
在開發(fā)機(jī)器上運(yùn)行以下命令來連接到模擬器:
adb connect 192.168.1.100:5555
adb connect IP地址:端口 什么意思
adb connect IP地址:端口 是一個(gè)命令,用于通過網(wǎng)絡(luò)連接到運(yùn)行 Android Debug Bridge (ADB) 服務(wù)的遠(yuǎn)程設(shè)備。這個(gè)命令允許您在沒有物理 USB 連接的情況下調(diào)試和管理 Android 設(shè)備。
這里是對(duì)命令各個(gè)部分的解釋:
- adb: 是 Android Debug Bridge 的命令行工具,通常位于開發(fā)者的計(jì)算機(jī)上。
- connect: 是 adb 命令的一個(gè)子命令,用于建立與遠(yuǎn)程設(shè)備的網(wǎng)絡(luò)連接。
- IP地址: 是遠(yuǎn)程 Android 設(shè)備的網(wǎng)絡(luò) IP 地址。這可以是局域網(wǎng)內(nèi)的 IP 地址,也可以是互聯(lián)網(wǎng)上的 IP
地址(需要適當(dāng)?shù)木W(wǎng)絡(luò)配置)。 - 端口: 是遠(yuǎn)程設(shè)備上 ADB 服務(wù)監(jiān)聽的 TCP 端口號(hào),默認(rèn)情況下通常是 5555。
當(dāng)你運(yùn)行 adb connect IP地址:端口 命令時(shí),你的計(jì)算機(jī)會(huì)嘗試通過指定的 IP 地址和端口與遠(yuǎn)程設(shè)備建立連接。如果成功連接,你就可以使用各種 adb 命令來管理該設(shè)備了,例如安裝應(yīng)用、查看日志等。
例如,如果你的設(shè)備 IP 地址為 192.168.1.100 并且使用默認(rèn)端口 5555,你可以這樣連接:
adb connect 192.168.1.100:5555
確保遠(yuǎn)程設(shè)備已經(jīng)啟動(dòng)了 ADB 服務(wù),并且允許通過網(wǎng)絡(luò)連接。通??梢酝ㄟ^在設(shè)備上運(yùn)行以下命令來啟動(dòng) ADB 服務(wù):
adb tcpip 5555
請(qǐng)注意,為了成功進(jìn)行網(wǎng)絡(luò)連接,你的計(jì)算機(jī)和 Android 設(shè)備需要在同一個(gè)局域網(wǎng)內(nèi)或者有適當(dāng)?shù)穆酚稍O(shè)置以允許跨網(wǎng)絡(luò)通信。
adb connect 192.168.1.100:5555 連接的到底是adbserver還是adbd
當(dāng)您運(yùn)行 adb connect 192.168.1.100:5555 命令時(shí),您實(shí)際上是在通過網(wǎng)絡(luò)連接到目標(biāo)設(shè)備上的 adbd 服務(wù)。這個(gè)過程涉及到了 adbclient 和 adbserver,但最終連接的目標(biāo)是設(shè)備上的 adbd 服務(wù)。下面是詳細(xì)的流程:
運(yùn)行 adb connect 192.168.1.100:5555:
您在開發(fā)機(jī)器上運(yùn)行這個(gè)命令。
命令執(zhí)行流程:
- adbclient 收到命令后,會(huì)將命令發(fā)送給 adbserver。
- adbserver 負(fù)責(zé)管理與設(shè)備的連接,并將連接請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo) IP 地址和端口(在這個(gè)例子中是
192.168.1.100:5555)。 - adbserver 通過網(wǎng)絡(luò)嘗試連接到 192.168.1.100:5555 上的 adbd 服務(wù)。
- 如果連接成功,adbd 服務(wù)將開始與 adbserver 通信。
連接成功后的狀態(tài):
成功連接后,adbserver 會(huì)記住這個(gè)連接,并將后續(xù)的 adb 命令轉(zhuǎn)發(fā)給目標(biāo)設(shè)備上的 adbd 服務(wù)。
adbd 服務(wù)將處理這些命令,并將結(jié)果返回給 adbserver。
總結(jié)起來,當(dāng)您運(yùn)行 adb connect 192.168.1.100:5555 時(shí),您實(shí)際上是在通過網(wǎng)絡(luò)連接到設(shè)備上的 adbd 服務(wù)。adbclient 和 adbserver 在本地機(jī)器上負(fù)責(zé)發(fā)起和管理這個(gè)連接過程。
流程概覽:
- adbclient: 您在命令行中使用的工具,用于發(fā)送命令。
- adbserver: 運(yùn)行在開發(fā)機(jī)器上,管理與設(shè)備的連接,并轉(zhuǎn)發(fā)命令。
- adbd: 運(yùn)行在 Android 設(shè)備上,接收并執(zhí)行來自 adbserver 的命令。
adb tcpip 5555修改是adbserver還是adbd
命令 adb tcpip 5555 是用來配置 Android 設(shè)備上的 adbd 服務(wù)(即 Android Debug Bridge Daemon)監(jiān)聽特定的 TCP 端口(在這里是 5555 端口),以便通過網(wǎng)絡(luò)接收來自 adb 客戶端的連接請(qǐng)求。
步驟詳解:
運(yùn)行 adb tcpip 5555:
- 這個(gè)命令需要在 Android 設(shè)備或模擬器上運(yùn)行。您可以通過連接設(shè)備到計(jì)算機(jī)并通過 USB 使用 adb
命令來執(zhí)行,也可以在模擬器內(nèi)部通過命令行工具執(zhí)行。 - 當(dāng)您在命令行中輸入 adb tcpip 5555 時(shí),您實(shí)際上是在與設(shè)備上的 adbd 服務(wù)進(jìn)行交互。
命令解析:
- adb: 是 Android Debug Bridge 的命令行工具,它運(yùn)行在開發(fā)機(jī)器上。
- tcpip: 是 adb 命令的一個(gè)子命令,用于配置 adbd 監(jiān)聽 TCP 端口。
- 5555: 是您想要 adbd 監(jiān)聽的 TCP 端口號(hào)。
命令執(zhí)行:
- 當(dāng)您運(yùn)行 adb tcpip 5555 時(shí),adb 客戶端會(huì)將命令發(fā)送給設(shè)備上的 adbd 服務(wù)。
- adbd 服務(wù)收到命令后,會(huì)配置自己開始監(jiān)聽 5555 端口,以便接收來自網(wǎng)絡(luò)的連接請(qǐng)求。
示例:
假設(shè)您的 Android 設(shè)備已通過 USB 連接到開發(fā)機(jī)器,并且您想要通過網(wǎng)絡(luò)連接到設(shè)備。
在開發(fā)機(jī)器上運(yùn)行:
- 首先,您需要通過 USB 連接設(shè)備,并確保 adb 能夠識(shí)別到設(shè)備。您可以通過運(yùn)行 adb devices 來檢查是否識(shí)別到了設(shè)備。
- 然后,您可以在命令行中運(yùn)行
adb tcpip 5555
來配置設(shè)備上的 adbd 服務(wù)監(jiān)聽 5555 端口。
在設(shè)備上運(yùn)行:
如果您正在使用模擬器,您可以在模擬器的命令行中直接運(yùn)行 adb tcpip 5555。
結(jié)果:
一旦 adbd 開始監(jiān)聽 5555 端口,您就可以從另一臺(tái)計(jì)算機(jī)(只要在同一局域網(wǎng)內(nèi))使用 adb connect 命令來連接到該設(shè)備。例如,如果設(shè)備的 IP 地址是 192.168.1.100,則可以通過以下命令連接到設(shè)備:
adb connect 192.168.1.100:5555
總結(jié)起來,adb tcpip 5555 命令的作用是告訴設(shè)備上的 adbd 服務(wù)開始監(jiān)聽 5555 端口,從而可以通過網(wǎng)絡(luò)接收 adb 連接請(qǐng)求。希望這有助于澄清您的疑問!如果有更多問題,請(qǐng)隨時(shí)提問。
當(dāng)您運(yùn)行 adb tcpip 5555 時(shí),adb 客戶端會(huì)將命令發(fā)送給設(shè)備上的 adbd 服務(wù)。到底是發(fā)給adbserver還是adbd
當(dāng)您運(yùn)行 adb tcpip 5555 命令時(shí),實(shí)際上是由 adb 客戶端(adbclient)將命令發(fā)送給 adbserver,然后由 adbserver 負(fù)責(zé)將命令轉(zhuǎn)發(fā)給目標(biāo)設(shè)備上的 adbd 服務(wù)。
下面是詳細(xì)的步驟和流程:
運(yùn)行 adb tcpip 5555:
您在開發(fā)機(jī)器上運(yùn)行這個(gè)命令。
命令執(zhí)行流程:
- adbclient 收到命令后,會(huì)將命令發(fā)送給 adbserver。
- adbserver 接收到命令后,查找連接的設(shè)備,并確定要將命令發(fā)送給哪個(gè)設(shè)備。
- adbserver 將 tcpip 5555 命令轉(zhuǎn)發(fā)給目標(biāo)設(shè)備上的 adbd 服務(wù)。
- adbd 服務(wù)接收到命令后,開始監(jiān)聽 5555 端口。
因此,當(dāng)您運(yùn)行 adb tcpip 5555 時(shí),實(shí)際上是通過 adbclient 和 adbserver 的配合將命令發(fā)送給目標(biāo)設(shè)備上的 adbd 服務(wù)。adbserver 負(fù)責(zé)管理和轉(zhuǎn)發(fā)命令到正確的設(shè)備。
總結(jié):
- adbclient: 這是您在命令行中使用的工具,用于發(fā)送命令。
- adbserver: 運(yùn)行在開發(fā)機(jī)器上,管理與設(shè)備的連接,并轉(zhuǎn)發(fā)命令。
- adbd: 運(yùn)行在 Android 設(shè)備上,接收并執(zhí)行來自 adbserver 的命令。
所以,當(dāng)您運(yùn)行 adb tcpip 5555 時(shí),實(shí)際上是 adbclient 將命令發(fā)送給 adbserver,而 adbserver 將命令轉(zhuǎn)發(fā)給設(shè)備上的 adbd 服務(wù)。
adb tcpip 5555 如果由多個(gè)設(shè)備,這個(gè)命令也沒有指明哪個(gè)設(shè)備,怎么知道設(shè)置的是哪個(gè)設(shè)備
當(dāng)您運(yùn)行 adb tcpip 5555 命令時(shí),如果沒有明確指定設(shè)備,adb 將會(huì)選擇當(dāng)前選定的設(shè)備來執(zhí)行這個(gè)命令。如果您有多個(gè)設(shè)備連接到開發(fā)機(jī)器,您需要指定一個(gè)設(shè)備來執(zhí)行這個(gè)命令。下面是如何指定特定設(shè)備的方法:
指定設(shè)備的步驟:
列出所有連接的設(shè)備:
首先,運(yùn)行 adb devices 命令來列出所有連接的設(shè)備及其 ID。
您將會(huì)看到類似于以下的輸出:
List of devices attached
1234567890abcdef device
0987654321abcdef device
選擇一個(gè)設(shè)備:
根據(jù)設(shè)備 ID 選擇一個(gè)設(shè)備。例如,如果您想選擇 ID 為 1234567890abcdef 的設(shè)備,您可以使用 -s 選項(xiàng)來指定設(shè)備。
運(yùn)行 adb tcpip 5555
命令:
使用 -s 選項(xiàng)加上設(shè)備 ID 來運(yùn)行 adb tcpip 5555 命令:
adb -s 1234567890abcdef tcpip 5555
這條命令會(huì)告訴設(shè)備 ID 為 1234567890abcdef 的設(shè)備上的 adbd 服務(wù)開始監(jiān)聽 5555 端口。
示例:
假設(shè)您有兩個(gè)設(shè)備連接到開發(fā)機(jī)器,設(shè)備 ID 分別為 1234567890abcdef 和 0987654321abcdef。您想要將設(shè)備 ID 為 1234567890abcdef 的設(shè)備配置為監(jiān)聽 5555 端口,以便通過網(wǎng)絡(luò)連接到它。您可以按照以下步驟操作:
列出連接的設(shè)備:
adb devices
輸出可能會(huì)是:
List of devices attached
1234567890abcdef device
0987654321abcdef device
指定設(shè)備并運(yùn)行 adb tcpip 5555
:
adb -s 1234567890abcdef tcpip 5555
這條命令將告訴設(shè)備 ID 為 1234567890abcdef 的設(shè)備上的 adbd 服務(wù)開始監(jiān)聽 5555 端口。
驗(yàn)證配置:
您可以再次運(yùn)行 adb devices
來確認(rèn)設(shè)備的狀態(tài)。
如果設(shè)備已成功配置為通過網(wǎng)絡(luò)接收命令,您將看到類似以下的輸出:
List of devices attached
1234567890abcdef tcpip:5555
0987654321abcdef device
斷開設(shè)備呢
當(dāng)您完成了通過網(wǎng)絡(luò)連接到 Android 設(shè)備的操作后,您可能需要斷開網(wǎng)絡(luò)連接。這可以通過以下兩種方式完成:
- 斷開網(wǎng)絡(luò)連接:
您可以使用 adb disconnect 命令來斷開與特定設(shè)備的網(wǎng)絡(luò)連接。例如,如果您之前通過 IP 地址 192.168.1.100 和端口 5555 連接到設(shè)備,您可以運(yùn)行以下命令來斷開連接:
adb disconnect 192.168.1.100:5555
停止 adbd 服務(wù)監(jiān)聽 TCP 端口:
如果您想讓設(shè)備停止監(jiān)聽 TCP 端口(例如 5555),您可以重新啟動(dòng) adbd 服務(wù),讓它不再監(jiān)聽該端口。這通常在設(shè)備上執(zhí)行,而不是在開發(fā)機(jī)器上。如果您可以通過 SSH 或其他方式訪問設(shè)備的命令行,您可以運(yùn)行以下命令:
adb shell stop-adb
或者,如果您想重新啟動(dòng) adbd 服務(wù),使其回到默認(rèn)狀態(tài)(監(jiān)聽本地 USB 連接),您可以在設(shè)備上運(yùn)行:
adb shell start-adb
請(qǐng)注意,start-adb 和 stop-adb 命令不是標(biāo)準(zhǔn)的 adb 命令,而是需要在設(shè)備上運(yùn)行的 shell 命令。在大多數(shù) Android 設(shè)備上,您可能需要使用 adb shell 來運(yùn)行這些命令。
adb forward的原理
adb forward 命令用于在開發(fā)機(jī)器和 Android 設(shè)備之間建立一個(gè)端口轉(zhuǎn)發(fā)隧道。它允許您將本地開發(fā)機(jī)器上的端口映射到設(shè)備上的端口,從而可以輕松地在兩者之間傳輸數(shù)據(jù)。這對(duì)于調(diào)試應(yīng)用程序和服務(wù)非常有用,因?yàn)樗梢宰屇苯訌拈_發(fā)機(jī)器訪問設(shè)備上的服務(wù)。
adb forward 的工作原理:
創(chuàng)建端口映射:
- 當(dāng)您運(yùn)行 adb forward 命令時(shí),您實(shí)際上是在創(chuàng)建一個(gè)端口映射,將開發(fā)機(jī)器上的端口與設(shè)備上的端口綁定在一起。
- 例如,您可以將開發(fā)機(jī)器上的端口 8000 映射到設(shè)備上的端口 8000。
命令格式:
adb forward 命令的基本格式如下:
adb forward <本地端口> <遠(yuǎn)程端口>
其中 <本地端口> 是開發(fā)機(jī)器上的端口,而 <遠(yuǎn)程端口> 是設(shè)備上的端口。
端口類型:
adb forward 支持兩種類型的端口轉(zhuǎn)發(fā):
TCP 端口: 使用 tcp:<端口> 表示。
本地 Unix 域套接字: 使用 localabstract:<socket_name> 或 localreserved:<socket_name> 表示。
示例:
將開發(fā)機(jī)器上的 TCP 端口 8000 映射到設(shè)備上的 TCP 端口 8000:
adb forward tcp:8000 tcp:8000
端口轉(zhuǎn)發(fā)的用途:
- 調(diào)試網(wǎng)絡(luò)服務(wù): 您可以使用 adb forward 來調(diào)試設(shè)備上的網(wǎng)絡(luò)服務(wù),例如 HTTP 服務(wù)器或 WebSocket 服務(wù)器。
- 訪問設(shè)備上的服務(wù): 您可以使用 adb forward 來訪問設(shè)備上運(yùn)行的服務(wù),例如 Telnet 服務(wù)器或 SSH 服務(wù)器。
- 代理和網(wǎng)絡(luò)測(cè)試: 您可以將設(shè)備的網(wǎng)絡(luò)流量代理到開發(fā)機(jī)器上的代理服務(wù)器,以進(jìn)行網(wǎng)絡(luò)測(cè)試和調(diào)試。
如何使用 adb forward:
列出當(dāng)前轉(zhuǎn)發(fā)的端口:
您可以使用adb forward --list
命令來查看當(dāng)前所有轉(zhuǎn)發(fā)的端口。
adb forward --list
刪除端口映射:
如果您想要?jiǎng)h除一個(gè)端口映射,可以使用 adb forward --remove 命令。
adb forward --remove tcp:8000
如果您想要?jiǎng)h除所有端口映射,可以使用 adb forward --remove-all 命令。
adb forward --remove-all
使用示例:
假設(shè)您想要調(diào)試設(shè)備上的一個(gè) HTTP 服務(wù)器,該服務(wù)器在端口 8080 上運(yùn)行。
首先,在設(shè)備上啟動(dòng) HTTP 服務(wù)器。
然后,在開發(fā)機(jī)器上運(yùn)行以下命令來創(chuàng)建端口映射:
adb forward tcp:8000 tcp:8080
adb forward 如果由多個(gè)設(shè)備,綁定的是誰呢
當(dāng)您運(yùn)行 adb forward 命令時(shí),如果沒有明確指定設(shè)備,adb 將會(huì)選擇當(dāng)前選定的設(shè)備來執(zhí)行這個(gè)命令。如果您有多個(gè)設(shè)備連接到開發(fā)機(jī)器,您需要指定一個(gè)設(shè)備來執(zhí)行這個(gè)命令。下面是如何指定特定設(shè)備的方法:
指定設(shè)備的步驟:
列出所有連接的設(shè)備:
首先,運(yùn)行 adb devices 命令來列出所有連接的設(shè)備及其 ID。
您將會(huì)看到類似于以下的輸出:
List of devices attached
1234567890abcdef device
0987654321abcdef device
選擇一個(gè)設(shè)備:
根據(jù)設(shè)備 ID 選擇一個(gè)設(shè)備。例如,如果您想選擇 ID 為 1234567890abcdef 的設(shè)備,您可以使用 -s 選項(xiàng)來指定設(shè)備。
運(yùn)行 adb forward 命令:
使用 -s 選項(xiàng)加上設(shè)備 ID 來運(yùn)行 adb forward 命令。例如,如果您想將開發(fā)機(jī)器上的端口 8000 映射到設(shè)備上的端口 8080,您可以運(yùn)行:
adb -s 1234567890abcdef forward tcp:8000 tcp:8080
這條命令會(huì)告訴設(shè)備 ID 為 1234567890abcdef 的設(shè)備上的 adbd 服務(wù)建立從開發(fā)機(jī)器上的端口 8000 到設(shè)備上的端口 8080 的端口轉(zhuǎn)發(fā)。
示例:
假設(shè)您有兩個(gè)設(shè)備連接到開發(fā)機(jī)器,設(shè)備 ID 分別為 1234567890abcdef 和 0987654321abcdef。您想要將設(shè)備 ID 為 1234567890abcdef 的設(shè)備配置為將開發(fā)機(jī)器上的端口 8000 映射到設(shè)備上的端口 8080。您可以按照以下步驟操作:
列出連接的設(shè)備:
adb devices
輸出可能會(huì)是:
List of devices attached
1234567890abcdef device
0987654321abcdef device
指定設(shè)備并運(yùn)行 adb forward:
adb -s 1234567890abcdef forward tcp:8000 tcp:8080
這條命令將告訴設(shè)備 ID 為 1234567890abcdef 的設(shè)備上的 adbd 服務(wù)建立從開發(fā)機(jī)器上的端口 8000 到設(shè)備上的端口 8080 的端口轉(zhuǎn)發(fā)。
驗(yàn)證配置:
您可以再次運(yùn)行 adb forward --list 來確認(rèn)端口轉(zhuǎn)發(fā)是否已經(jīng)建立:
adb forward --list
您將看到類似以下的輸出:
tcp:8000->tcp:8080 localabstract:adbd
adb devices列出的只是ip:prot不是id怎么辦
當(dāng)您使用 adb devices 命令列出連接的設(shè)備時(shí),如果設(shè)備是通過網(wǎng)絡(luò)連接的,那么列表中顯示的是設(shè)備的 IP 地址和端口號(hào),而不是傳統(tǒng)的序列號(hào)。這是因?yàn)橥ㄟ^網(wǎng)絡(luò)連接的設(shè)備是通過 IP 地址和端口號(hào)來識(shí)別的。
如何使用 adb devices:
列出所有連接的設(shè)備:
運(yùn)行 adb devices 命令來列出所有連接的設(shè)備。
如果設(shè)備是通過網(wǎng)絡(luò)連接的,您將看到類似于以下的輸出:
List of devices attached
192.168.1.100:5555 device
192.168.1.101:5555 device
解釋輸出:
192.168.1.100:5555: 表示一個(gè)通過 IP 地址 192.168.1.100 和端口 5555 連接到 adb 的設(shè)備。
192.168.1.101:5555: 表示另一個(gè)通過 IP 地址 192.168.1.101 和端口 5555 連接到 adb 的設(shè)備。
指定設(shè)備:
如果您想要針對(duì)特定的設(shè)備運(yùn)行命令,可以使用 -s 選項(xiàng)加上設(shè)備的 IP 地址和端口號(hào)。例如,如果您想針對(duì) IP 地址為 192.168.1.100 的設(shè)備運(yùn)行 adb forward 命令,您可以運(yùn)行:
adb -s 192.168.1.100:5555 forward tcp:8000 tcp:8080
示例:
假設(shè)您有兩個(gè)設(shè)備通過網(wǎng)絡(luò)連接到開發(fā)機(jī)器,它們的 IP 地址分別為 192.168.1.100 和 192.168.1.101。您想要將 IP 地址為 192.168.1.100 的設(shè)備配置為將開發(fā)機(jī)器上的端口 8000 映射到設(shè)備上的端口 8080。您可以按照以下步驟操作:
列出連接的設(shè)備:
adb devices
輸出可能會(huì)是:
List of devices attached
192.168.1.100:5555 device
192.168.1.101:5555 device
指定設(shè)備并運(yùn)行 adb forward:
adb -s 192.168.1.100:5555 forward tcp:8000 tcp:8080
這條命令將告訴 IP 地址為 192.168.1.100 的設(shè)備上的 adbd 服務(wù)建立從開發(fā)機(jī)器上的端口 8000 到設(shè)備上的端口 8080 的端口轉(zhuǎn)發(fā)。
驗(yàn)證配置:
您可以再次運(yùn)行 adb forward --list 來確認(rèn)端口轉(zhuǎn)發(fā)是否已經(jīng)建立:
adb forward --list
您將看到類似以下的輸出:
tcp:8000->tcp:8080 tcp:5555
通過這種方式,您可以確保只對(duì)特定的設(shè)備執(zhí)行 adb forward 命令。
adb forward --remove tcp:5555 報(bào)錯(cuò)adb.exe: error: more than one device/emulator
當(dāng)您運(yùn)行 adb forward --remove tcp:5555 命令并收到錯(cuò)誤提示 “more than one device/emulator” 時(shí),這通常意味著有多個(gè)設(shè)備或模擬器連接到您的開發(fā)機(jī)器,并且這些設(shè)備或模擬器都監(jiān)聽 5555 端口。
解決方法:
列出所有連接的設(shè)備:
運(yùn)行 adb devices 命令來列出所有連接的設(shè)備。
如果設(shè)備是通過網(wǎng)絡(luò)連接的,您將看到類似于以下的輸出:
List of devices attached
192.168.1.100:5555 device
192.168.1.101:5555 device
確定要移除端口轉(zhuǎn)發(fā)的設(shè)備:
確定您想要移除端口轉(zhuǎn)發(fā)的具體設(shè)備。假設(shè)您想要移除 IP 地址為 192.168.1.100 的設(shè)備上的端口轉(zhuǎn)發(fā)。
指定設(shè)備并移除端口轉(zhuǎn)發(fā):
使用 -s 選項(xiàng)加上設(shè)備的 IP 地址和端口號(hào)來指定設(shè)備,并運(yùn)行 adb forward --remove 命令。
adb -s 192.168.1.100:5555 forward --remove tcp:5555
這條命令將移除 IP 地址為 192.168.1.100 的設(shè)備上的 5555 端口轉(zhuǎn)發(fā)。
示例:
假設(shè)您有兩個(gè)設(shè)備通過網(wǎng)絡(luò)連接到開發(fā)機(jī)器,它們的 IP 地址分別為 192.168.1.100 和 192.168.1.101。您想要移除 IP 地址為 192.168.1.100 的設(shè)備上的 5555 端口轉(zhuǎn)發(fā)。您可以按照以下步驟操作:
列出連接的設(shè)備:
adb devices
輸出可能會(huì)是:
List of devices attached
192.168.1.100:5555 device
192.168.1.101:5555 device
指定設(shè)備并移除端口轉(zhuǎn)發(fā):
adb -s 192.168.1.100:5555 forward --remove tcp:5555
這條命令將移除 IP 地址為 192.168.1.100 的設(shè)備上的 5555 端口轉(zhuǎn)發(fā)。
驗(yàn)證移除:
您可以再次運(yùn)行 adb forward --list 來確認(rèn)端口轉(zhuǎn)發(fā)是否已經(jīng)移除:
adb forward --list
如果端口轉(zhuǎn)發(fā)已被成功移除,您將不會(huì)看到有關(guān) 192.168.1.100:5555 和端口 5555 的任何條目。
通過這種方式,您可以確保只對(duì)特定的設(shè)備執(zhí)行 adb forward --remove 命令。