安卓上做分应用代理,很多人以为必须 root。其实从 Android 4.0 开始,系统提供了 VpnService 接口,任何 VPN 类应用都能在不 root 的情况下接管流量,并且支持按应用挑选。
原理:不是"装代理",是"建一条本地隧道"
VpnService 会在系统里注册一条虚拟网络接口,所有符合条件的 App 流量先进入这条接口,再由应用决定怎么处理。
关键点是:它可以在建接口时指定白名单或黑名单,也就是"哪些 App 的流量进来、哪些不进"。这就是免 root 分应用代理的基础。
怎么配
绝大多数客户端把这一步做成了开关,位置一般在:
- 「分应用代理 / 按应用代理 / Per-app proxy」
- 或者「应用分流」「应用管理」
两种模式:
| 模式 | 含义 | 适合 |
|---|---|---|
| 仅代理选中应用 | 白名单 | 只想让几个 App 走代理 |
| 代理除选中外的全部 | 黑名单 | 大部分走代理,少数(银行、地图)直连 |
日常用黑名单更省事:把银行、支付、外卖、地图这几个排除掉,其余全走。
两个常见的坑
坑一:只有一条 VPN 连接
安卓系统同一时间只允许一条 VpnService 连接。如果你已经开了另一个 VPN 类应用,再开一个会直接把前一个顶掉,表现是"开了新的,旧的断了"。
这不是 bug,是系统限制,绕不过去。
坑二:分应用不生效,全都走了代理
常见原因是 App 使用了独立的网络栈(部分游戏、视频 App 会绕过系统网络)。这类应用的流量不经过 VpnService,分应用设置对它们无效。
判断方法:在客户端里看连接日志,如果某个 App 的流量根本没出现,说明它绕过了。
和 iOS 的差别
iOS 的 NetworkExtension 也支持按需连接和分应用,但限制更严:普通开发者拿不到某些权限,所以 iOS 上的分应用体验普遍不如安卓。
这也是为什么很多方案在安卓上做分应用、在 iOS 上直接全局。
电量与耗流
VpnService 本身不额外耗电,但如果客户端做了流量统计或日志记录,长时间开启会增加一些开销。判断方法:设置 → 电池,看客户端的耗电排名,正常应该很低。
💡 一个实用建议:把「银行、支付、政务」三类 App 加进排除列表,能避免大部分"打开就闪退/白屏"的问题——它们对 IP 归属地敏感。