从安卓模拟器访问虚拟主机

5

我正在开发一个简单的应用程序,它连接到配置为Apache虚拟主机的webservice,因此其URL为myapp.localhost。

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

由于我正在使用Appcelerator Titanium(appcelerator.com),我无法使用“adb”向Android模拟器注入自定义hosts文件。

是否有DNS服务器或类似的东西可以安装在我的Mac OS X系统中,以将该虚拟主机翻译为Android模拟器?


为什么在Ti中生成build/android文件夹后不能使用它?我经常在Ti开发者中构建一次,然后只需使用xcode从build/iphone文件夹构建。我假设在android上也是如此? - rivenate247
1个回答

11

我猜你最终找到了解决问题的方法。但是,为了那些在寻找解决方案的人,我会提供一个可能的答案,因为他们可能会遇到我们曾经遇到的相同问题。

由于 Android 设备是模拟而不是仿真(与 iOS 设备相反),它们确实拥有自己的内核、配置文件...以及它们自己的 /system/etc/hosts 文件。但是,你实际上可以使用 Titanium 中的 adb。你只需要小心。由于 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并添加必要的主机。如果你需要访问开发机器的本地接口,10.0.2.2是计算机回环接口的链接。只需将10.0.2.2 myapp.localhost添加到主机并将其推送回虚拟设备即可。
adb -s emulator-XXXX push /whatever/directory/hosts /system/etc/hosts

使用Titanium重新启动模拟器即可解决问题!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接