如何在Android模拟器中连接本地主机?

387

我已经在 localhost 上创建了一个PHP脚本,并且正在使用httpClient进行连接,但是我遇到了问题。

请告诉我如何从仿真器连接到位于 localhost 的PHP文件?

7个回答

912

使用 10.0.2.2 访问你的实际物理机器。

如你所知,当你使用模拟器时,localhost (127.0.0.1) 是指设备自身的本地服务,而不是你所期望的计算机上的服务。

你可以使用 10.0.2.2 来访问你的实际物理机器,这是一个设置的别名,以帮助开发。


8
虽然这很好,但对于 OAuth 等情况并没有用处,因为 clientID 只适用于“localhost”。 - Dominic
17
在使用https本地主机时,10.0.2.2对我无效,我需要在https的情况下使用不同的IP地址吗? - Manu
7
首先,您需要将API从“localhost:port”更改为“127.0.0.1:port”。然后,使用10.0.2.2来访问您的实际计算机。 - binhtruong.it
有没有可能使用siteurl/siteHost而不是IP地址,因为我无法使用IP地址? - Meenakshi Khandelwal
2
这可能是最好的解决方案,而且不需要在AVD上进行代理配置(实际上https://dev59.com/pW035IYBdhLWcg3wQtog#59217370也不需要)。您可以通过`http://10.0.2.2:<port_your_server_runs_on>/<path>`访问在服务器上定义的端点。 - Theta
显示剩余2条评论

90

默认 AVD 请使用 10.0.2.2,Genymotion 请使用 10.0.3.2


1
这个答案还有参考价值吗? - Kalnode

84

1
这个对我有效。太好了。 - Rabindra Khadka

34

这是最终为我工作的方法。

  • 后端在本地主机上运行:localhost:8080
  • 获取您的IP地址(在Windows上使用ipconfig命令)

enter image description here

  • 配置您的Android模拟器代理,使用您的IP地址作为主机名,使用后端运行的端口作为端口(在我的情况下:192.168.1.86:8080enter image description here)。

  • 让您的Android应用程序向相同的URL发送请求(192.168.1.86:8080)(向本地主机发送请求,以及http://10.0.2.2对我无效)。


1
这对我也有效,但我认为代理不是必要的 - 我 Flask 服务器上的日志显示,当配置代理时,AVD 生成了大量奇怪和不必要的 GET 和 CONNECT 请求,导致 404。切换回“使用 Android Studio HTTP 代理设置”可以解决问题,现在服务器只接收到我明确想要的有效请求。你还可以为方便起见为你的机器分配一个静态 IP 地址,例如通过路由器设置,这样 DHCP 就无法更改它。 - Theta

21

感谢这篇博客的作者:https://bigdata-etl.com/solved-how-to-connect-from-android-emulator-to-application-on-localhost/

在XML文件中定义网络安全配置。

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
       <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

将其设置在AndroidManifest.xml

 <application
    android:networkSecurityConfig="@xml/network_security_config"
</application>

对我解决了问题!

请参考:https://developer.android.com/training/articles/security-config


安全配置XML文件的文件名是什么?博客链接已经失效。编辑:它在res/xml/network_security_config.xml中。 - Velizar Hristov
帮我只需将IP地址替换为您的IP或域名。 - Deepak gupta

14

您应该使用以下命令更改adb端口:

adb reverse tcp:8880 tcp:8880; adb reverse tcp:8081 tcp:8081; adb reverse tcp:8881 tcp:8881

我的本地服务器有一个自定义的URL。我该如何进行端口转发或反向转发? - Rohit Singh

8

将localhost替换为IP地址。


1
什么IP?我没有公共IP,因为我在本地服务器工作,你是指回环IP 127.0.0.1吗? - Sazzad Hissain Khan
2
获取你的IP地址(在Windows上使用ipconfig命令),这里的IP指的是IPv4,如192.168.100.4。 - Muhammad Azam
你指的是哪个IP?请具体说明。 - Anas

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