You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDK30及以上安卓模拟器hosts文件恢复默认的原因与解决咨询

Android 11+(SDK30+)模拟器Hosts修改后仅带-writable-system启动才生效的原因及解决办法

原因分析

从Android 11(API 30)开始,谷歌对系统分区权限做了严格限制:

  • 默认情况下/system分区是只读状态,模拟器启动时会直接加载原始系统镜像文件,不会保留之前的修改。
  • 只有添加-writable-system参数启动时,模拟器才会创建一个可写的系统覆盖层,你的hosts修改会被存储在这个覆盖层中,启动时才会生效。
  • SDK30以下版本没有这种分区保护机制,修改直接写入原始系统镜像,所以重启后修改能保留。

解决办法

1. 永久修改系统镜像(一劳永逸)

直接修改模拟器的原始system.img文件,后续任何启动方式都会生效:

  • 关闭模拟器,找到AVD的存储目录:
    # Windows
    C:\Users\<你的用户名>\.android\avd\Pixel_4a_API_34.avd\
    # macOS/Linux
    ~/.android/avd/Pixel_4a_API_34.avd/
    
  • 执行以下命令修改镜像:
    # 检查镜像完整性
    e2fsck -f system.img
    # 创建临时挂载目录
    mkdir temp_system
    # 挂载镜像到临时目录(需root权限)
    sudo mount -o rw,loop system.img temp_system
    # 替换hosts文件
    sudo cp /path/to/your/custom/hosts temp_system/etc/hosts
    # 卸载挂载
    sudo umount temp_system
    rm -rf temp_system
    

2. 配置默认启动参数

让模拟器每次启动自动带上-writable-system:

  • Android Studio AVD管理器:
    • 打开AVD管理器,点击目标模拟器的「编辑」按钮(铅笔图标)
    • 进入配置页后,点击「Show Advanced Settings」
    • 在「Emulator launch parameters」输入框中添加-writable-system,保存即可
  • 自定义启动脚本:
    编写脚本快速启动模拟器,比如创建start_emulator.sh:
    emulator -avd Pixel_4a_API_34 -writable-system
    
    每次运行脚本启动模拟器即可。

3. 借助Magisk实现持久化修改(需root)

如果模拟器已root,用Magisk的模块机制挂载修改:

  • 给模拟器刷入Magisk(可通过adb推送Magisk包并刷入)
  • 安装Magisk模块仓库中的「Hosts」类模块,或使用「Hosts Go」等工具导入自定义hosts
  • Magisk会通过挂载覆盖的方式替换系统默认hosts,无需依赖-writable-system参数,重启后修改依然保留

内容的提问来源于stack exchange,提问作者Goltra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:16:22