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

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


localhost指的是运行代码的设备,在本例中是模拟器。

如果您想引用运行Android模拟器的计算机,请使用IP地址10.0.2.2代替。

你可以在这里阅读更多。


我在家里的机器上成功地使用了10.0.2.2,但在工作中,它不起作用。在瞎折腾了几个小时之后,我使用Android Virtual Device (AVD)管理器创建了一个新的模拟器实例,最终10.0.2.2运行了。

我不知道其他模拟器实例有什么问题(平台是相同的),但如果您发现10.0.2.2不起作用,请尝试创建一个新的模拟器实例。


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


对于我的Mac OS mountain Lion设备:

http://10.0.2.2:8888

工作完美!


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


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


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


根据文件:

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

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


我不知道,也许这个话题已经解决了,但当我最近尝试在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),你会看到一切正常。不需要去路由器设置或做任何其他复杂的事情。 我希望这对你有所帮助。享受。


我需要找出模拟器“Nox App Player”的系统主机IP地址。以下是我如何计算出它是172.17.100.2。

从应用程序商店安装了Android终端模拟器 执行ip link show命令显示所有网络接口。特别令人感兴趣的是eth1接口 发出ifconfig eth1命令,显示net为172.17.100.15/255.255.255.0 开始ping从172.17.100.1开始的地址,找到了“172.17.100.2”。不确定防火墙是否会干扰,但在我的情况下没有

也许这可以帮助其他人解决其他模拟器的问题。


你可以在每次运行模拟器时使用localhost:8000来连接到你机器的localhost(仅在Mac上测试):

adb reverse tcp:8000 tcp:8000

只要把它放到Android Studio终端。

它基本上设置了一个反向代理,其中运行在您的手机上的http服务器接受端口上的连接,并将它们连接到您的计算机,反之亦然。


如果你使用Android模拟器:

您可以通过以下ip连接到您的Pc localhost: 10.0.2.2:{你的本地主机端口}=>如果你在xamp中设置了你的机器端口,你必须使用这个端口。在我的例子中是10.0.2.2:2080

你也可以使用你的网络适配器IP地址。在CMD中输入ipconfig并找到你的适配器IP地址:

如果模拟器不能连接到这个ip,关闭模拟器,并从AVD管理器冷引导打开它:

如果您使用Genymotion:

您可以通过此IP: 10.0.3.2:{端口号}连接到计算机localhost 或者如上所述的适配器IP地址:在我的示例中是192.168.1.3:2080


允许安装PWA

首先,安装Android调试桥:

$ sudo apt install adb android-sdk-platform-tools-common

像往常一样启动你的Android模拟器,例如:

$ ~/Android/Sdk/emulator/emulator -avd Pixel_3a_API_30_x86

然后,在Android模拟器的网桥上配置反向代理,将localhost HTTP请求转发到运行在主机计算机上的localhost服务器的适当端口(例如8000),反之亦然:

$ adb reverse tcp:8000 tcp:8000

一个渐进web应用程序(PWA)正在localhost:8000上提供服务 或者127.0.0.1:8000将是可安装的,并连接到它的service-worker.js。而PWA安装不允许从IP地址10.0.2.2。

注意:adb reverse tcp:8000 tcp:8000需要在每次Android模拟器调用后重新发布。

因此,一个bash脚本启动一个Android模拟器,后面跟着一个反向代理,看起来像这样:

#!/usr/bin/env bash

$HOME/Android/Sdk/emulator/emulator -avd Pixel_3a_API_30_x86 > /dev/null 2>&1

adb reverse tcp:8000 tcp:8000

我知道这是旧的,但如果您发现10.0.2.2不能作为计算机IP,请按照以下说明找到它


公认的答案是正确的,但对我的情况不适用。我必须在主机上关闭公司VPN-client的情况下创建虚拟设备。这是完全可以理解的,因为许多公司网络使用以10开头的地址(专用网络范围),这可能会干扰特殊地址10.0.2.2


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

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


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