Android PMS的理解

本文详细介绍了Android系统的Package Manager Service(PMS),包括其作用、启动流程和核心功能,如APK的安装、卸载、优化和查询。通过分析PMS的启动步骤,展示了如何从系统层面管理应用程序,并探讨了pm工具的使用,帮助读者更好地理解和分析PMS的源码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、PMS的作用

Package Manage Service是Android 系统核心服务之一,主要负责各种APK的安装,卸载,优化和查询。 

在这里插入图片描述

二、PMS 启动流程 

简单的将其分为以下几个步骤

  • SystemServer通过PMS的main方法启动PMS
  • PMS构造方法中初始化Settings
  • 扫描各个系统目录下APP相关信息

具体步骤

1.在SystemServer中启动PackageManagerService.main

2.newPackageManagerService()并添加到ServiceManager中

3.newinstaller(建立installer和installd的socket连接,最终在底层实现install,remove,dexopt等功能)

4.通过systemConfig获取到xml文件中信息

5.创建PackageHandler Message Looper(安装/卸载请求)

6.readPLW()(读取data/system/packages.xml)

7.检查/system/etc/permissions/platform.xml中定制的library及/system/framework下的jar档案是否需要dex提取进行优化。若需要优化,会调用installer.dexopt提取dex到/data/dalvik-cache中

8.调用scanDirLI扫描存放apk的各个目录

9.系统应用安装—通过scanPackageLI逐一解析Android

### 关于 Android PMS 的常见面试问题及答案 #### 什么是 PMS? Package Manager Service (PMS) 是 Android 系统中的一个重要服务,负责应用程序包的管理和维护。它在整个应用生命周期中扮演重要角色,包括安装、卸载、更新以及权限管理等功能[^2]。 --- #### PMS 在权限管理中的具体职责是什么? PMS 从应用安装阶段就开始介入权限管理。当安装一个应用时,PMS 会解析 APK 文件中的 `AndroidManifest.xml` 文件,提取其中声明的所有权限信息。这些权限分为两类: - **普通权限**:如访问网络等低风险操作,通常无需用户授权即可授予。 - **危险权限**:如访问相机、读取联系人等高风险操作,需要通过运行时动态申请并获得用户的显式同意。 此外,PMS 还会在运行时验证应用是否具有所需的权限,并记录权限状态的变化[^2]。 --- #### 如何实现动态权限申请? 在 Android 6.0 及以上版本中,对于危险权限,开发者需要在运行时向用户请求权限。以下是实现动态权限申请的核心逻辑: ```java // 请求权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_CODE && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // 权限已授予权限后的处理逻辑 } else { // 用户拒绝权限后的处理逻辑 } } ``` 此过程涉及 PMS 对权限的状态跟踪和最终决策支持。 --- #### PMS 如何影响 App 的安装流程? App 安装过程中,PMS 执行以下主要任务: 1. 解析 APK 文件结构,提取必要的元数据(如包名、签名、权限列表等)。 2. 将应用的相关信息存储至系统的数据库中,便于后续查询和管理。 3. 创建应用的数据目录和其他必要文件夹。 4. 如果存在同名应用,则触发升级或覆盖机制。 这一系列操作确保了应用能够在设备上正常注册和运行。 --- #### PMS 和 AMS 的区别与联系? - **AMS (Activity Manager Service)** 主要负责 Activity 生命周期管理、进程调度和服务控制。 - **PMS (Package Manager Service)** 更专注于应用包的静态信息管理,例如权限分配、组件注册表维护等。 两者协作完成许多复杂功能。例如,在启动某个 Activity 时,AMS 会调用 PMS 获取目标 Activity 的配置信息及其所属的应用程序上下文[^4]。 --- #### 面试技巧提示 针对 PMS 类型的技术问题,建议重点复习以下几个方面: 1. 应用安装/卸载的具体流程。 2. 动态权限申请的工作原理及其实现细节。 3. 危险权限与普通权限的区别及其应用场景。 4. PMS 数据库的设计思路及其内部存储方式。 同时可以结合实际开发经历,展示自己对权限管理的理解程度以及解决相关问题的能力[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值