Android 权限管理系统学习笔记

news/2025/1/8 8:13:46/文章来源:https://www.cnblogs.com/liguo-wang/p/18656625

权限管理系统(PackageManagerService

权限管理系统所做的事情大体可以分为管理声明的权限管理App使用的权限权限的授予/撤销资源使用记录这四类。
权限管理系统大体分为权限控制器App管理类服务类三大模块
  1. 权限控制器App它的“英文名”是PermissionController,它是一个App是一个独立运行的进程,它的主要作用就是权限的授予/撤销。
 
  1. 管理类的作用就是为App提供访问各种服务的能力,访问各种服务是通过binder通信访问的。管理类是属于framework.jar,而framework.jarzygote进程中就已经被预加载了,因此在App被zygote孵化成功后,就已经拥有了各种管理类了,因此每个App都是可以直接使用自己进程内的管理类的。
权限管理系统的管理类主要有PackageManagerPermissionManagerPermissionCheckerManagerAppOpsManager
PackageManager是属于PackageManagerService服务,为啥出现在权限管理系统呢?其主要原因是PackageManagerService与权限管理之间是没有明显的界限划分的,它们是“你中有我,我中有你的”一个互相服务的关系。权限管理系统会使用到PackageManagerService中的一小部分功能。权限控制器App会使用到该类。
PermissionManagerPermissionCheckerManager主要与PermissionManagerService进行交互,而AppOpsManagerAppOpsService进行交互。
管理类的作用就是把访问各种服务的能力封装了起来,这样App就可以直接使用了,比如App想要检查某个权限是否被授予了,就可以使用PermissionCheckerManager进行检查,进而PermissionManagerService会把检查结果返回
  1. 服务类
A. 权限管理服务 (PermissionManagerService)
PermissionManagerService它负责了权限管理系统中大部分的功能,凡是声明权限的管理App使用权限的管理权限的授予/撤销都归该服务负责,当然这里面要排除一点就是不管是App声明权限还是App使用的权限的存储可是不归它负责,而是归PackageManagerService负责
B. AppOpsService就诞生了,它的权限控制是指它结合了App的状态 (如App前后台)来对已经授予的运行时权限再次重新计算,给出一个真正的权限状态,比如某App的录音权限已经授予了,AppOpsService会结合当前App的前后台状态,如果App位于前台则会告知App录音权限真正的被授予,可以开启录音功能;如果App位于后台,则会告知App录音权限被拒绝了,不能开启录音功能。
C. 包管理服务 (PackageManagerService)
PackageManagerService它会为权限管理系统中的权限 (App声明的权限和使用的权限) 提供权限存储的功能。当Android设备重新启动的时候,会把存储的这些信息读取出来。

权限的整个流程

打开app申请:
//先检查某个权限是否授予
if (ContextCompat.checkSelfPermission(this, 权限) != PackageManager.PERMISSION_GRANTED) {//没有授予则调用requestPermissions方法ActivityCompat.requestPermissions(this, 请求权限, REQUEST_PERMISSION_CODE);
}
  1. ActivityCompat.requestPermissions方法来请求权限
  2. 通过ActivityTaskManagerService处理后,PermissionController中的授权Activity被启动。
  3. AppOpsService服务也起到权限访问控制的功能,因此它有必要知道App使用的权限的状态,AppOpsService服务根据包名uid请求的权限权限状态,做一些检查操作,修改相应状态值。并且把修改的值更新到/data/system/appops.xml文件中。
  4. 返回授权结果,在App进程的ActivityonRequestPermissionsResult
权限的授予,涉及到了PermissionControllerPermissionManagerService服务AppOpsService服务,其中PermissionController会负责展示一个权限授予的Activity,当用户选择了允许后,就会通知PermissionManagerService服务AppOpsService服务更新相应权限的状态。权限的拒绝流程和授予也是一样的。
 
 
 

APK的分类:

https://mp.weixin.qq.com/s/Nvgf2fyXH229ZHT9x6F-lQ
系统Apk可以存放于/system、/system_ext、/product、/vendor、/odm、/oem、/apex这几个目录下面的子目录中,而系统Apk的分类又可以按根目录分类也可以按按子目录分类

按根目录分类

系统Apk根据存放的根目录可以划分为vendor Apkproduct ApksystemExt Apksystem Apkodm Apkoem Apk

按子目录分类

系统Apk一般主要存放于各自根目录下的/app、/priv_app、/overlay这三个子目录中,为啥这里用了一般这个词呢,因为对于system根目录来说,它的framework子目录也是可以存放系统Apk的,比如framework-res.apk就存放于此。
存放于/priv-app子目录的系统Apk又被称为privileged Apk (特权Apk),存放于/overlay子目录的系统Apk又被称为overlay Apk,既不是privileged Apk也不是overlay Apk的系统Apk,是存放于/app子目录的。那就来介绍下privileged Apkoverlay Apk

权限的分类

https://mp.weixin.qq.com/s/W8lbkgNA9rsHNvFVeILsSA
 
如上图列出了Android权限的各种类型,大类型上主要分为:
  1. normal权限,该类型权限对用户隐私或系统安全影响较小,因此在Apk安装后就自动授予了该类型的权限。正因如此一个Apk使用该类型的权限,该类型权限的权限状态可是与Android设备的用户没有关系的
  2. dangerous权限,该类型权限是指可能会侵犯用户隐私或设备安全的权限,因此应用在使用这些权限之前必须获得用户的明确授权。一个Apk使用该类型的权限,该类型权限的权限状态可是与Android设备的用户有关系的。该类型权限可以包含的子权限有instantappopruntime
  3. signature权限,该类型权限要不满足权限使用者签名信息与权限声明者签名信息兼容或者一样,要不满足它的子权限符合一定条件,这两个条件中的任意一个条件,即可在Apk安装后就会授予该权限,一个Apk使用该类型的权限,该类型权限的权限状态可是与Android设备的用户没有关系的。可以使用signature权限的Apk分为两类与权限声明者签名信息兼容或者一样的Apk系统Apk,它的子权限有很多。
  4. internal权限,该类型权限是signature权限的子集,只要它的子权限符合一定条件,即可在Apk安装后就会授予该权限。一个Apk使用该类型的权限,该类型权限的权限状态可是与Android设备的用户没有关系的。可以使用该权限的Apk主要是系统Apk,它与signature权限拥有相同的子权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865152.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【安全工具+蜜罐】企业安全建设之蜜罐搭建与使用

一、基本介绍 HFish是一款基于Golang开发的跨平台多功能主动诱导型开源国产蜜罐框架系统,它从内网失陷检测、外网威胁感知、威胁情报生产三个场景出发,为用户提供可独立操作且实用的功能,通过安全、敏捷、可靠的中低交互蜜罐增加用户在失陷感知和威胁情报领域的能力,目前HF…

全局变量(PHP)

引子:从本章开始,正式进入Web开发篇,当然文章所写内容并非如何从零开始成为一名合格的开发者,而是站在安全的角度学开发。再说白点,就是开发者在开发业务系统时,哪处容易出现安全问题就学哪处。本章则从PHP基础之全局变量开始。免责声明:本文章仅用于交流学习,因文章内…

.NET 响应式编程 System.Reactive 系列文章(一):基础概念

在.NET中,响应式编程的核心库是System.Reactive,通常简称为Rx。本篇文章将介绍响应式编程的基础概念以及System.Reactive的核心组件,为后续深入学习奠定基础。.NET 响应式编程 System.Reactive 系列文章(一):基础概念 引言 在现代软件开发中,处理异步事件和数据流已经成…

【神兵利器】绕过EDR防病毒软件

免责声明 仅限用于技术研究和获得正式授权的攻防项目,请使用者遵守《中华人民共和国网络安全法》,切勿用于任何非法活动,若将工具做其他用途,由使用者承担全部法律及连带责任,作者及发布者不承担任何法律连带责任项目介绍 项目演示了使用Windows API函数(例如:VirtualAllo…

RAG项目推荐:bRAG-langchain-构建自己的 RAG 应用程序所需了解的一切

检索增强生成 (RAG) 项目项目链接:https://github.com/bRAGAI/bRAG-langchain/tree/mainbRAGAI 的官方平台即将上线。加入等待列表,成为早期使用者之一! 本仓库包含了对检索增强生成 (RAG) 在各种应用中的全面探索。 每个笔记本都提供了从入门级到高级实现的详细实践指南,包…

五上数学LK情况反馈203班

五上数学LK情况反馈203班 上周五进行了LK,使用答题卡,电子阅卷,答题卡放在中学部,我们只有拿着学生没有写答案的试卷讲评,需要知道具体错误的,由周老师告知学生,今天晚上有半数以上学生,周老师已经告知学生错误题目了,分数已经公布。 本次考试难度较大,带有XB的性质,…

【金融行业】2024中国网络安全产业势能榜优能企业 金融行业典型案例展示

金融行业一直是信息安全的重点领域,随着金融科技的快速发展和数字货币的崛起,金融机构面临着前所未有的挑战。数据泄露、网络攻击等安全事件的频发,促使金融企业加强安全保障。然而,信息安全的提高不仅仅是防止外部威胁的关键,更重要的是确保业务在突发事件或安全事件发生…

Timer、Ticker使用及其注意事项

在 Golang 中,Timer 和 Ticker 是常用的定时器工具,但它们的使用易出错,尤其是初学者。本文将深入探讨定时器的正确使用方式、常见误区,并通过源码解读帮助你更好地理解它们的工作原理。Timer、Ticker使用及其注意事项 在刚开始学习golang语言的时候就听说Timer、Ticker的使…

entire vs whole; coca

entire 868 whole 466left 4WORD 1: ENTIRE WORD W1 W2 AN 15134 932 VIRTUALLY 354 71 Virtually the entire sample几乎所有样本 Virtually the entire Israeli governing class几乎整个以色列统治阶级 DEVOTED 216 71 devoted his entire care…

第22章 高级线程处理

第22章 高级线程处理 22.1 同步概述 多线程我们常需要一些同步结构进行线程间通讯。同步结构可以分为三类:互斥锁一次只允许一个线程执行特定的活动或一段代码。主要目的是令线程访问共享的写状态而不互相影响。互斥锁包括 lock​、Mutex​ 和 SpinLock​。 2. 非互斥锁 实现…

DINO-X环境搭建推理测试

​引子 开放世界检测,前文也写OV-DINO(感兴趣的童鞋,请移步OV-DINO开放词检测环境安装与推理-CSDN博客)。这不,DINO系列又更新了。OK,那就让我们开始吧。 一、模型介绍 IDEA 开发了一个通用物体提示来支持无提示的开放世界检测,从而无需用户提供任何提示即可检测图像中…