目录

  • 一、什么是特权应用
  • 二、Android系统的特许权限
  • 三、特许权限白名单
    • 1、白名单限制宏开关
    • 2、日志打印
    • 3、添加白名单

一、什么是特权应用

特权应用(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.javapublic 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-04 11:10:41.320   927   927 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
09-04 11:10:41.320   927   927 E AndroidRuntime: java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions whitelist: {*****: android.permission.READ_NETWORK_USAGE_HISTORY, *****: android.permission.CLEAR_APP_CACHE, *****: android.permission.ACCESS_NETWORK_CONDITIONS, *****: android.permission.WRITE_SECURE_SETTINGS, *****: android.permission.DELETE_CACHE_FILES, *****: android.permission.BLUETOOTH_PRIVILEGED, *****: android.permission.MANAGE_USERS, *****: android.permission.READ_LOGS}
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.pm.permission.PermissionManagerService.systemReady(PermissionManagerService.java:3091)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.pm.permission.PermissionManagerService.access$100(PermissionManagerService.java:125)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.pm.permission.PermissionManagerService$PermissionManagerServiceInternalImpl.systemReady(PermissionManagerService.java:3152)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.pm.PackageManagerService.systemReady(PackageManagerService.java:22423)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.SystemServer.startOtherServices(SystemServer.java:2066)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.SystemServer.run(SystemServer.java:543)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.server.SystemServer.main(SystemServer.java:372)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
09-04 11:10:41.320   927   927 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:960)

3、添加白名单

一般会把白名单添加到/frameworks/base/data/etc/privapp-permissions-platform.xml文件中

     <privapp-permissions package="com.android.cellbroadcastreceiver"><permission name="android.permission.INTERACT_ACROSS_USERS"/><permission name="android.permission.MANAGE_USERS"/><permission name="android.permission.MODIFY_PHONE_STATE"/><permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/><permission name="android.permission.RECEIVE_EMERGENCY_BROADCAST"/></privapp-permissions>

Android系统的特许权限白名单相关推荐

  1. android 添加安装权限白名单

    点击打开链接 有些项目不允许所有APK都拥有安装权限,例如apk只能通过应用商城来安装或者升级,只允许某些特定的apk自升级,不允许pm install等.这就需要添加安装权限白名单来控制. 1.pa ...

  2. Android系统system用户权限和root权限的获取

    在Android系统中,系统为每一个应用程序(apk)创建了一个用户和组.这个用户和组都是受限用户,不能访问系统的数据,只能访问自己的文件和目录,当然它也不能访问其他应用程序的数据.这样设计可以尽可能 ...

  3. Android系统-应用权限白名单

    Google对于这个需求已经在官网有了说明:跳转 大概总结如下: 1.应用需要申请名为特权应用,特权应用是 priv-app 目录下的系统应用 如何申请特权应用: Android.bp certifi ...

  4. Android 7.0修改PMS逻辑添加权限白名单

    今天有任务安排需要实现给任何一个应用在不动态申请权限的情况下,实现权限赋予,大体知道应用权限的赋予逻辑是在PMS中,于是大概研究了下,最终的手段就是在install安装时,就把应用程序AndroidM ...

  5. Android之doze机制的白名单

    Doze中的白名单 预备知识: Doze机制是Google为了提升设备续航时间设计的一套方案,设备处在idle下,通过限制非白名单应用的网络.job执行时间.调整alarm触发时间.禁止wifi扫描. ...

  6. Android开发让用户开白名单,Android 添加白名单实现保活

    Android 白名单保活 最近有遇到保活的需求,一开始想到的就是之前的黑科技保活比如像素Activity,播放无声MP3,双进程等方法,但是随着Android系统的更新,这些非常规的方法或多或少都已 ...

  7. android 11.0app应用卸载白名单

    1.概述 在11.0定制化开发中,客户需求要实现应用卸载白名单功能,用来管理第三方app卸载功能,需要在白名单之中的应用可以卸载,其他的app不准卸载,实现一个管理第三方app卸载的功能,这需要从ap ...

  8. Android 10.0进程加入白名单,避免被杀掉

    1.概述 在10.0的系统产品开发中,对于产品开发中,对于一些重要进程,是不想被系统在低内存的情况下,杀掉进程, 所以需要把进程加入白名单,在系统杀进程的时候,不去杀掉进程 2.进程加入白名单,避免被 ...

  9. Android O 的Doze模式白名单路径

    Doze 模式列表 上述备注规则如下 if(powerWhitelist.isSysWhitelisted(pkg)) {// Summary of app which doesn't have a ...

最新文章

  1. 拔最多的鹅毛,听最少的鹅叫
  2. win10仿linux桌面,仿Windows 10 的Linux图标主题及GTK 3.x
  3. u盘魔术师装linux,使用U盘魔术师安装Win7系统教程
  4. 深度学习中常用的激活函数详解及对比分析(sigmoid)
  5. yy直播没声音html,驱动技巧:解决YY语音中麦克风无声或者有噪音的问题
  6. java用thinkpadx1_还用老的办公本? 处理文件速度怎够用
  7. Weblogic 错误 BEA-000403 BEA-000438解决办法
  8. matplotlib 子图超过4个_Matplotlib从入门到精通
  9. 2011(信息学奥赛一本通-T1234)
  10. selenium python文档_selenium+python实现百度文库word文档抓取
  11. 果粉们要的才不是事后歉意
  12. 《 剑指offer》 目录索引
  13. wordpress好用的插件-wordpress插件自动采集伪原创发布插件免费
  14. 封装SIP和SOIC有什么区别
  15. 2019年 武汉理工大学计算机考研经验分享
  16. 淘宝母婴购物数据分析
  17. Ubuntu16.04 解决外置USB蓝牙模块链接蓝牙耳机没有声音输出问题
  18. 网络空间地图测绘的战略意义(下)
  19. SAP 采购订单入库——收货业务分析
  20. MATLAB删除图例中的多余线条

热门文章

  1. Three.js--》实现3d水晶小熊模型搭建
  2. 蓝桥杯——单片机学习(6——蜂鸣器)
  3. LiDar 激光雷达
  4. popwindow的基本使用
  5. 权限管理03-security登陆后鉴权
  6. 查看当前用户的全部系统变量linux,Linux环境变量编程
  7. 如何查看mysql数据库各个表数据占用空间大小?
  8. 解决浏览器会自动填充密码的问题
  9. 五子棋小游戏(JS+Node+Websocket)可分房间对战
  10. 6、用户加入房间、离开房间提示