android系统 pms详解

在 Android 系统中,PMS(PackageManagerService) 是负责应用程序包管理的核心服务。它负责应用的安装、卸载、更新、权限管理以及应用信息的查询等功能。PMS 是 Android 系统的重要组成部分,也是面试中常被问到的知识点。

以下是关于 PMS 的详解与面试常见问题的整理:


一、PMS 的核心功能

  1. 应用安装与卸载
    PMS 负责解析 APK 文件,将其安装到系统中,并在卸载时清理相关资源。

  2. 应用信息管理
    PMS 维护所有已安装应用的信息,包括包名、版本号、权限、签名等。

  3. 权限管理
    PMS 负责应用的权限声明与动态权限请求的处理。

  4. APK 解析与资源管理
    PMS 解析 APK 文件中的 AndroidManifest.xml,提取应用的基本信息(如组件、权限、资源等)。

  5. 应用更新
    PMS 支持应用的版本更新,确保新版本 APK 正确替换旧版本。

  6. 多用户支持
    PMS 支持多用户环境下的应用管理,确保不同用户之间的应用数据隔离。


二、PMS 的启动流程

  1. SystemServer 启动 PMS
    Android 系统启动时,SystemServer 会创建 PMS 实例,并注册到 ServiceManager 中。

  2. PMS 初始化
    PMS 初始化时会扫描系统预装应用和用户已安装应用,构建应用信息数据库。

  3. APK 扫描与解析
    PMS 扫描 /system/app/system/priv-app/data/app 等目录下的 APK 文件,解析其 AndroidManifest.xml 并生成 PackageInfo

  4. 权限与签名校验
    PMS 校验 APK 的签名和权限声明,确保应用的安全性。


三、PMS 的关键类与数据结构

  1. PackageManagerService
    PMS 的核心类,负责所有与包管理相关的操作。

  2. PackageParser
    负责解析 APK 文件,提取 AndroidManifest.xml 中的信息。

  3. PackageInfo
    表示一个应用包的信息,包括包名、版本号、权限、组件等。

  4. ApplicationInfo
    表示一个应用的基本信息,包括 UID、GID、数据目录等。

  5. PackageSetting
    表示一个应用的安装设置,包括权限、签名、安装路径等。

  6. PackageInstaller
    提供应用安装、卸载、更新的接口。


四、PMS 的交互流程

  1. 应用安装流程

    • 用户或系统触发 APK 安装。

    • PMS 调用 PackageInstaller 进行安装。

    • PMS 解析 APK 文件,校验签名和权限。

    • PMS 将 APK 文件复制到 /data/app 目录。

    • PMS 更新应用信息数据库,并通知系统应用已安装。

  2. 应用卸载流程

    • 用户或系统触发应用卸载。

    • PMS 删除 APK 文件和相关数据目录。

    • PMS 更新应用信息数据库,并通知系统应用已卸载。

  3. 权限管理流程

    • 应用在 AndroidManifest.xml 中声明权限。

    • PMS 解析权限声明并记录。

    • 应用运行时请求动态权限,PMS 校验并返回结果。

  4. 应用更新流程

    • 用户或系统触发应用更新。

    • PMS 解析新版本 APK 文件,校验签名和权限。

    • PMS 替换旧版本 APK 文件,并更新应用信息数据库。


五、PMS 面试常见问题

  1. PMS 的作用是什么?
    PMS 负责应用的安装、卸载、更新、权限管理以及应用信息的查询。

  2. PMS 如何解析 APK 文件?
    通过 PackageParser 解析 APK 文件中的 AndroidManifest.xml,提取应用的基本信息。

  3. PMS 如何处理应用安装?
    PMS 解析 APK 文件,校验签名和权限,将 APK 文件复制到 /data/app 目录,并更新应用信息数据库。

  4. PMS 如何处理应用卸载?
    PMS 删除 APK 文件和相关数据目录,并更新应用信息数据库。

  5. PMS 如何管理应用权限?
    PMS 解析应用在 AndroidManifest.xml 中声明的权限,并在运行时处理动态权限请求。

  6. PMS 如何支持多用户环境?
    PMS 为每个用户维护独立的应用数据目录和应用信息数据库,确保数据隔离。

  7. PMS 如何处理应用更新?
    PMS 解析新版本 APK 文件,校验签名和权限,替换旧版本 APK 文件,并更新应用信息数据库。

  8. PMS 如何校验 APK 的签名?
    PMS 使用 PackageParser 解析 APK 文件的签名信息,并与系统中记录的签名进行比对。

  9. PMS 如何处理系统预装应用?
    PMS 在初始化时扫描 /system/app 和 /system/priv-app 目录,解析并安装系统预装应用。

  10. PMS 如何优化应用安装性能?
    通过多线程解析 APK 文件、缓存应用信息、延迟资源加载等方式优化性能。


六、PMS 相关源码路径

  • PMS 核心类frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java

  • PackageParserframeworks/base/core/java/android/content/pm/PackageParser.java

  • PackageInfoframeworks/base/core/java/android/content/pm/PackageInfo.java

  • ApplicationInfoframeworks/base/core/java/android/content/pm/ApplicationInfo.java

  • PackageInstallerframeworks/base/core/java/android/content/pm/PackageInstaller.java


七、总结

PMS 是 Android 系统的核心服务之一,掌握其工作原理对于理解 Android 应用的安装、卸载、权限管理等机制至关重要。在面试中,除了理论知识,面试官可能会结合实际场景(如 APK 安装失败、权限管理问题)考察候选人的深度理解能力。建议结合 AOSP 源码深入学习 PMS 的实现细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值