从 Android 设备连接到本地服务器

Ali*_*i H 3 android

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

请求发送至localsite.com:3000

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

127.0.0.1    localsite.com 
Run Code Online (Sandbox Code Playgroud)

对于从 Android 模拟器进行测试,模拟设备中的主机文件处理:

10.0.2.2    localsite.com #Localhost from an Android emulator
Run Code Online (Sandbox Code Playgroud)

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

据我了解,以下是我的选择:

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

从设备获取主机文件:

adb pull /system/etc/hosts ~/device_hosts/nexus6
Run Code Online (Sandbox Code Playgroud)

编辑主机文件:

192.168.1.190       localsite.com    #IP of workstation on local network
Run Code Online (Sandbox Code Playgroud)

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

adb push ~/device_hosts/nexus6/hosts /system/etc
Run Code Online (Sandbox Code Playgroud)

此操作失败,并出现错误failed to copy: Read-only file system

adb remount也失败了,如下adb rootadbd 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
Run Code Online (Sandbox Code Playgroud)

结果绝对是一无所获。从设备向 mysite.com 或 mysite.com:3000 发出的请求不会到达本地服务器。

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

额外问题:是否还有其他我尚未考虑过的从物理、未 root 的 Android 设备在本地服务器上进行测试的方法?

Ali*_*i H 5

我为 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文件,以便您可以使用正确的名称在本地访问您的服务器

步骤1:桌面上的代理服务器:

我安装了 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
Run Code Online (Sandbox Code Playgroud)

开始“乌贼人”。要进行故障排除,请打开“工具”菜单以查看访问日志。

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

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

 9000    localhost:8080
Run Code Online (Sandbox Code Playgroud)

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

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

Proxy: Manual
Proxy hostname: localhost
Proxy port: 9000
Run Code Online (Sandbox Code Playgroud)

我的 Android 设备现在可以正确连接到localsite.com:3000(如桌面上的主机文件中设置的那样)——现在,这对我来说可以从设备浏览器以及使用adb install.