预安装和特权保护级别之间的区别

时间:2015-11-02 15:58:37

标签: android android-permissions android-6.0-marshmallow

API 23已将权限保护级别system重命名为privileged。它还引入了preinstalled保护级别。

privileged是否暗示preinstalled?换句话说,如果应用程序可以访问privileged权限(它是系统应用程序),它是否可以访问preinstalled权限同样,即使这些权限未列为privileged(仅preinstalled)?

2 个答案:

答案 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;
}