Android 上的权限

应用权限通过保护以下内容的访问来帮助支持用户隐私

  • 受限数据,例如系统状态和用户的联系信息
  • 受限操作,例如连接到配对设备和录制音频

此页面概述了 Android 权限的工作原理,包括使用权限的高级工作流程、不同类型权限的描述以及在应用中使用权限的一些最佳实践。其他页面解释了如何最大程度地减少应用对权限的请求声明权限请求运行时权限以及限制其他应用如何与应用组件交互

要查看 Android 应用权限的完整列表,请访问权限 API 参考页面

要查看一些演示权限工作流程的示例应用,请访问 GitHub 上的Android 权限示例存储库

使用权限的工作流程

如果您的应用提供了可能需要访问受限数据或执行受限操作的功能,请确定您是否可以在无需声明权限的情况下获取信息或执行操作。您可以满足应用中的许多用例,例如拍照、暂停媒体播放和显示相关广告,而无需声明任何权限。

如果您确定您的应用必须访问受限数据或执行受限操作才能满足用例,请声明相应的权限。某些权限(称为安装时权限)在安装应用时会自动授予。其他权限(称为运行时权限)则需要您的应用更进一步,并在运行时请求权限。

图 1 说明了使用应用权限的工作流程

图 1. Android 上使用权限的高级工作流程。

权限类型

Android 将权限分为不同的类型,包括安装时权限、运行时权限和特殊权限。每种权限的类型指示系统授予应用该权限时,应用可以访问的受限数据的范围以及应用可以执行的受限操作的范围。每个权限的保护级别基于其类型,并在 权限 API 参考 页面中显示。

安装时权限

The left image shows a list of an app's install-time permissions. The
    right image shows a pop-up dialog that contains 2 options: allow and deny.
图 2. 应用商店中显示的应用安装时权限列表。

安装时权限允许应用访问受限数据或执行受限操作,这些操作对系统或其他应用的影响最小。当您在应用中声明安装时权限时,应用商店会在用户查看应用详情页面时向用户显示安装时权限通知,如图 2 所示。当用户安装应用时,系统会自动授予应用这些权限。

Android 包含安装时权限的几种子类型,包括普通权限和签名权限。

普通权限

这些权限允许访问超出应用沙箱范围的数据和操作,但对用户隐私和其他应用的操作几乎没有风险。

系统为普通权限分配 normal 保护级别。

签名权限

只有当应用与定义权限的应用或操作系统使用相同的证书签名时,系统才会向应用授予签名权限。

实现特权服务(例如自动填充或 VPN 服务)的应用程序也会使用签名权限。这些应用需要服务绑定签名权限,以便只有系统才能绑定到这些服务。

系统为签名权限分配 signature 保护级别。

运行时权限

A pop-up dialog that contains 2 options: allow and deny.
图 3. 当您的应用请求运行时权限时出现的系统权限提示。

运行时权限,也称为危险权限,允许您的应用额外访问受限数据或执行受限操作,这些操作会对系统和其他应用造成更大的影响。因此,在访问受限数据或执行受限操作之前,您需要在应用中 请求运行时权限。不要假设这些权限已被先前授予——在每次访问之前检查它们,并在需要时请求它们。

当您的应用请求运行时权限时,系统会显示运行时权限提示,如图 3 所示。

许多运行时权限访问私有用户数据,这是一种特殊的受限数据类型,其中包含潜在的敏感信息。私有用户数据的示例包括位置和联系人信息。

麦克风和摄像头可以访问特别敏感的信息。因此,系统会帮助您 解释您的应用为何访问这些信息

系统为运行时权限分配 dangerous 保护级别。

特殊权限

特殊权限对应于特定的应用操作。只有平台和 OEM 可以定义特殊权限。此外,平台和 OEM 通常在想要保护对特定强大操作(例如在其他应用上绘制)的访问时定义特殊权限。

系统设置中的特殊应用访问页面包含一组用户可切换的操作。许多这些操作都是作为特殊权限实现的。

了解有关如何 请求特殊权限 的更多信息。

系统为特殊权限分配 appop 保护级别。

权限组

权限可以属于 权限组。权限组由一组逻辑相关的权限组成。例如,发送和接收短信的权限可能属于同一组,因为它们都与应用与短信的交互有关。

权限组可帮助系统最大程度地减少当应用请求紧密相关的权限时向用户显示的系统对话框的数量。当向用户显示提示以授予应用权限时,属于同一组的权限会在同一界面中显示。但是,权限可能会在未经通知的情况下更改组,因此不要假设特定权限与任何其他权限分组。

最佳实践

应用权限建立在 系统安全功能 的基础上,并帮助 Android 支持以下与用户隐私相关的目标

  • 控制:用户可以控制他们与应用共享的数据。
  • 透明度:用户了解应用使用哪些数据以及应用为何访问这些数据。
  • 数据最小化:应用仅访问和使用用户调用的特定任务或操作所需的数据。

本节介绍了一组在应用中有效使用权限的核心最佳实践。有关如何在 Android 上使用权限的更多详细信息,请访问 应用权限最佳实践 页面。

请求最少的权限

当用户在您的应用中请求特定操作时,您的应用应仅请求完成该操作所需的权限。根据您使用权限的方式,可能存在 替代方法来满足应用的使用场景,而无需依赖于访问敏感信息。

将运行时权限与特定操作关联

尽可能在应用使用案例流程的后期请求权限。例如,如果您的应用允许用户向其他人发送音频消息,请等到用户导航到消息屏幕并按下发送音频消息按钮。在用户按下按钮后,您的应用才能请求访问麦克风。

考虑应用的依赖项

包含库时,您也会继承其权限要求。请注意每个依赖项所需的权限以及这些权限的用途。

保持透明

当您发出权限请求时,请清楚地说明您正在访问的内容、原因以及如果拒绝权限会受到哪些功能影响,以便用户做出明智的决定。

明确系统访问

当您访问敏感数据或硬件(例如相机或麦克风)时,如果系统尚未 提供这些指示器,请在应用中提供持续的指示。此提醒可帮助用户准确了解您的应用何时访问受限数据或执行受限操作。

系统组件中的权限

权限不仅用于请求系统功能。您的应用的系统组件可以限制哪些其他应用可以与您的应用交互,如有关如何 限制与其他应用的交互 的页面所述。