Android 某个应用缺少特殊权限导致系统一直重启解决
Android 某个应用缺少特殊权限导致系统一直重启解决
文章目录
一、前言
系统一些应用会使用到特殊权限,这时候要在系统配置一下否则系统会一直重启。
出现该问题的时候,系统一直显示开机Log界面,无法正常进入Android系统界面。
下面一起分析总结一下吧。
本文不仅正文有学习价值,后续的延伸介绍内容也是有学习价值的。
二、错误日志
系统会有如下 AndroidRuntime 日志:
01-02 21:16:05.037 1766 1766 D AndroidRuntime: Shutting down VM
01-02 21:16:05.038 1766 1766 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
01-02 21:16:05.038 1766 1766 E AndroidRuntime: java.lang.IllegalStateException: Signature|privileged permissions not in privapp-permissions allowlist: {com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.MODIFY_QUIET_MODE, com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.INTERACT_ACROSS_USERS, com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND, com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.CHANGE_OVERLAY_PACKAGES, com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.READ_COMPAT_CHANGE_CONFIG, com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.LOG_COMPAT_CHANGE}
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.server.pm.permission.PermissionManagerServiceImpl.onSystemReady(PermissionManagerServiceImpl.java:4410)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.server.pm.permission.PermissionManagerService$PermissionManagerServiceInternalImpl.onSystemReady(PermissionManagerService.java:739)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.server.pm.PackageManagerService.systemReady(PackageManagerService.java:4094)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.server.SystemServer.startOtherServices(SystemServer.java:2720)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:941)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:651)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
01-02 21:16:05.038 1766 1766 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921)
01-02 21:16:06.635 1993 1993 D AndroidRuntime: >>>>>> START com.android.internal.os.ZygoteInit uid 0 <<<<<<
01-02 21:16:06.652 1992 1992 D AndroidRuntime: >>>>>> START com.android.internal.os.ZygoteInit uid 0 <<<<<<
这个日志会一直循环打印,因为异常后,Zygote一直在重启。
三、分析解决
从上面日志找到关键信息:
allowlist: {com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.MODIFY_QUIET_MODE,
com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.INTERACT_ACROSS_USERS,
com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND,
com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.CHANGE_OVERLAY_PACKAGES,
com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.READ_COMPAT_CHANGE_CONFIG,
com.android.documentsui (/system/priv-app/DocumentsUI): android.permission.LOG_COMPAT_CHANGE}
所以只要配置上面几个私有权限,系统就可以正常启动的。
frameworks\base\data\etc\privapp-permissions-platform.xml
在末尾添加权限:
<privapp-permissions package="com.android.documentsui">
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
<permission name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND"/>
<permi ssion name="android.permission.CHANGE_OVERLAY_PACKAGES"/>
<permission name="android.permission.READ_COMPAT_CHANGE_CONFIG"/>
<permission name="android.permission.LOG_COMPAT_CHANGE"/>
</privapp-permissions>
重新编译烧录,系统即可启动。
四、其他
再学点有用的相关知识。
1、对 privapp-permissions 称呼的误解
以前我一直都是叫这些缺少的权限叫私有权限。
但是今天查了一下 "privileged"是“有特权的”意思,所以以前的说法是不对的。
这些权限正确叫法是特殊权限。
以前看“priv-app” 一直以为全称是 “private-application”,
今天才知道正确应该是 privileged-application,简称“系统特殊应用”。
2、系统特殊权限有哪些
太多了,大概有三百多个!具体的可以看 framework\base\core\res\AndroidManifest.xml 的定义
部分私有权限如下:
<permission android:name="android.permission.READ_WIFI_CREDENTIAL"
android:protectionLevel="signature|privileged" />
<permission android:name="android.permission.TETHER_PRIVILEGED"
android:protectionLevel="signature|privileged" />
<permission android:name="android.permission.RECEIVE_WIFI_CREDENTIAL_CHANGE"
android:protectionLevel="signature|privileged" />
<permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"
android:protectionLevel="signature|privileged|knownSigner"
android:knownCerts="@array/wifi_known_signers" />
。。。
从上面的特殊权限定义可以看到,protectionLevel 是包含等级是 privileged,
一般还需要 signature ,就是系统签名应用,所以有特殊权限的应用基本都是系统签名应用,
但是也有个别除外,具体还是要看定义的地方。
2、系统其他权限介绍
framework 定义的所有 权限都是有定义包含 protectionLevel 等级的,主要权限等级有:普通,运行时,系统签名,特殊 。
(1)普通权限(normal)
此类权限允许访问超出应用沙盒的数据和执行超出应用沙盒的操作。但这些数据和操作对用户隐私及对其他应用的操作带来的风险非常小。
比如,上网权限,wifi 状态监听,蓝牙,获取后台任务等待,大概有一百多个。
(2)运行时权限(dangerous)
运行时权限也称为危险权限,此类权限授予应用对受限数据的额外访问权限,并允许应用执行对系统和其他应用具有更严重影响的受限操作。因此需要先在应用中请求运行时权限,然后才能访问受限数据或执行受限操作。当应用请求运行时权限时,系统会显示运行时权限弹窗提示。
比如,文件读写权限,日历读取和设置权限等待,总共不到一百个。
(3)签名权限(signature)
当应用声明了其他应用已定义的签名权限时,如果两个应用使用同一证书进行签名,系统会在安装时向前者授予该权限。否则,系统无法向前者授予该权限。(注意:有些签名权限不适合第三方应用使用。)
该权限只需要在manifest中声明使用,同时应用和这类权限定义者拥有一样的签名系统就会默认授予应用这类权限;系统授予这类权限后应用无需像运行时权限一样动态申请。
比如,Android11 新增的文件管理权限,对wifi,热点,Camera一些特殊操作权限,比较多,大概有五百多个。
(4)特殊权限(privileged)
特殊权限与特定的应用操作相对应。只有平台和原始设备制造商 (OEM) 可以定义特殊权限。此外,如果平台和 OEM 想要防止有人执行功能特别强大的操作(例如通过其他应用绘图),通常会定义特殊权限。系统设置中的特殊应用访问权限页面包含一组用户可切换的操作。其中的许多操作都以特殊权限的形式实现。每项特殊权限都有自己的实现细节。系统会为特殊权限分配“appop”保护级别。
比如本文的: 允许应用程序在所有用户之间进行交互 权限,启动前台服务权限,可通过overlay形式覆盖属性权限,应用主题更改监听等等,大概有三百多个。
特殊权限大部分与系统签名文件同时使用。
也可以看看别人具体的介绍: https://blog.csdn.net/qq_25804863/article/details/123483643
具体某些权限有哪些,可以看看下面的 framework 中的定义,有一些权限是网上没有介绍的,可以看看权限签名的注解也能大概知道含义。
3、系统framework权限文件 AndroidManifest.xml
我们常用的广播都定义在里面,如果要新增可以在里面新增
Android13 中的 framework\base\core\res\AndroidManifest.xml , 具体内容如下:
上面的是 Android13 上比较新的权限定义,有兴趣的可以看看。
在线查看网址:
http://aospxref.com/android-13.0.0_r3/xref/frameworks/base/core/res/AndroidManifest.xml
4、其他查看源码地址:
https://blog.csdn.net/qq_31939617/article/details/131399612
上面介绍了六种方式,试了一下,目前国内能正常使用的只有下面两种:
相关文章:

单例模式为什么使用volatile,以及双重检查&单例模式的一些思考
也就是第一个if(singleton==null),这个是为了代码提高代码执行效率,由于单例模式只要一次创建实例即可,所以当创建了一个实例之后,再次调用getInstance方法就不必要进入同步代码块,不用竞争锁。直接返回前面创建的实例即可。

JVM安全退出(如何优雅的关闭java服务)
为了保障应用重启过程中异步操作的执行,避免强制退出JVM可能产生的各种问题,我们可以采用关闭钩子、自定义信号的方式,主动的通知JVM退出,并在JVM关闭前,执行应用程序的一些扫尾工作,进一步保证应用程序可以安全的退出。

国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟
第三方移动推送对接,刚开始是移动端发起的。在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为什么不能做移动推送?话说,项目里目前所使用的推送就是自己做的。但是在App离线情况下,消息就收不到了。想起来了,这是最最重要的问题,是为了在离线的情况下,App还能收到通知和消息。如果不是因为这个,这个对接可以不做。因为手机端的app层不出穷太多了,为了给手机省电,用户会主动把运行在前端的app给咔嚓掉…虽然咔嚓掉,但是在有信息的情况下,用户还是希望能够收到信息。

DNS轮询解析是什么?
在其最简单的实现中,轮回DNS的工作方式是,不仅用一个潜在的IP地址来响应DNS请求,而且用一个潜在的IP地址列表来响应承载相同服务的几个服务器。传统的负载均衡技术通常需要专门的硬件或软件,但DNS轮询解析是一种负载分配、负载平衡或容错技术,通过管理域名系统(DNS)对来自客户计算机的地址请求的响应,按照适当的统计模型,提供多个冗余的互联网协议服务主机,将流量分散到多个服务器上。因此,虽然轮询DNS是一种简单有效的负载平衡方法,但它也存在一些限制和潜在的问题,需要根据实际情况进行选择和使用。

mysql的varchar长度到底能插多少字符?
需要注意:这点和oracle的varchar2不同,oracle是字节数长度,不是字符长度,一个汉字占2个字节,所以长度6最多只能存3个汉字。varchar(6)表示可以插入6个汉字,或6个字母数字,或汉字和字母数字共6个,是表示插入的字符数,不是字节数。看下Oracle的测试:汉字占用2个字节。

给服务器开通telnet的流程
但一些特殊场景下,比如要升级ssh,ssh不能用时,需要使用telnet,用过要关闭此服务。需要首先安装,如果telnet-server服务在xinetd之前安装了,要先删除telnet-server,再安装xinetd。安装顺序:xinetd--》telnet--》telnet-server。安装顺序:xinetd--》telnet--》telnet-server。2、卸载rpm包(如果已经安装了,又不清楚顺序,可以都卸载后统一安装)注意:telnet-server服务启动依赖xinetd服务,

mysql开启可以使用IP有权限访问
为实际的IP地址和你想要设置的密码。请小心操作,并确保你了解每个命令的作用。如果你对此有任何疑问,最好咨询经验丰富的数据库管理员。来设置或修改用户的密码。相反,你需要分两步来完成这个过程:首先创建或修改用户,并设置密码;然后授予相应的权限。用户应该能够从指定的内网IP地址访问MySQL服务器。用户已存在并且你只是想更改其密码或允许从另一个地址访问,使用。在MySQL 8.0及更高版本中,语句的语法有所变化。替换为你的内网IP地址,

鸿蒙Harmony-页面路由(router)详解
慢慢理解世界,慢慢更新自己,希望你的每一个昨天,今天,和明天都会很快乐,你知道的,先好起来的从来都不是生活,而是你自己

Spring Boot整合日期转换器(Converter)和拦截器(HandlerInterceptor)
配置文件形式针对框架进行个性化定制,例如:拦截器,类型转化器等等。WebMvcConfigurer配置类其实是。内部的一种配置方式,采用。

Docker网络配置&网络模式
网络相关概念,子网掩码、网关、规则的介绍及网络模式bridge、host详解,Dockers自定义网络配置

鸿蒙Harmony-层叠布局(Stack)详解
我们总是为了太多遥不可及的东西去拼命,却忘了人生真正的幸福不过是灯火阑珊处的温暖,柴米油盐的充实,人生无论你赚的钱,是多还是少,经历的事情是好还是坏,都不如过好当下的每一天!

Android Studio点击Run背后发生了什么
当点击Run的时候到底发生了什么呢

怎么选择数据安全交换系统,能够防止内部员工泄露数据?
数据泄露可能给企业带来诸多风险:财产损失、身份盗窃、骚扰和诈骗、经济利益受损、客户信任度下降、法律风险和责任等,《2021年度数据泄漏态势分析报告》中显示,在数据泄露的主体中,内部人员导致的数据泄漏事件占比接近60%。飞驰云联文件安全交换系统,可以满足企业多场景下的文件交换需求,帮助企业终结多工具、 多系统并行使用的局面,减少因文件交换行为分散带来的数据管理不集中、难以管控的问题, 帮助企业内部构建统一、安全的企业数据流转通道。对于不能下载保存的数据,使用截屏、录屏的方式窃取并外泄数据;

服务器网络安全防护措施有哪些?
防火墙是确保服务器安全的必不可少的工具,但是防火墙不仅仅是企业内部部署的防火墙,也有托管安全服务提供商(MSSP)为企业的网络提供托管防火墙服务。例如,大多数系统都支持补丁程序的自动下载和安装,并且越来越多的人工智能产品可以监视、保护和升级企业的系统。任何数据都不应在未加密的服务器上移动。隔离是企业可以拥有的最佳服务器保护类型之一,因为如果一台服务器受到威胁,黑客的攻击行为就会被锁定在该服务器上。完全隔离将需要拥有专用的裸机服务器,这些裸机服务器不与其他服务器共享任何组件,这意味着企业需要增加更多的硬件。

网页爬虫对于网络安全有哪些影响?
在当今信息爆炸的时代,网络已经成为人们获取信息、交流思想和开展业务的重要平台。然而,随着网络的普及和技术的不断发展,网络安全问题也日益凸显,其中网页爬虫对网络安全的影响不容忽视。本文将就网页爬虫对网络安全的影响进行深入分析,并提出相应的应对措施。网页爬虫,也称为网络爬虫或网络机器人,是一种自动化的程序,能够在互联网上抓取、收集和存储网页信息。总之,网页爬虫对网络安全的影响不容忽视,需要各方共同努力,采取有效的措施和策略,共同维护网络空间的安全和稳定。

适用于 Windows 的 10 款顶级 PDF 阅读器评测
您是否正在寻找适用于 Windows 台式机或笔记本电脑的可靠且高效的最佳 PDF 阅读器?然后您就打开了正确的文章。在本文中,我提供了有关互联网上一些免费 PDF 阅读器软件的详细信息。我相信读完这篇文章后,您心中将不再有关于免费 PDF 阅读器软件的疑问。

Android Studio 如何设置允许访问网络资源
在 Android 应用中,有时需要访问网络资源,例如从服务器获取数据或者下载文件等。为了保证应用能够正常访问网络资源,需要在 AndroidManifest.xml 文件中添加网络权限。同时,在 Android 9.0 及以上版本中,还需要在代码中进行额外的配置,以确保应用能够正常访问网络资源。本文将介绍如何在 Android Studio 中设置允许访问网络资源。_在android中添加可以访问网络的权限语句

Flutter配置Android和IOS允许http访问
Android和IOS允许http访问

【网络安全】IP地址定位技术如何识别风险IP
通过结合地理位置、历史记录、流量和行为等多方面的信息进行分析和判断,可以有效地识别出恶意IP地址,为保障网络安全提供有力支持。随着技术的不断发展和完善,我们有理由相信,IP地址定位技术将在未来网络安全领域发挥更加重要的作用。流量和行为分析:通过分析IP地址的流量和行为,可以判断该IP地址是否正常。如果某个IP地址的流量异常或行为异常,例如发送大量的垃圾邮件或进行DDoS攻击,那么该IP地址可能存在风险。IP地址定位技术是一种通过分析IP地址的地理位置、历史记录、流量和行为等信息,来确定其位置的技术。

远程桌面连接Windows实例,提示“为安全考虑,已锁定该用户账户,原因是登录尝试或密码更改尝试过多”错误解决方案
无法使用Workbench和第三方远程连接工具(例如PuTTY、Xshell、SecureCRT等)连接实例时,可以通过VNC远程连接方式登录实例.本文以Windows Server 2019操作系统为例,其他操作系统操作步骤类似。Windows系统的ECS实例系统组策略中配置了用户锁定策略,在登录时输入错误的密码次数过多,该账户会被锁定,导致远程桌面无法登录。具体方法,不同服务商,提供的控制台有所不同,请自行查阅。使用远程桌面连接Windows系统的ECS实例,提示“”错误,具体报错信息如下图所示。

绝地求生电脑版的最低配置要求?
更好的方式是通过官方的渠道购买游戏账号,并遵守游戏的规则和使用协议,以保证自己的游戏体验和账号安全性。但请注意,游戏的配置要求可能随着游戏的更新而有所改变,建议您在购买或升级电脑时,参考官方的配置要求以获得最佳游戏体验。如果您的电脑配备了更高性能的处理器,游戏的运行体验将更为流畅。绝地求生是一款较为复杂的游戏,需要较大的内存来加载游戏资源并确保游戏的流畅运行。所以在安装游戏之前,确保您的电脑有足够的存储空间。这些推荐配置可以使您在绝地求生中获得更高的帧率和更好的画面表现,提供更加顺畅和逼真的游戏体验。

spring 笔记二 spring配置数据源和整合测试功能
• 数据源(连接池)是提高程序性能如出现的• 事先实例化数据源,初始化部分连接资源• 使用连接资源时从数据源中获取• 使用完毕后将连接资源归还给数据源常见的数据源(连接池):DBCP、C3P0、BoneCP、Druid① 导入数据源的坐标和数据库驱动坐标② 创建数据源对象③ 设置数据源的基本连接数据④ 使用数据源获取连接资源和归还连接资源。

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发
如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

如何保护电动汽车充电站免受网络攻击
文章浏览阅读228次。从电动汽车、传感器、充电站和支持基础设施的设计阶段开始就强调安全性作为首要任务。

鸿蒙ArkUI-X跨端应用开发,一套代码构建多平台应用
文章浏览阅读164次。ArkUI是一套构建分布式应用的声明式UI开发框架。它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理,以及实时界面预览等相关能力,帮助您提升应用开发效率,并能在多种设备上实现生动而流畅的用户体验。详情可参考ArkUI框架介绍ArkUI-X进一步将ArkUI扩展到了多个OS平台:目前支持OpenHarmony、HarmonyOS、Android、 iOS,后续会逐步增加更多平台支持。开发者基于一套主代码,就可以构建支持多平台的精美、高性能应用。