【问题标题】:Android hosts file usageAndroid 主机文件使用情况
【发布时间】:2010-11-13 22:25:59
【问题描述】:

我有以下问题:

我制作了一个自定义主机文件来测试我的应用程序的一些功能,然后将其推送到我的 android 模拟器。 问题是这些设置不会立即生效。我必须等待大约 10 分钟才能激活它们。

所以我的问题是:如何使新的主机文件立即激活?我有很多不同的设置要测试,每次都等不了 10 分钟。

【问题讨论】:

  • 我没有尝试等待 10 分钟,但我确实看到我的更改不会立即生效(当通过 adb pull /etc/hosts、本地编辑、adb push hosts /etc/hosts 更新时)。寻求有关此主题的类似帮助!
  • @Matt 一个怪癖是主机条目必须以 LineFeed 结尾,否则 Android 将忽略它。不是 CR/LF,您不能在最后一个条目中省略 LF。这让我困惑了一段时间。我没有看到 10 分钟的延迟,我所做的更改似乎会立即发生。

标签: android hosts-file


【解决方案1】:

Java 维护自己的内部 DNS 缓存。操作系统将立即反映新的主机文件(在命令行上使用ping 进行验证),但您需要告诉 java 不要缓存任何内容。将这些行添加到您的测试应用程序中:

System.setProperty("networkaddress.cache.ttl" , "0"); System.setProperty("networkaddress.cache.negative.ttl" , "0");

有关这些属性的更多信息,请参见此处: http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

【讨论】:

    【解决方案2】:

    我刚刚在我的根三星 Galaxy S 上编辑了我的主机文件,更改立即生效。也许您看到的问题与亚行有关?

    我这样做了:

    1. 使用 Busybox,将 hosts 文件复制到带有cp /etc/hosts /mnt/sdcard/hosts.new 的可编辑位置;
    2. 使用预装的文本编辑器编辑/mnt/sdcard/hosts.new,添加我需要的两个条目。我使用了 IP,然后是非限定主机名,然后是 FQDN,例如192.168.2.81 siva siva.myinventeddomain.org.au,但理论上其他格式也应该可以;
    3. 再次在 BusyBox 中,su 进入 root;
    4. /system 默认为 ro,所以我必须用 mount -o remount,rw /system 将其设为 rw;
    5. 为了避免以后输入,cd /etc(因此 shell 提示显示 /system/etc 而不是 /etc,这让我怀疑是符号链接的恶作剧);
    6. 使用mv hosts hosts.old 备份默认主机文件(仅包含127.0.0.1 localhost);
    7. 使用mv /mnt/sdcard/hosts.new hosts 安装新的主机文件;
    8. 执行sync(只是因为我偏执——这不应该是必要的);
    9. mount -o remount,ro /system重新挂载/system fs ro;
    10. 退出 BusyBox;
    11. 启动网络浏览器 (FireFox) 并在 URL/搜索组合字段中输入 sivasiva 是我添加的两个主机条目之一)。

    在进行这些更改之前,第 11 步导致 Google 搜索“siva”或其他内容的愚蠢行为;紧随其后,我得到了我的 LAN httpd vhost 的首页,正如我所料。

    工作和不工作之间的时间不到 10 分钟。

    指向 Sun 的 Java 文档的链接可能相关,也可能不相关(可能不相关)。 Android 根本不包含 Java VM,更不用说 Sun 的了。它运行一个名为 Dalvik 的不同 VM - 请参阅 Wikipedia 条目:http://en.wikipedia.org/wiki/Dalvik_%28software%29

    您可以用一种看起来很像 Java 的语言对 Android 手机进行编程这一事实是无关紧要的。

    【讨论】:

      【解决方案3】:

      我没有尝试使用主机文件;但我尝试过使用自定义 DNS...

      1. 在某处启动 DNS 服务器(您可以加载 DD-WRT、拥有精美的路由器或在 PC 上运行守护程序)。
      2. 可选:使用正在运行的 DNS 服务器的位置配置本地路由器(DHCP 服务器)(使其位于 DNS 服务器列表的首位)。
      3. 如果跳过 #2:将手机配置为静态 IP(Wi-Fi 设置->菜单按钮->高级)。将 DNS1 设置为您的服务器。
      4. 让您的手机通过 WIFI 连接到此网络。

      你完成了!现在您可以管理 DNS 名称/IP 配对以及租用时间(例如,如果您需要,电话将每 30 秒更新一次 IP)。有点复杂,但您不必在手机上加载主机文件:-)。

      【讨论】:

      • 这行不通。 Java 在内部缓存 DNS 查找,它甚至不会查询自定义 DNS 服务器。
      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多