"appop" 和 "development" 保护标志有什么用?

What are the "appop" and "development" protection flags used for?

我正在编写一些测试代码来验证我们的应用程序请求的权限的类型和范围,我注意到最近向 Android 添加了两个新的保护级别。

根据 official Android docs,AndroidManifest.xml 中的 <permission> 元素接受以下四个值之一:

android:protectionLevel=["normal" | "dangerous" | "signature" | "signatureOrSystem"]

但我注意到 PermissionInfo class(参见 here)有总共六个保护级别的标志。好像这两个级别分别是在SDK 16和21中添加的,但是好像没有文档说明:

int PROTECTION_FLAG_DEVELOPMENT = 0x20
int PROTECTION_FLAG_APPOP       = 0x40

我想知道这些保护级别与清单中可以定义的保护级别有何不同,if/when 应该使用它们。

development标志(0x20):

Additional flag from base permission type: this permission can also (optionally) be granted to development applications.

appop标志(0x40):

Additional flag from base permission type: this permission is closely associated with an app op for controlling access.

引用如下:http://developer.android.com/reference/android/R.attr.html

development 权限或类似的东西通常用于需要某些权限以达到 development/debugging 目的但不用于发布目的的情况。例如,假设您正在创建一个新的应用程序。首先,您将应用程序的发布候选版本部署到 select 组 people/testers。您可以使用 development 权限级别来启用可能对初始测试和结果收集有用的功能,例如用于查看测试组位置的 GPS 以及用于存储和通过电子邮件发送日志以供分析的功能 storage/network .一旦您准备好进行一般发布,您就可以删除此权限,因为不再需要收集此类数据,或者更有可能的是,对于更大的人群来说实际上是不可能的(即隐私问题等)。

appop权限而言,我不太确定...

appop 权限只是对 Google 在 Android 4.3 中引入的 App Ops 工具的回忆,此后已被删除。理论上,带有 appop 标志的权限可以由用户在测试期间切换,以验证应用程序在启用或禁用某些软件或硬件功能时的行为方式。

这是 Google 工程师对 App Ops 的真实描述:

For example, it is used now for the per-app notification control, for keeping track of when location was accessed in the new location UI, for some aspects of the new current SMS app control, etc.

完整的 link post:https://plus.google.com/+DannyHolyoake/posts/FkfBxA5i3iG

GRANT_RUNTIME_PERMISSIONS 已授予 shell 申请。它允许 shell 用户在运行时授予开发权限。这是用 pm grantpm revoke 命令。

您可以查看frameworks/base/core/res/AndroidManifest.xml以了解哪些通常只授予签名或系统应用程序的权限可以通过shell授予普通应用程序。