正在忽略模拟器中主机文件中的URL映射

时间:2015-11-23 11:17:56

标签: android android-emulator localhost genymotion hosts

我正在使用genymotion模拟器并使用

从中提取主机文件
  

adb remount

     

adb pull / system / etc / hosts C:\ Users \ Rkn09 \ Desktop \ hosts

我添加了新的映射 192.168.0.115 xxx.mydomain.com 我用

将其推回模拟器
  

adb push C:\ Users \ Rkn09 \ Desktop \ hosts / system / etc / hosts

但是当我向 xxx.mydomain.com 发出请求时,它没有重定向到局域网 192.168.0.115 中的本地计算机。我甚至使用cat / etc / hosts检查了hosts文件,它有我的映射,任何人都可以帮我解决这个问题。

PS:同样的过程在Mac OS X EI Captain 中很好,我在windows7中遇到了这个问题

5 个答案:

答案 0 :(得分:6)

我遇到了同样的问题。以下解决了这个问题:

  • 确保在最后一次输入主机后有一个空行 文件
  • 如果您在hosts文件中使用制表符,请将其替换为空格

重新启动Android,然后重试:

adb reboot

答案 1 :(得分:1)

hosts文件应该是使用linux line end style编写的。

在记事本和Wordpad中实现这一点是不可能的。尝试安装另一个支持此功能的编辑器,并确保正确保存hosts文件。

(我尝试过AkelPad,但Nodepad ++也提供相同的功能)

据推测,无论编码是什么。 Windows-1252 (ANSI)utf-8都有效。

完成所有更改后,将hosts文件推送到设备:

adb remount
adb push hosts /system/etc/hosts

确保您拥有正确的hosts文件并加载它是否有效:

adb shell cat /system/etc/hosts
adb shell ping my.domain.com

从Genymotion设备打开浏览器,输入以下内容确保一切正常:

http://my.domain.com

您可以根据需要添加端口

http://my.domain.com:1234

您无需重启Android设备。

如果问题没有消失,请通过直接ping ip地址确保它与hosts文件本身有关:

adb shell ping 192.168.x.x

如果有效,则再次检查文件中的行结尾。一些文本编辑器可能会混淆它们,并且使用Unix行结尾的选项通常只与新文件相关。

答案 2 :(得分:1)

在主机文件的末尾对我来说是 CR LF 字符。您复制到 Android Emulator 的 hosts 文件应该包含 Unix Line Feed。

您可以通过 NotePadd ++ 设置和检测。

在 NotePadd ++ 中打开主机文件并选择“编辑 >> EOL 转换 >> Unix (LF)”

enter image description here

您可以通过转到“查看 >> 显示符号 >> 显示行尾”来确认行尾

enter image description here

这将显示 LF 字符

enter image description here

要验证主机文件是否正常工作,您可以转到 adb shell 并 ping 域。

enter image description here

答案 3 :(得分:0)

显然上述解决方案都没有帮助你,这是我的预期。我不知道如何为您提供一步一步的解决方案,但我希望我的回答可以帮到您。

仿真器(通常)位于完全不同的子网中。

仿真系统创建虚拟网络适配器以将仿真器连接到主机,因此您需要提供虚拟网络适配器的地址。到主持人文件'而不是物理网络适配器的IP地址'的主机'。

以下是它在网络上的外观

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    init();
}

private void init() {
    mMapFragment = new SupportMapFragment();
    // if don't add mMapFragment into Layout
    //getSupportFragmentManager().beginTransaction().add(R.id.parent, mMapFragment).commit();
    mMapFragment.getMapAsync(this);
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;
    mGoogleMap.setMyLocationEnabled(true);
    mGoogleMap.setOnMyLocationChangeListener(this);
}

@Override
public void onMyLocationChange(Location location) {
    // Doesn't work.
    Toast.makeText(MainActivity2.this, "location changed!!! ", Toast.LENGTH_SHORT).show();
}

因此对于模拟器,192.168.0.115不存在

因此在hosts文件中,当您的Web浏览器正在侦听每个可能的本地地址(即0.0.0.0:80)或更改子网掩码时,请提供地址192.168.6.1(或您的虚拟网络适配器地址)因此。我认为前者是一个很好的解决方案。

答案 4 :(得分:0)

对我来说同样的问题,就我而言,问题是我的格式文件为widnwos格式,因此我使用了dos2unix.exe工具来更改格式

enter image description here

我认为记事本++也可以将格式更改为Unix