我正在使用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中遇到了这个问题
答案 0 :(得分:6)
我遇到了同样的问题。以下解决了这个问题:
重新启动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)”
您可以通过转到“查看 >> 显示符号 >> 显示行尾”来确认行尾
这将显示 LF 字符
要验证主机文件是否正常工作,您可以转到 adb shell 并 ping 域。
答案 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)