我可以在Android模拟器中做什么来将它连接到我的本地主机web服务器页面http://localhost或http://127.0.0.1?

我已经尝试过了,但模拟器仍然需要我的请求,如谷歌搜索localhost或更糟糕的是,它说,它没有找到页面,而我的web服务器正常运行。


当前回答

对于试图访问本地IIS服务器(ASP.NET)的任何人

对我来说,公认的答案还不够。我必须在applicationhost中添加127.0.0.1的绑定。它是我的ASP. config的根源。网络解决方案。

其他回答

另一种解决方法是从no-ip.org获得一个免费域名,并将其指向您的本地ip地址。 然后,您可以尝试http://yourdomain.no-ip.org/yourwebservice而不是使用http://localhost/yourwebservice

对于我的Mac OS mountain Lion设备:

http://10.0.2.2:8888

工作完美!

尽管阅读了这里和其他地方的所有答案,我还是花费了几个小时试图调试这个问题,因为地址10.0.2.2无法工作,即使在Chrome浏览器中也是如此。如果同样的情况发生在您身上,这里有一个逐步的指南,尝试调试并希望解决您的问题。

检查模拟器网关是否为10.0.2.2

在模拟的Android中,进入设置> WiFi,检查它是否连接到AndroidWiFi热点(代表你的主机),然后点击底部的高级,然后检查网关地址:它应该指向10.0.2.2。如果不是,那么你有另一个问题,也许改变代理设置可以解决你的问题,看看这里如何与Android Studio自2022年,因为代理设置现在隐藏起来:如何在模拟器中配置代理在新版本的Android Studio?

检查您的服务器是否可以从主机计算机访问

只需打开web浏览器,输入http://localhost:<port>,查看您的本地web应用程序是否可访问。如果不是,那么您的本地服务器参数可能有问题。

检查您的服务器是否可以从模拟器访问

打开Chrome浏览器,将其指向http://10.0.2.2:<端口>(对于genymotion,替换为http://10.0.3.2:<端口>)。如果你的网页应用出现了,很好,你就完成了。如果不是,那么测试下面的其他步骤以查明根源问题。

使用另一台服务器进行测试

如果您的web应用程序可以从您的主机计算机访问,但不能在模拟器中访问,根本原因可能是您的本地服务器出于某种原因限制了对某些接口的访问,可能是出于安全原因。

要检查这一点,请尝试使用另一个服务器,只需一个简单的HTTP服务器即可,例如HTTP -server with nodejs,或python -m HTTP。服务器8000使用Python 3。

然后,尝试从模拟器的Chrome浏览器(例如http://10.0.2.2:8000)访问这个简单的服务器。如果它工作,那么这确认您的本地服务器限制了对某些接口的访问。您需要阅读本地服务器的文档以扩大权限。

例如,在我的例子中,我的服务器是angular-cli (AngularJS),默认情况下只限制为localhost服务。为了让它工作,我必须使用ng serve——disable-host-check——host 0.0.0.0而不是仅仅使用ng serve,就像在另一个问题中建议的那样。——host 0.0.0.0指示web服务器为所有接口服务。类似的参数可以提供给大多数web服务器。

另一种方法可能是禁用一些未使用的适配器,特别是虚拟适配器,例如vpn。

您的Android应用程序的权限清除文本

Now, your web app should be accessible from inside the emulator, using Chrome app, with the URL http://10.0.2.2:<port>. The last piece of the puzzle is to add permissions in your Android app to access 10.0.2.2 and especially cleartext if your local webserver is not equipped with a SSL certificate (the most likely scenario for a local development webserver - just check if https://localhost:<port> works or only http://localhost:<port> from the host computer). This will allow your Android app to access your local webserver, just like Chrome does.

添加特定的权限来访问明文(例如,从Android 9 (API 28)起,从Android应用程序访问http://)是必要的。有几种方法可以配置您的Android应用程序来添加此权限,请参阅:https://stackoverflow.com/a/50834600/1121352

结论

从Android模拟器访问主机可能很棘手,但通过仔细的逐步调试,在大多数情况下都有可能克服这个问题。

最后一个选择,可能更快,是获得付费订阅服务,如ngrok,但免费版是无用的,因为他们必须在web浏览器中打开web应用程序,在你的Android应用程序的webview之外。

根据文件:

10.0.2.2 -主机环回接口的特殊别名(例如,开发计算机上的127.0.0.1)

查看模拟器网络以获得更多关于模拟器网络的技巧。

尝试http://10.0.2.2:8080/,其中8080是端口号。它工作得很完美。如果你只是尝试10.0.2.2,它不会工作。需要添加端口号。此外,如果Microsoft IIS已安装,请尝试从控制面板关闭该功能(如果使用任何windows操作系统),然后尝试如上所述。