跳转到正文
Shane Blog
返回

Android 权限模型简史:从安装时全给到用时才问

Android 权限模型简史:从安装时全给到用时才问

现在装一个安卓 App,通常是打开之后用到某个功能(比如拍照、定位)才会弹出一次权限请求,拒绝了大概率也不影响其它功能继续用。但这套体验并不是安卓一开始就有的,这篇聊聊权限模型这些年是怎么变过来的。

最早:安装时一次性全部列出

早期安卓(大致到 Android 5.x 那个阶段)的权限机制叫”安装时授权(Install-time permissions)“。App 在自己的清单文件(Manifest)里声明好这次运行需要哪些权限,用户在安装界面会看到一份完整的权限列表,只有两个选择:要么接受全部权限、完成安装,要么直接放弃安装。

这套设计最大的问题是权限粒度太粗、时机太早。用户往往在还没开始用这个 App 之前,就要对一堆听起来敏感、但当下完全不知道具体用途的权限做一次性表态,而且一旦同意,后续没法单独收回某一项——想拒绝通讯录权限,唯一的办法是连这个 App 都不装。这种”要么全给、要么不装”的模式,客观上纵容了不少 App 申请远超实际需要的权限。

Android 6.0 引入运行时权限

Android 6.0(Marshmallow)开始,一部分权限被划入”危险权限(Dangerous permissions)“这个分类——大致是那些涉及用户隐私或者可能影响设备正常使用的能力,比如定位、通讯录、摄像头、麦克风、短信这些。这类权限不再于安装时统一授予,而是改成运行时申请:App 代码执行到真正需要用某项能力的那一刻,才会触发系统弹窗,询问用户是否授权,用户可以针对每一项权限单独同意或拒绝。

同样重要的是,这个决定不是一次性的——用户可以随时在系统设置里,针对已安装的 App 单独打开或关闭某一项已经授予过的权限,不需要卸载重装。

不是所有权限都要运行时申请

危险权限之外还有一类叫”普通权限(Normal permissions)“,比如访问网络这种不太涉及用户隐私、风险较低的能力,这类权限依然是安装时自动授予,不会弹窗打断用户。运行时申请这套流程,针对的只是被划入危险权限分类的那部分。

后续几个版本的进一步收紧

运行时权限落地之后,后续版本又陆续加了几层细化:

小结

安卓权限模型的演变方向很一致:从”安装前一次性打包同意、决定了就改不了”,逐渐变成”用到才问、随时可以单独收回、粒度也越来越细”。这个过程本质上是把”这个功能到底需不需要这项权限”的判断权,从开发者一方逐步转移到用户自己手里,也是现在装 App 时体验更细腻、更让人有掌控感的原因。


分类:
标签:
分享此文章:

上一篇
SELinux 是什么,为什么安卓关不掉也绕不开
下一篇
APK 签名验证:换了签名的包为什么装不上去