限制广告追踪 App Ops 阻断数据收集权限
广告 SDK 怎么收集数据
Android 应用中的广告 SDK(Google Ads、穿山甲、优量汇等)通常通过以下渠道收集数据:
- 位置信息:通过 ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION appops
- 设备信息:通过 READ_PHONE_STATE appops
- 广告 ID:通过 AdvertisingIdClient(不被 appops 直接覆盖,但可以在系统设置里重置)
- 存储访问:通过 READ_EXTERNAL_STORAGE appops 扫描应用数据
- 网络访问:通过 INTERNET 权限(这个 appops 层没有对应项,App Ops 管不了)
- 传感器:某些激进 SDK 会读取加速度计、方向传感器
App Ops 能阻断什么
App Ops 能控制的是有对应 appop 的那些权限:
| 被收集的数据 | 对应 appop | App Ops 控制方式 |
|---|---|---|
| 精确位置 | ACCESS_FINE_LOCATION | 忽略 |
| 粗略位置 | ACCESS_COARSE_LOCATION | 忽略 |
| 设备状态 | READ_PHONE_STATE | 忽略 |
| 存储扫描 | READ_EXTERNAL_STORAGE | 忽略 |
| 传感器 | BODY_SENSORS | 忽略 |
| 麦克风 | RECORD_AUDIO | 忽略 |
| 剪贴板 | READ_CLIPBOARD | 忽略 |
对于没有对应 appop 的(如 INTERNET、READ_PRIVILEGED_PHONE_STATE),App Ops 无法控制。
推荐操作流程
第一步:系统级广告追踪设置
先在 Android 系统层面做一轮基础设置:
- 设置 → 隐私 → 广告 → 重置广告 ID
- 设置 → 隐私 → 广告 → 关闭"广告个性化"
- 这会让 Google Ads 无法用广告 ID 追踪你
第二步:App Ops 拦截敏感权限
对每个装了广告 SDK 的应用(几乎所有免费应用):
- 进入应用详情页
- 把位置、设备状态、传感器、剪贴板设为忽略
- 存储权限按需决定——如果应用不应该访问公共目录也设为忽略
第三步:验证效果
设置忽略后:
- 打开应用观察是否正常运行
- 广告可能还会显示(网络请求 App Ops 管不了),但不会再用你的真实数据做精准投放
- 注意:应用检测到拿不到数据可能显示一些弱提示,但一般不会崩溃
按应用类型的策略
| 应用类型 | 建议 |
|---|---|
| 免费游戏 | 位置/设备状态/传感器全部忽略(影响最小) |
| 免费工具 | 按需忽略——如果功能不依赖位置就忽略 |
| 免费新闻 | 忽略定位(防止按位置推定向内容) |
| 免费购物 | 忽略剪贴板和存储(防止偷取比价) |
| 付费无广告应用 | 通常不需要这么激进,但仍可忽略不必要的权限 |
效果边界
需要诚实承认 App Ops 的局限性:
- 网络访问 App Ops 管不了:广告请求本身还是会发出,只是带的是空数据
- Google Play Services:GMS 本身也在收集数据,需要 App Ops X 扩展才能控制它的 appops
- 厂商 ROM 的广告服务:MIUI/ColorOS 等系统级广告无法用 App Ops 阻断
- 某些广告 SDK 会降级:如果拿不到位置,可能用更不透明的方式做设备指纹识别
组合方案更有效
App Ops 单独使用只能做到"部分阻断",配合其他工具效果更好:
- DNS 拦截(AdGuard 等):直接阻断广告域名的网络请求
- Privacy Sandbox 设置(Android 13+):系统级关闭广告追踪
- App Ops:在 appops 层拦截数据被实际读取
- Magisk 模块(有 Root):更底层的广告 SDK hook
App Ops 是这套组合里"不需要 Root 就能上手"的关键一环。