PackageManagerService(PMS)的初始化与应用管理 PackageManagerService(PMS)是 Android 系统中负责应用包管理的核心服务,承担应用安装、卸载、信息查询、权限控制等关键功能。其初始化过程耗时较长(需扫描系统中所有应用包),是影响系统启动速度的重要因素之一。

PMS 的初始化在 SystemServer.startBootstrapServices() 中启动,主要流程包括:

  1. 存储与目录准备:初始化应用安装目录(如 /system/app、/vendor/app、/data/app),创建数据存储路径(/data/system/packages.xml 记录应用信息,/data/system/packages.list 记录进程与 UID 映射),并挂载应用分区(确保可读写)。
  2. 包扫描与解析:按优先级扫描系统分区(/system、/vendor)和用户分区(/data)中的 APK 文件,通过 PackageParser 解析 APK 中的 AndroidManifest.xml,提取应用包名、组件(Activity、Service 等)、权限声明、签名信息等关键数据。
  3. 权限与签名校验:验证应用签名(确保未被篡改),比对应用声明的权限与系统允许的权限列表,为应用分配 UID/GID(系统应用固定 UID,用户应用动态分配),并更新 packages.xml 中的权限授予记录。
  4. 服务注册与缓存:将解析后的应用信息缓存至内存(如 mPackages 字典存储包信息,mActivities 存储 Activity 信息),注册到 ServiceManager(服务名为 “package”),并启动 Installer 服务用于后续应用安装操作。

PMS 的核心功能包括:

• 应用安装 / 卸载:通过 installPackage() 解析 APK、验证签名、解压文件至对应目录,并更新包信息;通过 deletePackage() 移除文件、清理数据并注销应用组件。

• 信息查询:提供 getPackageInfo()、getActivityInfo() 等接口,供其他服务(如 AMS、Launcher)查询应用信息,支持桌面图标展示、应用启动等场景。

• 权限管理:控制应用权限的授予与撤销(如动态权限申请时的校验),通过 checkPermission() 接口在应用调用敏感 API 时进行权限检查。 PMS 的初始化效率直接影响系统首次启动时间,因此 Android 引入了包信息缓存机制(如 packages.list 快速加载),并在后续版本中优化扫描逻辑(如增量扫描仅处理新增 APK),减少重复解析开销。