Android 7 的 CPU 悬浮窗限制——安全策略改了什么
背景
Android 7.0(Nougat)在 2016 年发布时,修改了一系列安全策略。其中一个改动直接影响了 AccuBattery 的「进程 CPU 使用率」悬浮窗。
什么变了
AccuBattery 的三种悬浮窗:
| 悬浮窗 | Android 6 及以下 | Android 7 及以上 |
|---|---|---|
| 电池电流 | ✅ 正常 | ✅ 正常 |
| CPU 核心使用率 | ✅ 正常 | ✅ 正常 |
| 进程 CPU 使用率 | ✅ 正常 | ❌ 不可用 |
AccuBattery 帮助中心明确说:
"Process CPU usage overlay won't work anymore in Android 7 as they've changed the security settings."
为什么
Android 7 收紧了跨进程 CPU 使用率读取的权限。之前第三方 App 可以通过读取 /proc/*/stat 文件来获取任意进程的 CPU 使用率。Android 7 限制了这个路径——App 只能读取自己的进程数据,不能读取前台 App 或其他 App 的。
这是 Android 安全加固的一部分——防止恶意 App 通过读取其他进程的数据来窥探信息。
另外两种为什么不受影响
- 电池电流悬浮窗:读取的是 Android
BatteryStatsManager提供的电池电流 API——这个权限没有被收紧 - CPU 核心使用率悬浮窗:读取的是
/proc/stat里的整机所有核心的使用率数据——这个权限没被限制(它是整机信息,不涉及具体进程)
只有「某一个特定 App 进程的 CPU 使用率」这个数据,Android 7 以后不让读了。
这很重要吗
对大多数用户来说不重要:
- 你想测一个 App 费不费电 → 用电池电流悬浮窗(更直接)
- 你想看整机 CPU 负载 → 用CPU 核心使用率悬浮窗
- 「某个进程单独用了多少 CPU」是个非常程序员向的细粒度数据,普通用户基本不需要
Premium 会员买了之后,三种悬浮窗还有两种可用,加上历史解锁、深色主题,功能价值仍然很高。
Android 7 以下的设备
如果你用的是 Android 6.0 或更老的设备(现在应该很少见了),三种悬浮窗全部可用,包括进程 CPU 使用率。
总结
| 悬浮窗类型 | Android 版本限制 | 功能价值 |
|---|---|---|
| 电池电流 | 无 | 最高——直接看耗电 |
| CPU 核心使用率 | 无 | 中等——看整机负载 |
| 进程 CPU 使用率 | 仅 Android 6- | 低——普通用户用不到 |