从Android模拟器访问localhost:port

Rob*_*bin 200 port android localhost android-emulator

我正在运行的本地计算机上运行Web服务localhost:54722.

我想从Android模拟器中运行的应用程序调用该服务.

我读到10.0.2.2在应用程序中使用将访问localhost,但它似乎也不适用于端口号.它说HttpResponseException: Bad Request.

Akh*_*ain 371

您可以使用IP地址" 10.0.2.2" 访问主机.

这是由Android团队以这种方式设计的.因此,您的网络服务器可以在localhost上完美运行,您可以通过" http://10.0.2.2:<hostport>" 从Android应用程序访问它.

  • 显然这并没有澄清任何事情,Robin已经在问题中使用了10.0.2.2 ip并且它无法正常工作.虽然您的答案是正确的,但它没有提供解决方案. (23认同)
  • 为什么要这样?错误错误请求意味着可以访问本地主机服务器,但请求不完全正确. (8认同)
  • 这个答案为我完善了解决方案,并让我启动并运行:/sf/answers/3892420591/ (2认同)

Vin*_*shi 51

使用10.0.2.2作为默认AVD,使用10.0.3.2作为Genymotion

  • 为什么10.0.3.2用于Genymotion? (4认同)
  • @Jacob因为Genymotion是一个不同的模拟器,他们选择使用与谷歌模拟器不同的IP(这几乎没有用。说真的,他们什么时候会对他们糟糕的默认模拟器做点什么?) (2认同)

İsm*_*vuz 25

由于10.0.2.2不是 Android 的安全域,因此您必须在 API 28+ 的网络配置中允许非安全域,默认情况下会阻止非 TLS 连接。

您可以使用我的以下配置:

在 main/res/xml/network_security_config.xml 中创建一个新文件:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>
Run Code Online (Sandbox Code Playgroud)

并将其指向 AndroidManifest.xml

<application
......
......
android:networkSecurityConfig="@xml/network_security_config">
Run Code Online (Sandbox Code Playgroud)


Hug*_*ner 14

如果您使用的是IIS Express,则可能需要绑定到所有主机名而不仅仅是"localhost".检查这个好答案:

/sf/answers/1106678891/

告诉IIS Express本身绑定到所有IP地址和主机名.在.config文件中(通常为%userprofile%\ My Documents\IISExpress\config\applicationhost.config或$(solutionDir).vs\config\applicationhost.config for Visual Studio 2015),找到您网站的绑定元素,然后添加

<binding protocol="http" bindingInformation="*:8080:*" />
Run Code Online (Sandbox Code Playgroud)

确保将其添加为第二个绑定而不是修改现有绑定,否则VS将重新添加一个附加了a的新站点.(1) 另外,您可能需要以管理员身份运行VS.


Ehs*_*adi 12

我在Visual Studio上执行IIS Express上的Web应用程序时面临同样的问题.要修复它你需要转到你的项目属性,然后单击Debug选项卡并将http:// localhost:[你的 PORT]更改为http://127.0.0.1:[YOURPORT ]并将android url设置为http:/ /10.0.2.2: [你的港口].它对我有用.


小智 10

我在Visual Studio Professional 2015中安装了"Conveyor by Keyoti"解决了这个问题.传送带生成一个REMOTE地址(您的IP),其端口(45455)启用了外部请求.例:

在此输入图像描述

Conveyor允许您从网络上的外部平板电脑和手机或Android模拟器测试Web应用程序(无http://10.0.2.2:<hostport>)

步骤如下:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti


Md *_*ury 10

运行本地主机后,您到了http://localhost:[port number]/这里,找到了您的端口号。

然后从命令中获取您的 IP 地址,打开您的 windows 命令并键入 ipconfig 在此处输入图片说明

就我而言,IP 是192.168.10.33这样我的 URL 将是http://192.168.10.33:[端口号]/。在 Android 中,工作室使用此 URL 作为您的 URL。然后在模拟器的手动代理中设置您的 URL 和端口号。

在此处输入图片说明


Mar*_*rco 8

我有一个在我的localhost上运行的网络服务器.

如果我打开模拟器并想连接到我正在使用的本地主机192.168.x.x.这意味着您应该使用本地lan IP地址.顺便说一句,您HttpResponseException (Bad Request)并不意味着无法访问主机.

其他一些错误会导致此异常.


Cob*_*ger 7

问题是,Android模拟器映射10.0.2.2127.0.0.1,不能localhost.因此,请将您的Web服务器配置为serveron 127.0.0.1:54722而不是localhost:54722.应该这样做.


n37*_*370 7

我不确定这个解决方案是否适用于每个 Android Emulator 和每个 Android SDK 版本,但运行以下对我来说是有用的。

adb reverse tcp:54722 tcp:54722
Run Code Online (Sandbox Code Playgroud)

您需要让模拟器运行起来,然后才能成功localhost:54722进入正在运行的模拟器设备。


Lav*_*ish 5

在 Android Emulator 上访问 localhost

  • 从 AndroidManifest.xml 添加互联网权限
    <uses-permission android:name="android.permission.INTERNET" />

  • 添加android:usesCleartextTraffic="true",更多细节在这里

  • 运行下面提到的命令来查找您的系统 IP 地址:

ifconfig | grep "inet " | grep -v 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

复制从这一步(A)中获得的IP地址

  • 运行您的后端应用程序,您可以在您的系统中localhost127.0.0.1从您的系统访问该应用程序。

  • 现在在android studio中,如果您在代码中使用,则可以替换URL 或者您可以使用从步骤(A)中获得的IP地址并尝试在网络浏览器中打开,像这样http://192.168.0.102:8080/

不要忘记在 IP 地址后添加 PORT,在我的情况下,应用程序在 8080 端口上运行,所以我添加了在 (A) 中使用端口 8080 获得的 IP


归档时间:

查看次数:

157629 次

最近记录:

6 年 前