【问题标题】:How to set the Android emulator DNS server from Android Studio如何从 Android Studio 设置 Android 模拟器 DNS 服务器
【发布时间】:2017-08-07 23:04:11
【问题描述】:

基本上我的问题是,当我在命令行中运行emulator -verbose -avd Nexus_5X_API_19 时,模拟器以-dns-server = "w,x,y,z" 参数启动,其中w,x,y,z 是DNS 服务器的4 个IP 地址。当我运行ipconfig /all 时,我只看到x,y,z 在Windows 中列为我的有效DNS 服务器。由于这个奇怪的第一台 DNS 服务器,我无法在模拟器中访问互联网。当我使用emulator -verbose -avd Nexus_5X_API_19 -dns-server "x,y,z" 运行模拟器时,一切正常。

但现在我希望能够使用更正的 DNS 服务器在 Android Studio 2.2.3 中运行我的应用程序。那么有谁知道如何在 Android Studio 中指定模拟器命令行参数(类似于基于 Eclipse 的旧版本的答案:https://stackoverflow.com/a/4736518/1088659),或者如何为模拟器设置默认 DNS?

【问题讨论】:

    标签: android android-studio android-emulator


    【解决方案1】:

    不幸的是,我遇到了同样的问题。我编写了一个简单的脚本,可以自动从设置中提取 DNS 地址。脚本是为 MacOS 编写的,但应该同样适用于 Linux。注意:您可能需要更改 Android Emulator 脚本的路径。

    #!/bin/bash
    set -m
    dns=$(grep "nameserver" /etc/resolv.conf | grep "\." | awk '{split($0,a," "); print a[2]}')
    echo "Running emulator with DNS address: $dns"
    ~/Library/Android/sdk/emulator/emulator -avd $1 -dns-server $dns -no-snapshot-load &>/dev/null &
    disown
    

    你只需要给它你的模拟器名称(注意:空格变成下划线),例如:

    runemu Pixel_4_API_30
    

    “runemu”是我在我的机器上命名的脚本。

    【讨论】:

      【解决方案2】:

      如果您使用的是 MacOS 或 Linux,您可以将 Android Emulator 可执行文件重命名为其他名称(例如 emulator-binary)并创建一个脚本,并在其位置上使用实际的模拟器名称 (emulator) 调用可执行文件-dns-server 参数。

      以下是所需的步骤:

      1. 在您的系统中找到 Android SDK 所在的路径。 This answer 会帮你找到。

      2. cd <your-SDK-path>/emulator.

      3. 重命名原始可执行文件:mv emulator emulator-binary

      4. 最后,创建一个名为emulator的模拟器shell脚本,内容如下:

      <your-SDK-path>/emulator-binary -dns-server "8.8.8.8,8.8.4.4" $@

      【讨论】:

      • 给它 8.8.8.8 地址并不总是一个好主意。在工作环境中,您的服务器通常只能访问本地网络。请参阅我的答案以直接从设置中获取 DNS。
      【解决方案3】:

      不幸的是,从 3.0.1 开始,这是不可能的。他们删除了为从 Android Studio 启动的模拟器添加额外的参数。在他们重新添加之前,从命令行启动模拟器(如您所示)是唯一的选择。

      您可以在此处跟踪此问题:https://issuetracker.google.com/issues/37071385

      【讨论】:

      • 虽然这是一个老问题,但仍然没有解决,我也受到了打击。在我的情况下,它是一个 ipv6 DNS 服务器,当我连接到新网络时添加。 OSX 在/var/run/resolv.conf 中添加了两个 DNS 服务器:一个 ipv4 和一个 ipv6 条目。当我删除 ipv6 条目时,我能够从 Android Studio 启动 AVD,以便模拟器可以再次连接到互联网。
      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多