这是个非常重要的问题,涉及 Android 系统权限机制的核心。下面我来系统性地解释一下:
🛡️ 什么是“特权权限”(Privileged Permissions)?
特权权限,指的是 只有系统特权应用(privileged app) 才能申请和使用的权限。
这些权限的特点是:
-
普通第三方 App 无法声明或使用
-
必须安装在
/system/priv-app/
-
必须平台签名(用 platform key 签名)
-
必须配置白名单(privapp-permissions)
🏷️ 常见的特权权限有哪些?
比如你用到的:
权限 | 说明 |
---|---|
android.permission.INTERACT_ACROSS_USERS | 跨用户操作,比如读取另一个用户的应用数据 |
android.permission.MOUNT_UNMOUNT_FILESYSTEMS | 直接挂载或卸载分区,访问系统底层存储控制 |
android.permission.WRITE_SECURE_SETTINGS | 写入系统安全设置,如飞行模式、ADB 开关等 |
android.permission.STATUS_BAR | 修改状态栏,比如添加图标、通知控制 |
android.permission.PACKAGE_USAGE_STATS | 查看应用使用记录、统计信息 |
android.permission.READ_LOGS | 读取所有系统日志 |
android.permission.SHUTDOWN | 执行关机操作 |
这些权限如果落入普通 App 手中,会造成严重的安全问题。
🧠 为什么需要特权权限?
因为这些权限涉及 系统核心功能、用户隐私、或跨用户/进程安全边界,所以只有系统层(ROM层)控制的 App 才能拥有。
举个例子:
📱 你写一个系统扫码服务 App,它要:
-
在系统层启动后台扫码服务
-
监听屏幕状态
-
和多个用户隔离环境共享扫码设备
✅ 这时候你就 必须申请特权权限,否则系统会拒绝你做这些事。
🧰 特权权限需要什么条件?
条件 | 是否必须 |
---|---|
安装在 /system/priv-app/ | ✅ 是 |
用 platform key 签名 | ✅ 是(系统签名) |
添加白名单 XML (privapp-permissions ) | ✅ Android 9 以后强制 |
在 AndroidManifest.xml 中声明权限 | ✅ 是 |
正确的 UID(如:android.uid.system ) | 一般推荐设置,但不是强制 |
🚫 如果不符合,会怎么样?
情况 | 后果 |
---|---|
未加白名单 | 权限不会授予,可能崩溃 |
签名不对 | 安装失败,权限无效 |
不是 /priv-app/ | 权限不会授予 |
清单没声明 | 权限不会生效 |
✅ 总结
特权权限是干什么的? | 控制系统关键功能、保护系统安全 |
---|---|
谁能用? | 系统签名 + 安装在 /priv-app/ 的 App |
为啥要配置白名单? | Android 9+ 强化安全,防止滥用权限 |
如何启用? | 签名 + 清单声明 + 白名单 XML |