从系统功能本身的角度来说,iOS 在权限管理上依然有不少值得 Android 学习和追赶的地方——Android 这边刚刚将权限授予的粒度细化至「仅应用运行」和「仅本次」的同时,iOS 14 已经进一步引入了模糊定位、本地网络权限、相册读取范围、剪贴板监控等等新功能。
好在 Android 的精彩之处往往都在「第三方」,就在最近,老牌权限管理工具 App Ops 也迎来了 4.0 大版本更新。这次更新可以说是对 Android、iOS 甚至 MIUI(为什么会把 MIUI 并列出来?因为万物基于 MIUI)权限管理特性的一次全面集成。
免 root 也能使用
App Ops 与 Google 在原生 Android 中提供的系统服务 appops 同名,早年的 App Ops 主要提供一些功能增强,解决 appops 在交互和功能上难以覆盖的痛点并简化技术细节,让普通用户也能通过修改「应用操作」行为的方式达到权限管理的目的。
一点技术细节:其实 App Ops 更像是一款管理手机上所有应用的「行为」的教官,这些应用操作行为涵盖了大部分手机系统向用户提供的诸如
照相
、录音
、请求安装应用
这样的常见权限,也提供了系统没有开放给用户控制的应用操作,比如读取剪贴板内容、音频焦点等等。App Ops 实际上是一款把「应用操作行为」封装成「权限」并提供给用户进行控制的一款应用,也因此在 App Ops 中把 Android 系统对于应用操作的「忽略」(给予空白数据)统一写成了「拒绝」。
虽然随着近几年的更新 App Ops 在功能和设计上不断精进,它的上手和配置方法直到最近的 4.0 版本才发生较大变动。
在 App Ops 4.0 及以上的版本中,我们可以通过 Shizuku 框架和「托管设备管理员模式」两种方法来启动 App Ops。
通过 Shizuku 框架启动
你可以将 Shizuku 理解为一个类似 Magisk 框架的工具(尽管作用域要小得多),Magisk 为诸多定制模块提供了一个通用的挂载机制和管理平台,Shizuku 则为一些需要调用系统 API 的工具应用提供统一便利。详见:Shizuku 简介
本文的主角 App Ops 也在其中。
从 Play 商店 或 酷安 下载安装最新版 Shizuku 应用后将手机通过 USB 调试模式连接至电脑,跟随应用内提示执行 adb 指令即可完成 Shizuku 框架的启动。如果你担心指令转誊错误,建议直接复制、粘贴以下命令执行:
Android 6.0:
adb shell sh /data/user/0/moe.shizuku.privileged.api/start.sh
Android 7.0 及以上:
adb shell sh /data/user_de/0/moe.shizuku.privileged.api/start.sh
和其他使用 adb 指令运行的工具类似的,这个指令的效果也会随着手机重启、USB 调试开关状态的变化而关闭,具体而言,免 root 情况下每次手机开机时都需要我们重复上面的启动步骤。
通过「托管设备管理员模式」启动
如果你的手机没有获取 root 权限,同时又觉得开机时通过 adb 启动 Shizuku 的步骤过于繁琐,也可以通过 adb 启用「托管设备管理员模式」的方法来简化 Shizuku 的启动流程——相应的,这种做法也增加了前期准备的工作量,涉及到删除设备上现有账号、多用户数据、安装第三方应用、设置管理员应用等等操作,请根据实际情况选择。
和常见 adb 启动方式不同,通过 adb 为 App Ops 开启「托管设备管理员模式」需要「借力」:先在特定的第三方应用中设置管理员模式,然后借助「设备管理员」身份授予 App Ops 修改 appops 操作行为的能力。
这里以操作流程相对简单的冰箱 IceBox 为例。
从 酷安 下载安装冰箱后,确保操作系统版本为 Android 9 及以上,同时电脑端 adb 环境 配置 正确。然后执行以下步骤:
- 删除手机上已经添加的所有账号(一般位于「系统设置 > 账户」中),如 Google 同步账号、小米云服务账号等等
- 删除手机访客模式/多用户模式中除当前用户外的其他用户,一些定制系统的应用双开、平行空间功能也需一并关闭
- 手机开启 USB 调试模式,连接电脑并授予 USB 调试权限
- 电脑端打开命令行工具,执行
adb shell dpm set-device-owner com.catchingnow.icebox/.receiver.DPMReceiver
索尼、小米等特定 OEM 厂商的机型还有一些特别的注意事项,具体可参见冰箱开发者的在线 帮助文档。
命令执行成功后,我们就可以把刚刚删除的账号添加回来了。此时回到 App Ops 并选择「托盘设备管理员模式」模式,在接下来弹出的窗口中勾选允许「修改 app ops」并点击确定。
接下来我们还需要授予 App Ops 获取 app ops 权限:同样将手机通过 USB 调试与电脑相连,执行:
adb shell pm grant --user 0 rikka.appops android.permission.GET_APP_OPS_STATS
如果你是多用户、访客模式这类功能的用户,则还需要将上述命令中的 --user 0 替换为对应的 user id 进行授权,user id 的获取指令如下:
adb shell pm list users
返回的 UserInfo{X:Owner:13} running
中的 X 即为用户 id。最后,为了让 App Ops 拥有访问其他用户的权限,你还需要运行下面这条指令:
adb shell pm grant --user 0 rikka.appops android.permission.INTERACT_ACROSS_USERS
除了冰箱 Icebox,你也可以借助其他工具(如 小黑屋、Island 等)的管理员模式来完成上述步骤,具体方法应工具而异。
总体而言,在 root 模式被移除之后,选择 Shizuku 启动 App Ops 的便捷性优势越发凸显。如果你同时也在使用 Rikka Apps 系列的其他应用,Shizuku 也可以作为一个通用的激活手段,一鸡多吃。
要求 | 第三方工具 | 便利性 | 功能性 | |
Shizuku | root | 无需 | 非常方便 | 剪贴板监视 |
免 root(adb) | 无需 | 不方便 | / | |
托管设备管理员 | 免 root | 需要 | 一劳永逸 | / |
root 直接启动 | root(最新版已移除) | 无需 | 非常方便 | / |
至于 Shizuku 相比直接 root 启动的模式优势究竟有哪些,可以参阅 这里 和 这里。
一个应用搞定敏感权限
启动 App Ops 等待应用列表加载完毕,一扇新的大门就已经向我们敞开了,接下来我们需要面对的问题自然也就变成了「哪些权限需要管理」以及「如何管理」。
点面结合的管理方法
无论在哪种模式下,下面这些权限都值得你仔细审查和管理。
- 电话、短信、通讯录:隐私数据三件套
- 相机、麦克风:偷窥、偷录防范
- 后台运行:保卫你的手机续航
- 剪贴板读写:最近的热门话题
App Ops 提供了 按应用
和 按权限
两种管理视图(你可以在侧栏导航菜单中进行切换),两种视图模式均提供了对应的排序和系统应用筛选工具。
以某 B 应用为例,如果你不想它读取你的联系人信息,害怕它悄悄开启前置摄像头看看现实世界中的你,反感每次进入前台运行时它都会读取一次剪贴板同时往你的剪贴板里塞上一段返利文本,更不希望它在后台不断唤醒消耗电量……
在应用视图下,我们可以通过搜索找到该应用,然后:
- 在权限列表中想要管理的权限条目右侧点击打开管理菜单,选择禁用允许、拒绝或仅在应用使用期间允许。
- 在权限列表左侧的图标上点击触发多选,选择所有想要操作的权限条目,然后通过顶部菜单进行批量授权。
在权限视图下,管理的粒度则跳出了单个应用的范畴,允许我们直接选择对应权限,然后遍历符合条件的应用进行管理。
这种视图对于集中管理需求而言格外方便,比如我需要批量为手机里的国产应用进行严格限制,就只需要在权限视图中找到 在后台运行
,然后定位那些需要进行后台限制的应用并取消勾选即可。
特殊权限特殊对待
而对于相机、麦克风、文件读写这类权限来说,「仅在应用使用期间允许」也是一个非常强力的管理手段,配合严格限制的后台运行策略,理论上来说既能保证应用功能的正常运行,又能防止它们在后台做一些偷鸡摸狗的勾当。
而如果你的运行环境同时满足 Android 10+ 和 Shizuku root 模式启动这两个条件,App Ops 4.0 还为你准备了一个额外福利——剪贴板监视。
开启剪贴板监视功能后,App Ops 会通过 toast 弹窗的样式实时提醒我们剪贴板读写行为;这个比 iOS 14 更加灵活的地方在于,如果你在管理权限的过程中已经禁止了某 B 应用读取你的剪贴板,但实际使用过程中偶尔又确实需要它读取那么一两次,可以在 toast 通知上直接点击「允许 5 秒」来为其短暂放行。
这种机制既方便了单次使用,又杜绝了长期的隐私安全隐患,甚至可以说是一个值得 iOS、Android 系统级功能借鉴的小特性。
用模板减少配置成本
说了这么多,你可能会问:
这么多权限,如果我手机里装了一两百个应用,无论从哪个维度进行管理不都很麻烦吗?
并非所有的应用都需要通过 App Ops 来进行管理。不那么守规矩的应用毕竟是少数,对于那些大家个人感觉比较放心的应用,我们大可以相信 Android 自带的权限管理机制。
另一方面,如果手机里需要借助 App Ops 进行权限管理的应用实在不少,App Ops 也准备了一个方便套用的模板功能可供选择。
比如就「国产『毒瘤』应用不给电话、短信、通讯录权限,仅在运行时允许相机、麦克风,严格限制后台运行和剪贴板读写」这种比较通用、普适的管理理念而言,我们完全可以在模板中实现设定好对应的权限细则,然后再批量选中符合条件的应用直接一键套用模板。
经过一番调校和设置之后,我们也可以将所有改动过的权限设置进行备份、恢复,方便在刷机、换机后快速恢复,减少重复设置流程。
注:但不建议跨系统版本(尤其是大版本)恢复备份,因为不同系统版本的 app ops 数量不同,跨版本恢复可能会导致问题。
另外,模板功能还可以搭配侧栏导航菜单中的「新应用行为」工作,比如直接在应用安装完成后通过 App Ops 的后台监视通知一键恢复备份或套用模板。
小结
在 App Ops 4.0 的侧栏导航菜单中你或许也留意到了,灵活、可控的剪贴板监视功能并非 App Ops 4.0 的唯一亮点——侧栏导航菜单中,一个名为「使用历史记录」也显示正在开发当中(Coming soon)。结合 App Ops 的现有特性和这个功能的名称可以推断,这应该是一个可以提供完整的权限、应用操作调用历史记录的功能。届时,非小米机型也能通过 App Ops 感受到 MIUI 12 那颗「照明弹」的正道之光。
显然,这款已经在 Play 商店上架 4 年的应用,在权限管理这件事情上很多理念和细节其实已经走在了 iOS 14 和 Android 11 之前。
你可以在 Play 商店 或 酷安 免费下载到 App Ops,权限视图、模板、备份恢复等功能需要付费解锁完整版,售价 2.99 美元/21.8 元人民币(支付宝)。
> 下载少数派 客户端 、关注 少数派公众号 ,发现更多实用 App 📱