1. 程式人生 > >adb互聯及內網穿透

adb互聯及內網穿透

使用adb,可以與連在本機的手機等裝置連線,給手機發送命令,這是常見的應用場景,但其實adb也能夠連線與其他主機相連的裝置。

adb連線的原理是adb客戶端程式先連線主機的adb服務程式(adb daemon),通過主機服務程式轉發請求到手機裝置的adb daemon,而adb客戶端的命令列引數中有一個”-H“引數,使用了該引數,adb客戶端不再與本機的adb服務程式連線,而是與指定主機的adb服務程式連線。此時,adb命令也就轉發給與那個主機連線的裝置。

要打通連線,還有下面幾個問題要解決:

1、adb版本

官方釋出的adb版本並不支援該功能,可能新版本已經解決該問題。輸入adb不帶引數會輸出幫助資訊,如果沒有”-H“引數說明,那該版本就不支援該功能。

你可以更新版本、或者下載其他渠道的構建版本。但是如果你有編譯android原始碼的環境,那麼自己也可以編譯一個新版本。通過下面的命令編譯:

$ . build/envsetup.sh
$ make adb
編譯windows下執行的版本,需要安裝mingw
$ sudo apt-get install mingw32
$ make USE_MINGW=y adb

2、adb對外埠

adb客戶端執行的時候,如果adb daemon沒有執行,會自動啟動adb daemon,但是通過”-H“引數連線遠端主機時,不會自動啟動adb daemon,需要手動在遠端主機啟動。另外預設方式啟動的adb daemon不會偵聽對外埠,只會偵聽本地迴環介面。需要在啟動時加上”-a“引數,才會偵聽對外埠。啟動命令為:
$ adb server fork-server -a

3、防火牆和內網穿越

防火牆和內網穿越與adb沒有直接關係,這裡要說的是主機adb daemon的偵聽埠是TCP埠5037,所以要埠防火牆對應埠,才能聯通。同樣需要在路由器上配置應用埠的轉發規則,才能連線內網主機上的adb和裝置。