NetGuard 中文文档 下载 App

UID 分组应用:为什么有些应用只能作为一组配置

什么是 UID

Android 中的 UID(Linux User ID)是 Linux 用户身份在 Android 上的映射。每个应用安装时系统分配一个独立 UID,Android 用 UID 来实现应用隔离——不同 UID 的应用不能互相访问数据和资源。

为什么多个应用共享同一个 UID

Android ROM 构建时,ROM 厂商会把功能紧密相关的多个系统组件打包到同一个 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 组:

  1. 应用图标左下角有小方块或数字——表示这个条目代表多个应用
  2. 点击详情面板→ 面板里显示的访问日志和地址是组内所有应用的合并记录

如果你需要更准确地查看一个 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 组的官方方法。你能做的:

  1. 接受 UID 组的存在——对系统级 UID 组默认放行,用 Hosts 或 Pro 地址级拦截做精细控制
  2. 如果有 root——可以用 iptables 按更细粒度做规则(但 NetGuard 的 VpnService 本身不支持这一点)
  3. 手动卸载组内不需要的应用(对用户应用的 UID 组有效)

UID 组 + 白名单模式

在白名单模式下,所有 UID 组默认被拦截(除非预定义规则放行)。你需要逐个手动放行需要的 UID 组——至少要放行 Play Services 相关的所有 UID 组,否则应用无法联网。

放行方法和普通应用完全相同:在应用列表里找到 UID 组条目 → 点击它的 Wi-Fi / 移动数据图标改成允许(绿色)。