appops(App Ops)是 Android 4.4+ 引入的「细粒度权限管理」体系。比起传统权限只有「授予 / 拒绝」两种状态,appops 可以针对具体的操作(如定位、相机、剪贴板、后台活动)单独设置允许 / 忽略 / 询问,是免 Root 限制应用行为、防追踪的关键工具。
基本语法
1 2 3
| appops set [--uid UID|--user 用户] 包名 操作 模式 appops get 包名 appops reset 包名
|
1
| adb shell appops <command>
|
核心概念:AppOps 操作(Ops)
每个 AppOps 都有固定的操作码,常见的包括:
| 操作 |
作用 |
模式 |
COARSE_LOCATION |
粗略定位 |
allow / ignore / deny |
FINE_LOCATION |
精确定位 |
allow / ignore / deny |
CAMERA |
相机 |
allow / ignore / deny |
RECORD_AUDIO |
麦克风 |
allow / ignore / deny |
READ_CLIPBOARD |
读取剪贴板 |
allow / ignore |
WRITE_CLIPBOARD |
写入剪贴板 |
allow / ignore |
GET_USAGE_STATS |
使用统计 |
allow / ignore |
SYSTEM_ALERT_WINDOW |
悬浮窗 |
allow / ignore |
RUN_IN_BACKGROUND |
后台运行 |
allow / ignore |
SEND_SMS |
发送短信 |
allow / ignore |
注意:不同 Android 版本的 appops 名称略有差异,可用 appops help 查看完整列表。
查看应用的 appops 状态
1 2 3 4 5 6 7 8
| # 查看单个应用的完整权限状态 adb shell appops get 包名
# 只查看某类操作 adb shell appops get 包名 CAMERA
# 查看所有应用在某个操作上的状态 adb shell appops get --uid <UID> 操作
|
设置权限模式
模式有三种,含义如下:
allow:允许
ignore:忽略(系统执行操作但返回空结果,应用以为成功了,实际拿不到数据)
deny:拒绝(应用会收到失败回调,能感知被拒)
default:恢复系统默认
1 2 3 4 5 6 7 8 9 10 11
| # 禁止某应用使用精确定位(返回空数据,防追踪) adb shell appops set 包名 FINE_LOCATION ignore
# 禁止使用相机 adb shell appops set 包名 CAMERA deny
# 禁止读取剪贴板 adb shell appops set 包名 READ_CLIPBOARD ignore
# 恢复默认 adb shell appops set 包名 CAMERA default
|
针对特定用户(应用分身核心)
1 2 3 4 5
| # 只对用户 10(分身用户)设置 adb shell appops set --user 10 包名 FINE_LOCATION ignore
# 指定 UID 设置 adb shell appops set --uid 10xxxx 包名 CAMERA deny
|
应用分身的每一个分身都是独立的用户,各自拥有独立的 appops 状态。改主用户不影响分身,改分身不影响主用户。
批量管理
1 2 3 4 5
| # 重置应用的所有 appops adb shell appops reset 包名
# 查看当前设备所有被改动的 appops adb shell appops get --uid all
|
实战:免 Root 屏蔽应用读取剪贴板
1 2 3 4 5 6 7 8
| # 列出所有有剪贴板权限的应用 adb shell appops get --uid all READ_CLIPBOARD
# 逐个屏蔽 adb shell appops set 包名 READ_CLIPBOARD ignore
# 验证 adb shell appops get 包名 READ_CLIPBOARD
|
与 pm 权限的区别
| 维度 |
pm grant/revoke |
appops set |
| 粒度 |
只到「权限」级别 |
到「操作」级别(更细) |
| 状态 |
授予 / 撤销 |
allow / ignore / deny / default |
| 可感知 |
应用能感知被拒 |
ignore 时应用感知不到 |
| 作用域 |
整个应用 |
可按用户、UID 区分 |
注意事项
appops 命令在部分国产 ROM 上被阉割,可尝试 cmd appops。
- Android 12+ 一些敏感 appops 需要系统签名才能修改。
ignore 是最「温柔」的拒绝方式,很多防追踪方案都依赖它。
掌握 appops,你就能在不 Root 的情况下,精确控制每个应用的每一项小权限,真正做到「我的手机我做主」。