PMS 与包管理:Android 的包管理中枢
2026/8/9大约 3 分钟PMS 专题Android 14PMS包管理PackageManager
PMS 是什么:Android 的包管理中枢
系统能否启动某个组件,取决于包是否被扫描、Manifest 是否成功解析、组件是否启用,以及 当前用户是否具有对应状态。PMS 维护的正是这些可查询、可持久化的包与组件事实。
PMS 不只是安装器
| 常见误解 | 正确理解 |
|---|---|
| 包管理只是“装 App” | 包管理覆盖扫描、解析、安装、签名、权限、存储、更新卸载,贯穿应用一生 |
| PackageManager 接口就是 PMS | 接口是应用看到的客户端壳,PMS 是 system_server 里的服务实现 |
| 安装完成就结束了 | 安装只是开始,运行期的权限查询、组件查找、数据目录都依赖 PMS |
核心结论
- 包生命周期主链:开机扫描 → APK 解析 → 安装(含签名/权限校验)→ 运行期查询 → 更新/卸载。
- PMS 维护三张核心账本:已安装包、组件(Activity/Service/Receiver/Provider)、权限。
- 安装流程由 PackageInstaller 承载,最终落点是“扫描 + 写入 packages.xml”。
- 权限管理在 Android 11+ 独立为 PermissionManagerService,PMS 负责统筹。
- 排障入口:
dumpsys package、pm命令、安装错误码与日志。
包生命周期主链
逐步解释:
- 扫描:开机时 PMS 扫描各分区,重建已安装包表。
- 解析:安装或扫描时解析
AndroidManifest.xml,得到组件与权限清单。 - 校验:签名一致性与权限声明决定能否安装、授予什么权限。
- 记录:安装完成写入
packages.xml,之后每次开机直接加载。 - 运行期服务:AMS 启动组件前向 PMS 查询包与组件信息。
- 生命周期:更新、卸载、禁用都会回到 PMS 维护的账本。
常用在哪些地方
按排查频率排列:
- 安装与更新:
pm install、应用商店、PackageInstaller。 - 权限:安装期权限授予、运行时权限弹窗、AppOps。
- 组件查询:
getPackageManager().getLaunchIntentForPackage()、隐式 Intent 解析。 - 数据管理:清除数据、卸载、多用户下的数据隔离。
- 系统预装:
system/priv-app、产品定制包与厂商包。
验证与排障
环境:开发设备或模拟器;以下命令不需要 root。
adb shell pm list packages
adb shell pm path <包名>
adb shell dumpsys package <包名>
adb shell pm install /data/local/tmp/app.apkpm list packages 看已安装包;pm path 看 APK 位置;dumpsys package 看解析后的包信息 与权限;pm install 复现安装问题。排障细节在系列末章展开。
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
PackageManagerService.java | 服务主类 | 包管理中枢 |
PackageManager.java | 客户端接口 | 应用侧查询入口 |
PackageInstallerService.java | 安装会话 | 分阶段安装 |
PermissionManagerService.java | 权限管理 | 权限授予与检查 |
packages.xml | /data/system/ | 持久化包信息 |
公共路径:frameworks/base/services/core/java/com/android/server/pm/ 与 frameworks/base/core/java/android/content/pm/。行号以 r75 检索为准。
开机如何形成这份包表,见 PMS 启动与扫描。