如何用adb命令在保持Wi-Fi/移动数据开启时切断安卓模拟器网络?
解决方案
要实现保持Wi-Fi/移动数据UI开关开启状态,同时动态切断/恢复模拟器网络的需求,以下是几种适配新版Android模拟器的adb方案,可替代原有的svc命令:
1. iptables防火墙拦截(最推荐)
模拟器默认已获取root权限,可通过iptables直接拦截所有出站/入站流量,完全不影响Wi-Fi和移动数据的开关显示:
- 切断网络:
adb shell iptables -P OUTPUT DROP adb shell iptables -P INPUT DROP - 恢复网络:
优点:彻底阻断所有网络流量,操作快速可逆,完全符合自动化测试中多次切换的需求。adb shell iptables -P OUTPUT ACCEPT adb shell iptables -P INPUT ACCEPT
2. 清空网络路由表
通过清空系统路由表,让模拟器无法找到网络通路,同样不改变UI状态:
- 切断网络:
adb shell ip route flush all - 恢复网络:
执行以下命令重新获取路由(适配大多数模拟器):
注意:该方法仅阻断外部网络,模拟器内部的本地通信(如localhost)仍可正常进行。adb shell dhcpcd wlan0
3. 修改DNS配置(半阻断)
如果仅需阻断域名解析(IP直连仍可访问),可修改DNS配置:
- 切断域名解析:
adb shell setprop net.dns1 0.0.0.0 adb shell setprop net.dns2 0.0.0.0 - 恢复DNS:
适合仅需模拟“无法解析域名”场景的测试。adb shell setprop net.dns1 8.8.8.8 adb shell setprop net.dns2 8.8.4.4
内容的提问来源于stack exchange,提问作者J.Grbo
相关产品推荐
相关产品推荐

