如何以非编程方式在 Android 上配置代理排除列表?
How to configure a proxy exclusion list on Android non-programmatically?
我是 运行 Android Kit-Kat 4.4.2。我已经能够使用 data/data/com.android.providers.settings/databases 中的 settings.db 数据库配置全局代理,我一直在使用 adb 手动更改它。为此,我做了以下工作:
- 在 global table 中插入了一个值,_id=99,name='http_proxy',value='[proxy_host] :[proxy_port]'(显然用适当的值替换 [proxy_host] 和 [proxy_port])。
- 重新启动。这会自动在 global table 中生成行,名称为:global_http_proxy_host、global_http_proxy_port、global_proxy_pac_url 和 global_http_proxy_exclusion_list.
- 已自动为 global_http_proxy_host 和 global_http_proxy_port 行提供正确的设置(即分别为 [proxy_host] 和 [proxy_port])。其余都是空的。
代理有效。作为参考,我使用 Firefox for Android 版本 44.0.1 来测试它是否有效。只要 network.proxy.type 设置的值为 5,就会遵守此全局代理(参见 this Mozilla knowledge-base)。
当我在 global_http_proxy_exclusion_list 中输入 URL 并测试它是否已被排除时,我仍然通过代理进行路由。我想也许我需要重新启动设备才能进行更新,但在重新启动时 global_http_proxy_exclusion_list 会重置,因此它再次为空。
我已经尝试对此进行网络搜索 属性,但我只得到源代码的链接,这在这种情况下没有帮助。
我还发现 以编程方式配置代理排除列表。如果这是配置这样一个列表的唯一方法,那么它就可以了,但如果可以的话,我宁愿避免它。
我已经能够使用 network.proxy.no_proxies_on 配置选项(并将 network.proxy.type 设置为 1)使用代理排除列表专门配置 Firefox,但我想知道是否有办法设置全局代理。
使用 Android 应用程序可以解决这个问题table。我已经安装了 ProxyDroid 并配置了代理,但据我所知,这没有任何作用(或者 Firefox 只是不尊重代理)。 (对于可能认为使用 ProxyDroid 是正确答案的任何人:我已经对我的设备进行了 root,但仍然收到来自 ProxyDroid 的消息,说需要 root 设备。这正常吗?)
我有什么方法可以在 Android 中以非编程方式配置代理排除列表吗?
为了让您的 global_http_proxy_exclusion 值保持不变,我认为您需要删除旧的 http_proxy 条目。 (换句话说,只设置 global_http_proxy_* 键。)
ConnectivityService 实现 handleDeprecatedGlobalHttpProxy() 方法,该方法在生成持久保存到 global_http_proxy_* 键的新 ProxyInfo 之前查看旧 http_proxy 键。此方法生成的 ProxyInfo 始终使用一个空白的排除列表,我认为这是在 Android 启动后覆盖您设置的值的原因。
运行 Lollipop,当我删除 http_proxy 并且仅依赖于全局设置时,我的排除列表在重启后仍然存在。
我是 运行 Android Kit-Kat 4.4.2。我已经能够使用 data/data/com.android.providers.settings/databases 中的 settings.db 数据库配置全局代理,我一直在使用 adb 手动更改它。为此,我做了以下工作:
- 在 global table 中插入了一个值,_id=99,name='http_proxy',value='[proxy_host] :[proxy_port]'(显然用适当的值替换 [proxy_host] 和 [proxy_port])。
- 重新启动。这会自动在 global table 中生成行,名称为:global_http_proxy_host、global_http_proxy_port、global_proxy_pac_url 和 global_http_proxy_exclusion_list.
- 已自动为 global_http_proxy_host 和 global_http_proxy_port 行提供正确的设置(即分别为 [proxy_host] 和 [proxy_port])。其余都是空的。
代理有效。作为参考,我使用 Firefox for Android 版本 44.0.1 来测试它是否有效。只要 network.proxy.type 设置的值为 5,就会遵守此全局代理(参见 this Mozilla knowledge-base)。
当我在 global_http_proxy_exclusion_list 中输入 URL 并测试它是否已被排除时,我仍然通过代理进行路由。我想也许我需要重新启动设备才能进行更新,但在重新启动时 global_http_proxy_exclusion_list 会重置,因此它再次为空。
我已经尝试对此进行网络搜索 属性,但我只得到源代码的链接,这在这种情况下没有帮助。
我还发现
我已经能够使用 network.proxy.no_proxies_on 配置选项(并将 network.proxy.type 设置为 1)使用代理排除列表专门配置 Firefox,但我想知道是否有办法设置全局代理。
使用 Android 应用程序可以解决这个问题table。我已经安装了 ProxyDroid 并配置了代理,但据我所知,这没有任何作用(或者 Firefox 只是不尊重代理)。 (对于可能认为使用 ProxyDroid 是正确答案的任何人:我已经对我的设备进行了 root,但仍然收到来自 ProxyDroid 的消息,说需要 root 设备。这正常吗?)
我有什么方法可以在 Android 中以非编程方式配置代理排除列表吗?
为了让您的 global_http_proxy_exclusion 值保持不变,我认为您需要删除旧的 http_proxy 条目。 (换句话说,只设置 global_http_proxy_* 键。)
ConnectivityService 实现 handleDeprecatedGlobalHttpProxy() 方法,该方法在生成持久保存到 global_http_proxy_* 键的新 ProxyInfo 之前查看旧 http_proxy 键。此方法生成的 ProxyInfo 始终使用一个空白的排除列表,我认为这是在 Android 启动后覆盖您设置的值的原因。
运行 Lollipop,当我删除 http_proxy 并且仅依赖于全局设置时,我的排除列表在重启后仍然存在。