背景
平時用模擬器調試,用的比較多的是夜神或者逍遙模擬器
那么在物理機上用adb連模擬器:
adb connect 127.0.0.1:21513
端口百度一下應該就有了,多開的情況下端口會遞增,夜神是62001,62025,62026......,逍遙是21503,21513......
我們有些情況下需要使用linux上的軟件與Android設備進行adb連接,而linux一般都是在Windows上開個vmware虛擬機來實現,這個時候如果沒有真機(或者必須用模擬器)的情況下,就要從虛擬機連接物理機上的Android模擬器了。因為Linux上的模擬器本來速度就感人,再加上是在虛擬機里面。
概述
那么虛擬機通過adb連物理機的安卓模擬器應該怎么辦呢?
一開始我嘗試了Wifiadb,結果在模擬器裝Wifiadb,物理機和虛擬機都連不上
那么就直接連肯定是連不上的,需要端口轉發,憑感覺試了一下,果然不行。然后就去查找了一下關於端口轉發的配置方法,這里記錄一下。
簡單來說,如果需要虛擬機連上物理機的模擬器,就要在物理機找一個端口作為監聽端口,然后轉發到對應模擬器的端口即可,監聽發起TCP的端口可以設定為虛擬機的ip,也可以直接0.0.0.0設為監聽所有
我並不確定轉發到的對象設定的ip地址是物理機,還是模擬器的ip地址,后來才想明白兩者都用的是本機的ip地址(模擬器在adb shell里面ifconfig查看到的ip地址根本ping不通的)
具體操作
大概畫了下本機內部的網絡架構:
在本地Windows以管理員身份運行cmd,然后執行命令
netsh interface portproxy add v4tov4 listenport=18888 listenaddress=10.0.2.15 connectport=21513 connectaddress=127.0.0.1
其中,listenport是自己設定一個端口,這里我設定為18888,你也可以設成別的
然后listenaddress是虛擬機的ip,如果你不只一台虛擬機有這個需求,這里也可以設成0.0.0.0,監聽所有ip地址向18888端口的訪問
connectport是原來在Windows連Android模擬器的端口
connectaddress如果你的模擬器就在windows本地開的就127.0.0.1,當然如果想遠程連另一台電腦上的,可以改成另一台電腦的ip,同樣在那台電腦上也要做端口轉發
然后就可以在虛擬機上通過adb連模擬器啦(ip是主機,注意這里端口是自定義的18888,不是模擬器原來的21503)
adb connect 192.168.255.10:18888
最后,如果想要刪除轉發規則,執行命令
netsh interface portproxy delete v4tov4 listenaddress=10.0.2.15 listenport=18888
PS:玄學問題的記錄
按照上面的操作做完后,虛擬機的adb還是連接不上18888,這個時候先在物理機adb連接一次模擬器,然后再用disconnect斷開連接,然后在虛擬機中kill再start adb server,然后就可以連接上了(我也不知道為什么)
具體步驟:
# 虛擬機上操作 adb kill-server adb start-server # 主機物理機上操作 adb connect 127.0.0.1:21513 adb disconnect 127.0.0.1:21513 # 虛擬機上操作 adb connect 192.168.255.10:18888