API 23已将权限保护级别system
重命名为privileged
。它还引入了preinstalled
保护级别。
privileged
是否暗示preinstalled
?换句话说,如果应用程序可以访问privileged
权限(即它是系统应用程序),它是否可以访问preinstalled
权限同样,即使这些权限未列为privileged
(仅preinstalled
)?
答案 0 :(得分:2)
可以预先安装应用但不具备提升的系统权限(例如计算器)。这就是为什么在这两个标志之间存在区别以及为system
弃用privileged
保护级别的原因。
答案 1 :(得分:2)
答案似乎是肯定的,只要privileged
应用程序是系统映像的一部分(即。预安装)。软件包管理器将对其(内部)调用系统应用程序的内容授予preinstalled
权限,请参阅grantSignaturePermission()
:
if (!allowed && (bp.protectionLevel
& PermissionInfo.PROTECTION_FLAG_PREINSTALLED) != 0
&& isSystemApp(pkg)) {
// Any pre-installed system app is allowed to get this permission.
allowed = true;
}
在内部,系统应用实际上是预安装的应用(重构仅限于公共API,而不是源代码中),请参阅ActivityInfo
:
/**
* Value for {@link #flags}: if set, this application is installed in the
* device's system image.
*/
public static final int FLAG_SYSTEM = 1<<0;
// Many lines not shown
public boolean isSystemApp() {
return (flags & ApplicationInfo.FLAG_SYSTEM) != 0;
}