5

我正在开发一个简单的应用程序,它连接到在 Apache 中配置为虚拟主机的 web 服务,所以它的 URL 是 myapp.localhost

在我的开发机器(Mac OS X)中,我可以访问它,也可以从 iPhone 模拟器访问它。但是我遇到了 Android 模拟器的问题,它无法访问该 URL,因为它没有使用我的 /etc/hosts 文件来解析“myapp.localhost”域名。

由于我使用的是 Appcelerator Titanium ( appcelerator.com ),因此我无法使用“adb”将自定义主机文件注入 Android 模拟器。

我可以在我的 Mac OS X 系统中安装 DNS 服务器或类似的东西来为 Android 模拟器翻译那个虚拟主机吗?

4

1 回答 1

11

我想你最终找到了解决问题的方法。不过,对于那些四处寻找,与我们曾经遇到过的同样问题苦苦挣扎的人,我仍然会给出一个可能的答案。

由于 android 设备是模拟的而不是模拟的(与 iOS 设备相反),它们确实有自己的内核、配置文件……和自己的/system/etc/hosts. 但是您实际上可以将 adb 与 Titanium 一起使用。你只需要小心。由于 Titanium 使用基于 tiapp.xml 的自定义生成的虚拟设备,因此在虚拟设备显示在设备列表中之前,您必须至少运行一次应用程序。

如果您有多个虚拟设备,您首先需要获取 Titanium 生成的设备的名称(通常是 emulator-XXXX)。

adb devices

然后您可以挂载它并使用 adb push 和 pull 命令/system/etc/hosts从模拟器系统中取出,对其进行编辑并将其推回。-s emulator-XXXX指定要在哪个设备上执行这些命令。如果只有一个设备,您可以跳过此选项。有关更多信息,请参阅adb 文档

adb -s emulator-XXXX remount
adb -s emulator-XXXX pull /system/etc/hosts /whatever/directory/

您现在可以/whatever/directory/hosts使用您喜欢的编辑器进行编辑并添加必要的主机。如果你需要访问你的开发机器的localhost接口,10.0.2.2是一个链接到计算机的loopback接口。只需添加10.0.2.2 myapp.localhost到主机并将其推送回虚拟设备。

adb -s emulator-XXXX push /whatever/directory/hosts /system/etc/hosts

使用 Titanium 重新启动模拟器,它应该可以解决问题!

于 2011-08-09T12:22:02.647 回答