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

如何将Android模拟器的域名请求重定向到本地主机

如何将Android模拟器的域名请求重定向到本地主机

我完全理解你的需求——就是想让Android模拟器里访问my.great-website.local时,和你笔记本上的配置一样,指向本地开发环境,而不是去互联网解析。你尝试的两种思路其实都是可行的,只是遇到了一些小坑,下面我把修正后的方案整理出来:

方案一:修改模拟器的/etc/hosts文件(解决Device must be bootloader unlocked报错)

你之前的步骤已经接近正确,但因为较新的Android版本启用了AVB验证,直接adb remount会失败,需要补充几个关键步骤:

  1. 关闭现有模拟器,以可写系统模式启动
    进入你的${ANDROID_HOME}/emulator目录,执行以下命令:

    # 查看可用的模拟器列表
    ./emulator -list-avds
    # 用可写系统模式启动目标模拟器
    ./emulator -avd <你的模拟器名称> -writable-system
    
  2. 关闭AVB验证并重启模拟器
    进入${ANDROID_HOME}/tools目录(或确保adb已加入系统PATH),执行:

    # 获取模拟器root权限
    adb root
    # 关闭AVB验证,这是解决remount报错的核心步骤
    adb disable-verity
    # 重启模拟器让设置生效
    adb reboot
    
  3. 重新挂载系统分区为可写
    等模拟器重启完成后,再次执行:

    adb root
    adb remount
    

    这次应该不会再弹出解锁提示了。

  4. 修改并推送hosts文件

    # 将模拟器的hosts文件拉取到本地Downloads目录
    adb pull /system/etc/hosts ~/Downloads/hosts
    # 添加域名映射,10.0.2.2是模拟器指向本地主机的特殊别名
    echo '10.0.2.2 my.great-website.local' >> ~/Downloads/hosts
    # 将修改后的hosts文件推回模拟器
    adb push ~/Downloads/hosts /system/etc/hosts
    
  5. 重启模拟器生效

    adb reboot
    

    重启后,模拟器里访问my.great-website.local就会指向你的本地主机了。

方案二:用自定义DNS服务器解决(修复dnsmasq权限问题)

你尝试用dnsmasq时遇到的权限错误,通常是因为它需要绑定特权端口(53)或者没有监听权限,以下是修正后的配置步骤:

  1. 安装并配置dnsmasq(MacOS环境)
    如果还没安装,先用Homebrew安装:

    brew install dnsmasq
    

    编辑dnsmasq的配置文件(路径一般是/usr/local/etc/dnsmasq.conf),添加以下内容:

    # 把目标域名映射到模拟器指向本地的特殊IP
    address=/my.great-website.local/10.0.2.2
    # 允许监听本地回环和局域网IP,避免权限问题
    listen-address=127.0.0.1,192.168.x.x  # 替换成你的本地局域网IP
    
  2. 解决dnsmasq的权限问题
    执行以下命令让dnsmasq拥有绑定特权端口的权限:

    sudo chown root:wheel /usr/local/sbin/dnsmasq
    sudo chmod u+s /usr/local/sbin/dnsmasq
    
  3. 重启dnsmasq服务

    sudo brew services restart dnsmasq
    
  4. 启动模拟器时指定自定义DNS
    用以下命令启动模拟器,指定dnsmasq所在的IP(比如本地回环地址127.0.0.1,或者你的局域网IP):

    emulator @Nexus_5X_API_23 -dns-server 127.0.0.1
    

    这样模拟器就会通过你的本地dnsmasq解析域名,实现和笔记本一致的映射效果。

额外小技巧(仅针对自研应用)

如果你只是想让自己开发的应用实现这个跳转,还可以在代码里给网络库加拦截器——比如用OkHttp的Interceptor,把请求中的my.great-website.local替换成10.0.2.2,这种方式不需要修改模拟器系统配置,只对当前应用生效。

备注:内容来源于stack exchange,提问作者Michał J. Gąsior

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 07:29:31