权限的作用是保护 Android 用户的隐私。Android 应用必须请求权限才能访问敏感用户数据(例如联系人和短信)以及某些系统功能(例如相机和互联网)。系统可能会自动授予权限,也可能会提示用户批准请求,具体取决于访问的功能。

Android 安全架构的设计主旨是:在默认情况下任何应用都没有权限执行会对其他应用、操作系统或用户带来不利影响的任何操作。这包括读取或或写入用户的私有数据(例如联系人或电子邮件)、读取或写入其他应用的文件、执行网络访问、使设备保持唤醒状态等。

Android应用申请的权限在AndroidManifest.xml文件中可以查看

image-20210111222721080

如要访问敏感用户数据(如联系人和短信)或某些系统功能(如相机和互联网访问),则 Android 应用必须请求相关权限。

<uses-permission>

1
2
3
4
<manifest ... >
<uses-permission android:name="android.permission.SEND_SMS"/>
...
</manifest>

指定用户必须授予的系统权限,以便应用正常运行。

从 Android 6.0(API 级别 23)开始,用户可以在运行时同意或拒绝某些应用权限。 但是,无论您的应用支持哪个 Android 版本,您都必须使用清单中的 <uses-permission> 元素声明所有权限请求。 授予应用权限后,该应用便能使用受保护的功能。 否则,该应用在尝试访问这些功能时会失败。

如果您的应用在清单中列出普通权限(即不会给用户隐私或设备操作带来太大风险的权限),系统会自动将这些权限授予应用

如果您的应用在清单中列出危险权限(即可能影响用户隐私或设备正常操作的权限),如上面的 SEND_SMS 权限,必须由用户明确同意授予这些权限。

危险权限的请求提示

如果设备搭载的是 Android 6.0(API 级别 23)或更高版本。当应用请求权限时,用户会看到一个系统对话框,告知用户应用正在尝试访问的权限组。该对话框包括拒绝允许按钮。

img

如果设备搭载的是 Android 5.1.1(API 级别 22)或更低版本,系统将在安装时自动请求用户向应用授予所有危险权限,如果用户点击接受,系统将授予应用请求的所有权限。如果用户拒绝权限请求,系统将取消应用安装

如果应用更新包括额外权限需求,系统会在更新应用之前提示用户接受这些新权限。

img

保护级别

保护级别影响着是否需要运行时权限请求

普通权限

普通权限涵盖以下情况:应用需要访问其沙盒外部的数据或资源,但对用户隐私或其他应用的操作带来的风险很小。例如,设置时区的权限就是普通权限。

如果应用在清单中声明需要普通权限,系统会在安装时自动向应用授予该权限。系统不会提示用户授予普通权限,用户也无法撤消这些权限。

签名权限

系统在安装时授予这些应用权限,但仅会在尝试使用某权限的应用签名证书为定义该权限的同一证书时才会授予。

注意:有些签名权限不适合第三方应用使用。

危险权限

危险权限涵盖以下情况:应用需要的数据或资源涉及用户隐私信息,或者可能对用户存储的数据或其他应用的操作产生影响。例如,能够读取用户的联系人属于危险权限。如果应用声明其需要危险权限,必须由用户向应用明确授予该权限。在用户批准该权限之前,应用无法提供依赖于该权限的功能。

为了使用危险权限,应用必须在运行时提示用户授予权限。

Manifest.permission列表

Android的开发者文档中列举了所有的权限的用途描述和保护级别。

https://developer.android.com/reference/android/Manifest.permission

我将其中的数据爬取并生成了permission_list.yml文件,以便能快速获取相关权限的信息。

image-20210111222444908

https://github.com/luckyfuture0177/AndroidManifest-permission