【问题标题】:How do you connect localhost in the Android emulator? [duplicate]如何在 Android 模拟器中连接 localhost? [复制]
【发布时间】:2011-07-28 13:59:03
【问题描述】:

我在 localhost 中创建了一个 php 脚本,我正在将它与 httpClient 连接,但我遇到了问题。

请告诉我如何从模拟器连接到 localhost 的 php 文件?

【问题讨论】:

    标签: android-emulator localhost httpconnection androidhttpclient


    【解决方案1】:

    使用10.0.2.2 访问您的实际机器。

    如您所知,当您使用模拟器时,localhost (127.0.0.1) 指的是设备自己的环回服务,而不是您所期望的机器上的环回服务。

    您可以使用 10.0.2.2 来访问您的实际机器,它是为帮助开发而设置的别名。

    【讨论】:

    • 很好,尽管这对于例如oauth 虽然其中 clientID 仅对 localhost 有效
    • 10.0.2.2 在 https localhost 的情况下对我不起作用,在 https 的情况下我必须使用不同的 ip 吗?
    • 但您需要先将 API 从“localhost:port”更改为“127.0.0.1:port”。之后,使用 10.0.2.2 访问您的实际机器。
    • 如果你想支持 API 28+ 也应该这样做:stackoverflow.com/a/56769746/2290369
    • 这可能是最好的解决方案,它不需要在 AVD 上进行代理配置(stackoverflow.com/a/59217370/6422750 实际上也不需要)。您可以通过http://10.0.2.2:<port_your_server_runs_on>/<path> 访问服务器上定义的端点。
    【解决方案2】:

    10.0.2.2 用于默认AVD,10.0.3.2 用于Genymotion

    【讨论】:

    【解决方案3】:

    感谢@lampShaded 的回答。

    在您的 API/URL 中直接使用 http://10.0.2.2:[your port]/ 并在模拟器设置下添加代理地址为 10.0.2.2 和端口号。更多内容,您可以访问:https://developer.android.com/studio/run/emulator-networking.html

    【讨论】:

    • 不适合我。我已经在 etc/hosts 中为我的站点添加了自定义名称现在我想在 android 模拟器中访问 mywebapp.local URL 我该怎么做
    【解决方案4】:

    这最终对我有用。

    • 后端运行在 localhost:8080
    • 获取您的 IP 地址(Windows 上的 ipconfig)

    • 将您的 Android 模拟器的代理配置为使用您的 IP 地址作为主机名和您的后端运行的端口作为端口(在我的情况下:192.168.1.86:8080

    • 让您的 Android 应用向相同的 URL (192.168.1.86:8080) 发送请求(向 localhost 发送请求,http://10.0.2.2 对我不起作用)

    【讨论】:

    • 这是唯一适合我的解决方案。关键点:应用发送请求到与代理设置相同的URL和端口。
    • 这也适用于我,但我认为代理不是必需的 - 我的 Flask 服务器上的日志显示,配置代理时,AVD 生成了大量奇怪且不必要的 GET 和 CONNECT,导致 404。切换回Use Android Studio HTTP proxy settings 修复了它,现在服务器只接收我明确想要的有效请求。为方便起见,您可以做的另一件事是为您的机器分配一个静态 IP 地址,例如通过您的路由器设置,这样 DHCP 就无法更改它。
    【解决方案5】:

    感谢本博客作者: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

    【讨论】:

    • 天啊!你救了我的命!!虽然你没有直接回答这个问题,但你绝对救了我的命,不允许使用 clearText Http 问题。
    【解决方案6】:

    而不是给localhost给IP。

    【讨论】:

    • 什么IP?我在本地服务器上工作时没有公共 IP,您的意思是环回 ip 127.0.0.1 吗?
    • 获取您的 IP 地址(Windows 上的 ipconfig),这里的 IP 表示 IPv4,如 192.168.100.4
    【解决方案7】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 2019-03-08
      • 2017-07-25
      • 2020-05-28
      • 2012-01-08
      • 2018-08-21
      相关资源
      最近更新 更多