一、什么是特权应用
特权应用(Privileged Application 简称 priv-app)
直观的讲就是位于系统priv-app目录下的应用。
不同Android版本对priv-app定义的分区有所不同
<=Android 8.1的版本,特权分区为/system。
>=Android 9的版本,特权分区为/system, /product和/vendor。
二、Android系统的特许权限
Android系统的特许权限是指在frameworks/base/core/res/AndroidManifest.xml中定义,并且等级为signature|privileged或signatureOrSystem的权限
如:
<permission android:name="android.permission.KEYPHRASE_ENROLLMENT_APPLICATION"
android:protectionLevel="signature|privileged" />
注意:
signatureOrSystem等同于signature|privileged
//frameworks/base/core/java/android/content/pm/PermissionInfo.java
public static int fixProtectionLevel(int level) {
if (level == PROTECTION_SIGNATURE_OR_SYSTEM) {
level = PROTECTION_SIGNATURE | PROTECTION_FLAG_PRIVILEGED;
}
......
return level;
}
三、特许权限白名单
从Android 8.0开始,特权应用如果要使用系统的特许权限,就需要把这个特许权限加入到白名单中。
简单的说就是priv-app有用到frameworks/base/core/res/AndroidManifest.xml里定义的特许权限,就必须要把这个权限加到白名单中。
白名单添加必须遵循:特权应用在个分区,对应的白名单文件就放在哪个分区
即priv-app在vendor分区,白名单文件就必须放在/vendor/etc/permissions/目录
priv-app在system分区,白名单文件就必须放在/system/etc/permissions/目录
priv-app在product分区,白名单文件就必须放在/product/etc/permissions/目录
1、白名单限制宏开关
在启动新设备时,可通过启用过渡日志模式来查找缺少的权限。
ro.control_privapp_permissions=log
违规行为会在日志文件中予以报告。
所有违规行为均必须通过将应用加入白名单来予以解决。如果未加入,这些应用将不会被授予缺少的权限,即使它们位于 priv-app 路