Android Studio模拟器修改hosts文件后无法打开网页的问题排查
Android Studio模拟器Hosts修改后不生效的排查方案
我来帮你梳理下为啥PC上能用的hosts,到了Android模拟器里就失效了,大概率是这几个模拟器特有的问题没处理到位:
确认hosts路径与系统分区挂载状态
Android模拟器的hosts默认路径是/system/etc/hosts,但这个路径所在的/system分区默认是只读的。如果修改前没执行挂载命令,你的修改根本没保存进去。正确步骤应该是:- 先通过
adb root获取root权限; - 进入模拟器shell:
adb shell; - 挂载
/system为可写:mount -o remount,rw /system; - 再修改hosts文件,修改后记得把分区改回只读(可选但推荐):
mount -o remount,ro /system。
- 先通过
检查模拟器网络模式
模拟器默认用NAT模式联网,这种模式下网络请求会经过PC转发,可能导致hosts解析规则被忽略。试试切换成桥接模式(部分模拟器支持,Android Studio自带模拟器可通过修改配置文件开启),让模拟器直接接入和PC同网段的网络,这样hosts规则更容易生效。清除模拟器DNS缓存
模拟器可能缓存了旧的域名解析结果,即使修改了hosts也不会立即生效。可以用这几种方法清除:- 直接重启模拟器;
- 在模拟器的「设置-网络和互联网」里选择「重置网络设置」;
- 进入模拟器shell执行命令:
ndc resolver flushdefaultif。
验证root权限与修改权限
修改hosts需要root权限,如果你是用普通用户shell修改的,操作会失败或者内容不生效。一定要先确保adb root执行成功,再进入shell修改hosts。修改后可以用cat /system/etc/hosts查看内容,确认你的修改已经保存。检查hosts文件格式兼容性
虽然PC上的hosts能用,但Android基于Linux内核,对hosts格式有严格要求:- 每行必须是「IP地址 + 单个空格 + 域名」的格式;
- 换行符必须是Linux的LF,而不是Windows的CRLF;
- 避免多余的空行或者格式错误的注释。可以把PC上的hosts内容复制到模拟器时,先转成Linux格式再粘贴。
内容的提问来源于stack exchange,提问作者Vodka Putinka




