本文已参与「新人创作礼」活动,一起开启掘金创作之路
本机环境
Android emulator 装在物理机(Windows)上,Android NDK装在虚拟机(Linux)上。想用虚拟机上的adb调试物理机的emulator。
铺垫
启动模拟器后,emulator在每个实例上侦听两个 TCP 端口。默认会选择5554和5555,5554 用于 telnet 接口,5555 用于控制与 DDMS 等工具的通信。理论上我们需要同时对这两个端口进行转发。
方案1(失败)
在windows上以管理员权限执行者两条命令进行端口转发。
netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=127.0.0.1
netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=127.0.0.1
理论上我认为这个方案是可以的,但是实操时失败了,原因未知,可能有的地方没有设置好。
方案2(没试)
使用putty的tunnel隧道进行端口转发,详情见stackoverflow的第二高赞答案。
方案3(成功)
使用内网穿透工具frp。
在虚拟机中架设frp服务端即frps,frps的配置使用默认配置即可:
[common]
bind_port = 7000
物理机架设frp客户端即frpc,配置如下:
[common]
server_addr = 192.168.133.138 #虚拟机IP地址
server_port = 7000
[adb1]
type = tcp
local_ip = 127.0.0.1
local_port = 5554
remote_port = 5554
[adb2]
type = tcp
local_ip = 127.0.0.1
local_port = 5555
remote_port = 5555
虚拟机启动frps,物理机启动frpc,能够看到成功建立的连接。
# 虚拟机
./frps -c frps.ini
# 物理机
./frpc -c frpc.ini
然后在虚拟机输入命令adb devices就能看到设备了。如果不行可以试试重启emulator或者在虚拟机上先adb kill-server再adb start-server重启adb服务器。