Android系统的特许权限白名单

本文介绍了Android系统中特权应用的概念,特别是特权权限及其在Android 8.0及更高版本中的白名单机制。特权应用需将使用的特许权限加入到对应分区的白名单文件,否则在启动时会遇到权限问题。白名单的添加、日志打印以及如何检查和解决权限问题也进行了阐述。
摘要由CSDN通过智能技术生成

一、什么是特权应用

特权应用(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 路径中也是如此。
Android P后,当设置ro.control_privapp_permissions=enforce时,若特权应用需要的特许权限没有在添加白名单,那么系统会一直卡在开关机动画,无法进入系统。
若需要检测应用是否会影响开机,可将build.prop文件里ro.control_privapp_permissions属性值设为enforce。

2、日志打印

priv-app使用了特许权限,没有加入白名单,会有以下log打印

09
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值