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

9

简短明了的问题:

已经root(越狱)的设备可以在运行时授予应用程序额外的权限(使用adb命令中的“授权权限”,如我所记得的那样)。其中一个例子是能够读取系统日志,这成为从API16开始的非用户权限(链接在此处)。

是否有这些权限的列表?

1个回答

15
您可能想到的命令是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。即使对于已root的设备或模拟器也是如此。

现在,关于什么被视为“可选”的内容,以及获取此类权限列表,这还不太清楚。但是,根据一些实验,我认为这包括至少分配给权限组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命令。我通过使用设置应用程序并查看报告的权限更改来观察和确认这一点。
可能还有其他行为类似的权限,但我没有找到它们。像android.permission.INTERNET这样的普通权限不能以这种方式授予或撤销。
补充说明:关于评论部分中的pm set-permission-enforced PERMISSION的额外问题:据我所知,目前唯一支持此功能的权限是android.permission.READ_EXTERNAL_STORAGE。我基于我的阅读源代码,也与我使用该命令的经验一致。选择强制执行此权限的目的是允许根据此处描述的API 19之前和之后的条件测试应用程序。

有趣。在命令的输出中,我应该寻找什么? - android developer
谢谢。看起来阻止权限是不允许的。"set-permission-enforced" 用于什么(在这里找到:http://developer.android.com/tools/help/adb.html#pm)? - android developer
这听起来很奇怪。"READ_EXTERNAL_STORAGE"没有被执行,所以对我来说,在API 19之前它似乎完全没有用处...不管怎样,谢谢。 - android developer
2
只有带有“开发”标志的权限可以被授予,这包括 android.permission-group.DEVELOPMENT_TOOLS 组中的所有权限,除了最有用的一个:android.permission.ACCESS_ALL_EXTERNAL_STORAGE。 - ballzak
有没有Java / Kotlin代码片段可以用来列出所有只能通过root / adb授予的权限?此外,似乎在Q上按组列出所有权限不起作用,因为它不显示“DEVELOPMENT_TOOLS”组,缺少您提到的某些权限,并且它不将许多权限放入其正确的组中:https://issuetracker.google.com/issues/138239135。这是使用adb或框架... - android developer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接