【问题标题】:Connecting to a local server from Android device从 Android 设备连接到本地服务器
【发布时间】:2016-03-01 12:24:24
【问题描述】:

我正在开发一个连接到 Rails Web 服务器的 Android 应用程序。我需要在我的计算机上针对服务器的开发版本测试该应用程序。为了工作,服务器需要传入的请求到达指定的域。

请求发送至localsite.com:3000

对于浏览器测试,我计算机上的 hosts 文件处理:

127.0.0.1    localsite.com 

为了从 Android 模拟器进行测试,模拟设备中的 hosts 文件处理:

10.0.2.2    localsite.com #Localhost from an Android emulator

现在我想从物理设备(启用了开发人员工具但未植根的 Nexus6。我的偏好是保持这种方式)对其进行测试。我可以使用 IP 和端口 (192.168.1.190:3000) 从电话连接到我的服务器,但是服务器上没有任何工作,因为它需要 localsite.com:3000

据我所知,这是我的选择:

选项1:编辑设备的hosts文件

从设备获取主机文件:

adb pull /system/etc/hosts ~/device_hosts/nexus6

编辑主机文件:

192.168.1.190       localsite.com    #IP of workstation on local network

尝试将主机文件推送回设备:

adb push ~/device_hosts/nexus6/hosts /system/etc

这失败了,错误为failed to copy: Read-only file system

adb remount 也失败了,adb root 也失败了:adbd cannot run as root in production builds

问题第 1 部分:有没有办法在不永久 root 的情况下编辑设备的 hosts 文件?

选项 2:在 Android 手机上使用 DNS 服务器

在谷歌搜索时,我看到了对主机文件解决方案替代方案的引用,即“在 Android 手机上运行 DNS 服务器”。我还不清楚这如何与主机文件执行相同的工作。

我已经在手机上安装了应用DNS Server,并且正在运行一个带有“转发”规则的DNS服务器,如下:

Server name: mysite
Port: 59953 
Forward: mysite.com to 198.168.1.190

结果绝对没有。设备对 mysite.com 或 mysite.com:3000 的请求未到达本地服务器。

问题第 2 部分:我可以在我的 Android 手机上设置 DNS Server 应用程序,以便它可以向在本地网络上的机器上运行的 mysite.com:3000 发出请求吗?

额外问题:是否有任何其他方法可以在我尚未考虑的物理、无根 Android 设备上在本地服务器上进行测试?

【问题讨论】:

  • 尝试使用 ngrok ngrok.com 在 localhost 上为您的服务器建立隧道,它提供了两个 url,一个带有 ssl,另一个不带,您可以使用这些

标签: android


【解决方案1】:

我为我的 Mac 桌面/Android 移动/Rails 服务器组合制定的解决方案:

  1. 在桌面安装代理服务器,允许应用连接
  2. 在桌面上使用Chrome://inspect 为移动设备设置端口转发
  3. 在设备上设置 Wifi 以使用代理服务器

此流程改编自此资源:https://developer.chrome.com/devtools/docs/remote-debugging#port-forwarding

在此之前的假设:

  • 您有一个支持开发者工具的 Android 设备,它通过 USB 连接到您的桌面并显示在 chrome://inspect
  • 您的 Android 设备和台式机在同一个 Wifi 网络中
  • 您已在台式计算机上设置了 hosts 文件,以便您可以使用正确的名称在本地访问您的服务器

第一步:桌面代理服务器:

我安装了 Squidman 代理服务器:http://squidman.net/squidman/index.html,在 8080 端口上运行。

在“模板”选项卡上,注释掉此行以允许访问在代理主机(例如,您的本地主机)上运行的 Web 应用程序:

# protect web apps running on the proxy host from external users
#http_access deny to_localhost

启动“鱿鱼人”。要进行故障排除,请打开“工具”菜单以查看访问日志。

第 2 步:为设备设置端口转发:

在桌面上的 Chrome 上,打开 chrome://inspect/#devices。选择您的设备。单击“端口转发”。输入一行以将端口 9000 定向到您的代理服务器:

 9000    localhost:8080

第 3 步:在设备上设置 Wifi 以使用代理服务器

在设备上,打开 Wifi 连接高级设置。如下设置并保存。

Proxy: Manual
Proxy hostname: localhost
Proxy port: 9000

我的 Android 设备现在可以正确连接到 localsite.com:3000(在桌面上的 hosts 文件中设置)- 现在这适用于我在设备浏览器和使用 adb install 安装的应用程序中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 2013-03-04
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多