PackageManagerService(PmS)包管理服务运行在SystemServer进程中,是一个安卓系统服务,主要用于实现应用安装卸载,组件查询匹配,权限管理等功能。
主要功能
根据Intent匹配到具体的Activity,Provider,Service,即当应用程序调用startActivity(intent)方法时,能够把Intent转换成一个具体的包含程序名称及Component的信息,以便类加载器加载具体的Component。
权限检查,当应用程序调用某个需要特定权限的接口时,判断调用者是否有该权限
提供安装删除应用程序的接口
实现原理
应用安装时读取应用程序AndroidManifest.xml中的标签比如,request-feature、permission并将其保存在指定目录文件下,PmS在启动时会读取这些xml文件建立起一个包信息树,应用程序可以间接的从信息树种查到所需要的程序包信息。
两个目录
1./data/system/package.xml文件记录系统中所有应用程序包管理相关信息,比如程序包名称是什么,安装包路径在哪里,程序都使用了哪些权限,等等。
2./system/etc/permissions/文件夹下保存的xml文件用于应用程序权限管理。
PmS在启动时会读取这两个文件来构建应用程序包信息树。PmS读取的数据会存在其内部类变量中。
数据结构
PmS的内部类Settings基本上包含了包管理所需要的全部信息,该类主要包含几类变量:
包属性信息,包括packages.xml配置文件,配置文件备份,应用程序列表文件