背景
平时用模拟器调试,用的比较多的是夜神或者逍遥模拟器
那么在物理机上用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