【问题标题】:Access a virtual host from the Android emulator从 Android 模拟器访问虚拟主机
【发布时间】:2026-02-19 00:40:01
【问题描述】:

我正在开发一个简单的应用程序,它连接到在 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 模拟器转换该虚拟主机吗?

【问题讨论】:

  • build/android 文件夹在 Ti 生成一次后为什么不能使用。我经常在 Ti Developer 中构建一次,然后使用 xcode 从 build/iphone 文件夹构建。我认为 android 也是如此?

标签: android titanium appcelerator


【解决方案1】:

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

由于 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 doc 了解更多信息。

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

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

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

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

【讨论】: