哪些权限可以授予根设备?

简单而简单的问题:

根植设备可以授予应用程序在运行时的额外权限(使用“授予权限”命令使用adb,我记得)。 一个例子就是读取系统日志的能力,这个日志成为以API16开始的非用户许可(链接在这里 )。

有没有这样的权限列表?

Solutions Collecting From Web of "哪些权限可以授予根设备?"

您可能会想到的命令是pm grant PACKAGE PERMISSION ,可以使用adb shell pm grant PACKAGE PERMISSION发送到adb连接的设备。

但是,只有可选的权限才能被授予或撤销。 如果您尝试授予未在应用程序清单中请求的权限,则会得到Operation not allowed: java.lang.SecurityException: Package PACKAGE has not requested permission PERMISSION 。 同样,如果您尝试撤销不被视为可选的权限,您将获得Operation not allowed: java.lang.SecurityException: Can't change PERMISSION. It is required by the application Operation not allowed: java.lang.SecurityException: Can't change PERMISSION. It is required by the application 。 即使是根植设备或仿真器。

现在,就所谓的“可选”以及获得这些许可的列表而言,这是有点不清楚的。 但是,基于一些实验,我相信这些至less包括分配给权限组android.permission-group.DEVELOPMENT_TOOLS权限集合。 您可以使用pm list permissions -g查看正在运行的设备上的哪些设备。 在我的API 19模拟器,以及运行AOSP 4.4.4的Nexus 7中,这些是:

 group:android.permission-group.DEVELOPMENT_TOOLS permission:android.permission.ACCESS_ALL_EXTERNAL_STORAGE permission:android.permission.SIGNAL_PERSISTENT_PROCESSES permission:android.permission.READ_LOGS permission:android.permission.SET_ALWAYS_FINISH permission:android.permission.WRITE_SECURE_SETTINGS permission:android.permission.SET_PROCESS_LIMIT permission:android.permission.CHANGE_CONFIGURATION permission:android.permission.DUMP permission:android.permission.SET_DEBUG_AP 

如果(且仅当)这些在清单中被声明,则可以使用上述命令来授予/撤消它们。 请注意,它们不会在安装时自动授予。 您必须发出pm grant命令。 通过使用“设置”应用程序,我能够观察并确认这一点,并且看到所报告的权限随着我授予和撤销而改变。

可能有其他的权限,像这样的行为,但我还没有find他们。 正常权限像android.permission.INTERNET不能被授予或撤销这种方式。

附录:关于pm set-permission-enforced PERMISSION注释部分每增加一个问题:据我所知,目前唯一支持的权限是android.permission.READ_EXTERNAL_STORAGE 。 我将这个声明放在我阅读源代码的基础上 ,这也符合我使用该命令的经验。 对此权限进行select性强制设置的目的是允许在此处所述的API 19之前和之后的条件下对应用程序进行testing。