Framework学习:PMS
文章目录
PMS(PackageManagerService)是 Android 系统中负责应用程序包管理的核心服务,负责应用的安装、卸载、更新、权限管理及应用信息查询等功能,是 Android 系统的重要组成部分。
一、PMS 的核心功能
- 应用安装与卸载:解析 APK 文件,将其安装到系统中;卸载时清理相关资源。
- 应用信息管理:维护所有已安装应用的信息,包括包名、版本号、权限、签名等。
- 权限管理:处理应用的权限声明与动态权限请求。
- APK 解析与资源管理:解析 APK 中的
AndroidManifest.xml,提取应用的组件、权限、资源等基本信息。 - 应用更新:支持应用版本更新,确保新版本 APK 正确替换旧版本。
- 多用户支持:在多用户环境下管理应用,确保不同用户的应用数据隔离。
二、PMS 的启动流程
- SystemServer 启动 PMS:Android 系统启动时,SystemServer 会创建 PMS 实例,并注册到 ServiceManager 中。
- PMS 初始化:初始化时扫描系统预装应用和用户已安装应用,构建应用信息数据库。
- APK 扫描与解析:扫描
/system/app、/system/priv-app、/data/app等目录下的 APK 文件,解析其AndroidManifest.xml并生成PackageInfo。 - 权限与签名校验:校验 APK 的签名和权限声明,确保应用安全性。
三、PMS 的关键类与数据结构
- PackageManagerService:PMS 核心类,负责所有包管理相关操作。
- PackageParser:解析 APK 文件,提取
AndroidManifest.xml中的信息。 - PackageInfo:表示应用包信息,包含包名、版本号、权限、组件等。
- ApplicationInfo:表示应用基本信息,包含 UID、GID、数据目录等。
- PackageSetting:表示应用安装设置,包含权限、签名、安装路径等。
- PackageInstaller:提供应用安装、卸载、更新的接口。
四、PMS 的交互流程
应用安装流程
- 用户或系统触发 APK 安装。
- PMS 调用
PackageInstaller进行安装。 - PMS 解析 APK 文件,校验签名和权限。
- PMS 将 APK 文件复制到
/data/app目录。 - PMS 更新应用信息数据库,并通知系统应用已安装。
应用卸载流程
- 用户或系统触发应用卸载。
- PMS 删除 APK 文件和相关数据目录。
- PMS 更新应用信息数据库,并通知系统应用已卸载。
权限管理流程
- 应用在
AndroidManifest.xml中声明权限。 - PMS 解析权限声明并记录。
- 应用运行时请求动态权限,PMS 校验并返回结果。
应用更新流程
- 用户或系统触发应用更新。
- PMS 解析新版本 APK 文件,校验签名和权限。
- PMS 替换旧版本 APK 文件,并更新应用信息数据库。
五、常见问题
- PMS 的作用是什么?
负责应用的安装、卸载、更新、权限管理及应用信息查询。 - PMS 如何解析 APK 文件?
通过PackageParser解析 APK 中的AndroidManifest.xml,提取应用基本信息。 - PMS 如何处理应用安装?
解析 APK 文件,校验签名和权限,将 APK 复制到/data/app目录,更新应用信息数据库。 - PMS 如何处理应用卸载?
删除 APK 文件和相关数据目录,更新应用信息数据库。 - PMS 如何管理应用权限?
解析应用在AndroidManifest.xml中声明的权限,运行时处理动态权限请求。 - PMS 如何支持多用户环境?
为每个用户维护独立的应用数据目录和信息数据库,确保数据隔离。 - PMS 如何处理应用更新?
解析新版本 APK,校验签名和权限,替换旧版本 APK 并更新数据库。 - PMS


5184

被折叠的 条评论
为什么被折叠?



