https://blog.csdn.net/english2888/article/details/79361529
程序包管理包含三个部分内容:
提供一个能够根据intent匹配到具体的Activity、Provider、Service。
进行权限检查。即当应用程序调用某个需要一定权限的函数时,系统判断调用者是否具备该权限
提供安装、删除应用程序的接口
一、包管理概述:
该框架分为三层,分别为程序应用层、Pms服务层及数据文件层
程序应用层
调用ContextImpl类的getPackageManager()函数返回一个 ApplicationPackageManager对象,
它继承自PackageManager抽象类,参数传入Pms,Apm类调用各种pms的类方法。
Pms服务层
第一个目录是“/system/etc/permissions”
第二个目录是“/data/system/packages.xml"
数据文件层
程序文件,所有系统程序保存在/system/app下
framework库文件,这些文件保存在/system/framework目录下
应用程序使用的数据文件。分别为sharepreference存储、数据库存储和文件存储,
前两种文件一般会保存在/data/data/xxx/目录下,xxx代表程序包名,
文件存储可以保存在内置存储或者外置存储的任意位置。
二、包管理服务的启动过程
当SystemServer进程启动时,其初始化函数中会启动各种具体的服务进程,包括Ams、Wms和Pms等,Pms服务是从静态函数中创建的
pms初始化时会遍历程序目录下的全部程序,并从其包含的AndroidManifest.xml文件中提取出所有的intent-filter数据,
并将其保存到以上的四个变量中
三、PMS主体启动流程
创建一个Settings对象,在该对象的构造函数时,给成员变量赋值
四、应用程序的安装和卸载
安装及卸载程序操作都是由Pms完成,安装程序的过程包括在程序目录下创建以包名称命名的程序文件、创建程序数据目录,
以及把程序信息保存到相关的配置文件packages.xml中,卸载过程是相反的操作。
程序包管理PMS
最新推荐文章于 2023-11-22 00:19:18 发布