【发布时间】: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