我正在开发一个连接到 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.
据我了解,以下是我的选择:
从设备获取主机文件:
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 root:adbd cannot run as root in production builds
问题第1部分:有没有办法在不永久root的情况下编辑设备的hosts文件?
在谷歌搜索时,我看到了主机文件解决方案的替代方案,即“在 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 设备在本地服务器上进行测试的方法?
我为 Mac 桌面/Android 移动/Rails 服务器组合制定的解决方案:
Chrome://inspect为移动设备设置端口转发此过程改编自此资源:https ://developer.chrome.com/devtools/docs/remote-debugging#port-forwarding
在此之前的假设:
chrome://inspect我安装了 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)
开始“乌贼人”。要进行故障排除,请打开“工具”菜单以查看访问日志。
在桌面上的 Chrome 上,打开chrome://inspect/#devices. 选择您的设备。单击“端口转发”。输入一行将端口 9000 定向到您的代理服务器:
9000 localhost:8080
Run Code Online (Sandbox Code Playgroud)
在设备上,打开 Wifi 连接高级设置。设置如下并保存。
Proxy: Manual
Proxy hostname: localhost
Proxy port: 9000
Run Code Online (Sandbox Code Playgroud)
我的 Android 设备现在可以正确连接到localsite.com:3000(如桌面上的主机文件中设置的那样)——现在,这对我来说可以从设备浏览器以及使用adb install.
| 归档时间: |
|
| 查看次数: |
5924 次 |
| 最近记录: |