UID 分组应用:为什么有些应用只能作为一组配置
什么是 UID
Android 中的 UID(Linux User ID)是 Linux 用户身份在 Android 上的映射。每个应用安装时系统分配一个独立 UID,Android 用 UID 来实现应用隔离——不同 UID 的应用不能互相访问数据和资源。
为什么多个应用共享同一个 UID
Android ROM 构建时,ROM 厂商会把功能紧密相关的多个系统组件打包到同一个 UID 组里。例如:
- MIUI 的浏览器、天气、安全中心、设置可能共享一个 UID
- 三星 One UI 的 Bixby 相关组件共享一个 UID
- Google Play 服务的多个子组件共享一个 UID
共享 UID 的好处是这些组件可以直接相互访问数据(绕过 Android 的应用隔离机制),代价是它们的网络权限也无法独立控制。
NetGuard 如何处理 UID 组
NetGuard 发现多个应用共享同一个 UID 时,会把它们合并显示为一组。你在 NetGuard 应用列表里看到的不是独立的 N 个应用,而是一个 UID 组条目(可能显示为第一个应用的名字或一个组名)。
对 UID 组的 Wi-Fi / 移动数据开关操作会同时应用到组内所有应用——无法只拦截其中一个。
常见 UID 组示例
| UID 组类型 | 典型成员 | 处理建议 |
|---|---|---|
| Google Play Services 组 | GMS Core、GMS 位置、GMS 推送、GMS 身份验证 | 放行——几乎所有第三方应用依赖它 |
| 厂商 ROM 核心服务组 | MIUI 安全中心、MIUI 浏览器、MIUI 天气 | 放行或按实际需求决定 |
| Google 框架服务组 | Google Connectivity、Google Backup、Google Calendar Sync | 放行——系统功能依赖 |
| 应用分身组 | MIUI 应用分身、平行空间等 | 通常只在一个真实 UID 上,另一个分身独立 UID |
如何识别 UID 组
在 NetGuard 应用列表里,UI 上有两个迹象可以判断某个条目是不是 UID 组:
- 应用图标左下角有小方块或数字——表示这个条目代表多个应用
- 点击详情面板→ 面板里显示的访问日志和地址是组内所有应用的合并记录
如果你需要更准确地查看一个 UID 组包含哪些应用:
- 应用详情面板里会列出所有成员
- 或使用 Android 的「设置 → 应用和通知 → 应用信息」→ 点击 NetGuard 里看到的 UID 组名称
对 UID 组做配置时的注意
建议一:先了解组内成员
在对 UID 组做任何拦截操作前,先点展开箭头看看组内包含哪些组件。特别是系统级 UID 组——搞清楚哪些功能会受影响。
建议二:用条件而非完全禁止
如果某个 UID 组里大部分组件可以放行、只有少数需要限制,考虑用状态条件(亮屏时允许、漫游时禁止)来间接限制,而不是完全禁止整个组。
建议三:Hosts 拦截可穿透 UID 组
即使整个 UID 组你设置为允许联网,Hosts 广告拦截仍然会在组内所有应用上生效——因为 Hosts 拦截是域名级的,在规则引擎的最底层执行,不受应用级开关影响。这是一种"局部精确拦截"的办法。
建议四:Pro 版地址级控制也可穿透
Pro 版的地址级精细拦截也是独立于应用级开关的,可以对 UID 组内特定应用访问的特定域名做禁止——即使 UID 组整体是允许的。
UID 组不是 NetGuard 的限制
需要明确:UID 组合并显示不是 NetGuard 故意简化 UI——这是 Android 本身的限制。其他防火墙应用(包括 root 级的 AFWall+)也会遇到同样的 UID 组问题,因为 Android 的网络权限检查确实是按 UID 而不是按包名。
如何绕过 UID 组限制
Android 不提供拆分 UID 组的官方方法。你能做的:
- 接受 UID 组的存在——对系统级 UID 组默认放行,用 Hosts 或 Pro 地址级拦截做精细控制
- 如果有 root——可以用 iptables 按更细粒度做规则(但 NetGuard 的 VpnService 本身不支持这一点)
- 手动卸载组内不需要的应用(对用户应用的 UID 组有效)
UID 组 + 白名单模式
在白名单模式下,所有 UID 组默认被拦截(除非预定义规则放行)。你需要逐个手动放行需要的 UID 组——至少要放行 Play Services 相关的所有 UID 组,否则应用无法联网。
放行方法和普通应用完全相同:在应用列表里找到 UID 组条目 → 点击它的 Wi-Fi / 移动数据图标改成允许(绿色)。