局域网调试Android Emulator

520 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本机环境

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

image-20220429195400873

然后在虚拟机输入命令adb devices就能看到设备了。如果不行可以试试重启emulator或者在虚拟机上先adb kill-serveradb start-server重启adb服务器。

参考

stackoverflow.com/questions/1…