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

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


当前回答

尽管阅读了这里和其他地方的所有答案,我还是花费了几个小时试图调试这个问题,因为地址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之外。

其他回答

我不知道,也许这个话题已经解决了,但当我最近尝试在Windows机器上做这件事时,我遇到了很多困难。 所以我的解决方法很简单。我已经下载了这个软件 http://www.lenzg.net/rinetd/rinetd.html遵循他们关于如何使端口转发的说明,然后成功地我的android设备连接到asp.net localhost项目,并停止在我的断点。

我的rinetd.conf文件:

10.1.1.20 1234 127.0.0.1 1234
10.1.1.20 82 127.0.0.1 82

10.1.1.20是我的本地主机ip, 82和1234是我的端口 我也有板条箱浴文件 为了方便生活你的名字bathfile.bat,把该文件在rinedfolder。我的沐浴档案:

rinetd.exe -c rinetd.conf

在启动这个软件后,启动你的aps.net服务器,并尝试从android设备或本地网络中的任何设备访问(例如计算机ABC启动putty),你会看到一切正常。不需要去路由器设置或做任何其他复杂的事情。 我希望这对你有所帮助。享受。

根据文件:

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

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

默认AVD使用10.0.2.2,genymotion使用10.0.3.2。

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

如果你是在windows下,你可以去simbol system,写ipconfig,检查分配给你机器的ip是什么。