1、问题背景及现象

背景说明:

软件系统:Android 10
需求处理:SystemUI添加截屏录屏功能
问题现象:添加完修改后无法开机

SystemUI/AndroidManifest.xml 部分修改如下:

     <!-- Screen Recording --><uses-permission android:name="android.permission.FOREGROUND_SERVICE" /><uses-permission android:name="android.permission.RECORD_AUDIO" />
+    <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"/>
+    <uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"/>

由于添加完修改后卡在bootanimaton无法开机,通过分析开机log发现如下打印:

System   :   java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions whitelist: {com.android.systemui:android.permission.CAPTURE_AUDIO_OUTPUT}
System  :   at com.android.server.pm.permissionManagerService.SystemReady(PermissionManagerService.java:2997)
System  :   at com.android.server.pm.permissionManagerService.access$100(PermissionManagerService.java:127)
System  :   at com.android.server.pm.permissionManagerService.$PermissionServiceInternalImpl.systemReady(PermissionManagerService.java:3058)
System  :   at com.android.server.pm.PackageManagerService.SystemReady(PackageManagerService.java:21895)
System  :   at com.android.server.SystemServer.start0therService(SystemServer.java:2066)
System  :   at com.android.server.SystemServer.run(SystemServer.java:518)
System  :   at com.android.server.SystemServer.main(SystemServer.java:355)
...

2、问题分析

从log分析来看,因为SystemUI中的android.permission.CAPTURE_AUDIO_OUTPUT特许权限不在privapp-permissions 白名单中,从而导致了PermissionManagerService在权限检查时抛出java.lang.IllegalStateException异常。
那为什么android.permission.CAPTURE_AUDIO_OUTPUT权限会导致该报出,而android.permission.CAPTURE_VIDEO_OUTPUT不会呢?
原来从Android9.0开始,特权分区/system, /product 和/vendor下的应用就属于特权应用,而SystemUI.apk位于/system/product/priv-app/ 属于特权应用。
从Android8.0 开始,特权应用要使用系统的特许权限,则需要把该特许权限添加至白名单中,那系统有哪些特许权限?如何添加到白名单呢?
系统的特许权限定义在以下路径,并且等级为signature|privileged
frameworks\base\core\res\AndroidManifest.xml

<!-- 系统录音权限 -->
<permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT"android:protectionLevel="signature|privileged" /><!-- 系统录视频权限 -->
<permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT"android:protectionLevel="signature" />

由此可见系统android.permission.CAPTURE_AUDIO_OUTPUT与android.permission.CAPTURE_VIDEO_OUTPUT的protectionLevel是不同的。
android:protectionLevel具体定义位于:
frameworks\base\core\res\res\values\attrs_manifest.xml

<attr name="protectionLevel"><flag name="signature" value="2" /><flag name="privileged" value="0x10" />...
</attr>

系统特许权限白名单源码位于:
frameworks/base/data/etc/ (对应设备路径/product/etc/permissions、/system/etc/permissions、/vendor/etc/permissions)

frameworks/base/data/etc$ ls -al
Android.bp
car
com.android.carrierconfig.xml
com.android.contacts.xml
com.android.dialer.xml
com.android.documentsui.xml
com.android.emergency.xml
com.android.launcher3.xml
com.android.provision.xml
com.android.settings.intelligence.xml
com.android.settings.xml
com.android.storagemanager.xml
com.android.systemui.xml
com.android.timezone.updater.xml
framework-sysconfig.xml
guide-package-whitelist.xml
hiddenapi-package-whitelist.xml
OWNERS
packages_whitelist.txt
platform.xml
privapp-permissions-platform.xml

在privapp-permissions-platform.xml和com.android.systemui.xml中并未声明android.permission.CAPTURE_AUDIO_OUTPUT权限

3、问题解决

通过上述分析我们知道特权应用SystemUI使用特权权限录音android.permission.CAPTURE_AUDIO_OUTPUT,因此需要将该添加至白名单即可,修改如下:
frameworks/base/data/etc/com.android.systemui.xml


或者直接修改设备的配置文件
/product/etc/permissions/com.android.systemui.xml

+ <permission name="android.permission.CAPTURE_AUDIO_OUTPUT"/>

验证顺利开机,SystemUI录屏功能正常。

参考链接:Android系统开发的特权白名单

Signature|privileged permissions not in privapp-permissions whitelist异常处理相关推荐

  1. Android权限警告(Signature|privileged permissions not in privapp-permissions whitelist)

    有2种方法,第一种方法需要全编,第二种方法不需要全编,二种方法各有利弊,结尾处会说明,先说第一种需要全编的方法 1.现象 模块使用了 co.sitic.pp (/system/priv-app/ Sy ...

  2. 系统系统应用权限报错Signature|privileged permissions not in privapp-permissions whitelist的解决

    申请系统权限(如WRITE_MEDIA_STORAGE)需要在编译时将app添加到系统应用的白名单.否则会报错如下: 2022-05-19 21:08:00.342 2303-2303/? E/And ...

  3. Android-进阶教程-权限-安装时权限-签名权限-signature|privileged

    PackageManagerService.java - OpenGrok cross reference for /frameworks/base/services/core/java/com/an ...

  4. LINUX修改权限modify,linux文件权限查看及修改(实用)(View and modify Linux file permissions (practical)).doc...

    linux文件权限查看及修改(实用)(View and modify Linux file permissions (practical)) linux文件权限查看及修改(实用)(View and m ...

  5. Android M App Permissions

     Android M App Permissions Android new app permissions model Android M new app permissions model,其中重 ...

  6. Spark history server 启动报错:History server ui acls disabled; users with admin permissions

    报错原因:hadoop没启动 在启动前,需要先启动 hadoop 和 zookeeper 报错信息: FsHistoryProvider:54 - History server ui acls dis ...

  7. mysql checking_高并发下MySQL出现checking permissions

    在某些数据访问层框架中,会使用show full tables from test like 'demo',来检查数据库的状态.当数据库中表的数量较少时,并没有出现严重的问题.但是当数据库中的表数量多 ...

  8. 安装一个apk引起的无法开机。

    故事的开始 今天老大急冲冲的跑过来说:xx,你帮我看看这手机咋回事,突然开不了机. 我心想:我最近也没提过代码,应该不是我的问题吧.(甩锅.) 把电脑插上手机后,我看到下面这段报错一直在loop 12 ...

  9. Android权限系统(一):开机获取权限信息

    一.SystemConfig的整机权限信息   Android在SystemConfig的构造函数中会通过读取相关的文件来加载整机的权限信息.这些文件是{partition}/etc/permissi ...

最新文章

  1. 小程序canvas的一个坑
  2. Oracle ebs(E-Business Suite) 电子商务套件 简介
  3. ADO.NET的数据库查询2009-12-07 02:20 P.M.ADO.NET的数据库查询
  4. jieba库词频统计_如何用python对《三国演义》、《红楼梦》等名著开展词云分析及字频统计、出场统计等工作。...
  5. c语言中case1 case3 n =1,(n 1)-Step Derivations on n-Groupoids: The Case n = 3
  6. 【数据结构与算法】分离链接法散列表的Java实现
  7. 7-58 是否完全二叉搜索树 (30 分)
  8. 魅蓝2 刷 android,魅蓝2全系列-解锁BootLoader完整版+刷入第三方recovery+刷入第三方ROM教程...
  9. 渗透攻击exp共享站点
  10. ORA-01092解决一例
  11. xp系统启动sql服务器,XP系统,sqlserver服务启动了又自己停止,服务管理器点了启动随后马上就已停止!...
  12. configure: error: Jabber library not found
  13. 2022哈尔滨工程大学软件工程上岸经验贴
  14. 苹果x和xs买哪个好_苹果12哪个颜色销量销售好 iPhone12哪个颜色好看
  15. [渝粤教育] 西南石油大学 普通地质学 参考 资料
  16. tomcatX.exe与startup.bat启动的区别
  17. Linux用账号密码登录redis
  18. 新冠疫情下的化工企业数字化转型
  19. 解决调试时候出现的“Encountered an improper argument”错误
  20. 计算机二级java软件netBean安装(路径错误问题)

热门文章

  1. java 设计一个动物声音“模拟器”
  2. 基于Java+SQLServer2017实现(Web)酒店客房管理系统【100010327】
  3. MYSQLWorkbench看数据库ER图
  4. UEFI开发历程1—edk2开发环境的搭建以及在虚拟机QEMU运行OVMF固件
  5. 我如何在没有学位或参加训练营的情况下找到我的第一份软件开发人员工作
  6. Java之十五 JDBC编程
  7. 图书管理系统——读者管理(查询功能)
  8. input-file 部分手机不能拍照问题
  9. 引起共鸣的句子【转自知乎】
  10. BUUCTF笔记之Web系列部分WriteUp(四)