PackageManagerService及APK安装流程剖析

PackageManagerService及APK安装流程剖析

 

目录

PackageManagerService及APK安装流程剖析

1 概述

1.1 PMS介绍

1.2 PMS启动

2 APK分析

2.1 Apk包组成

2.2  Apk文件分析

3 PMS安装流程

3.1介绍

3.2 流程分析


 

1 概述

1.1 PMS介绍

PMS是PackageManagerService服务简称,常驻在SystemServer进程内,负责Android系统安装包信息,安装全流程管理。其在SystemServer中被启动,代码如下,是Android系统核心服务之一。

1.2 PMS启动

PMS作为Android系统的核心服务之一,负责的核心功能包括但不限于:包信息管理,包解析,权限管理,多包统一管理,Apk安装全流程管理,其它系统服务交互管理。可见其功能复杂,需要精心的架构设计才能完成其功能。

首先来看下基于Android4.4的PMS静态架构图,帮助我们理解后面的内容:

 

接下来重点来分析下PMS的启动方法,简要来看下其在启动时操作的业务,如下

继续来看它的新建方法,这个方法较长,我们分解来看,主要做了几个事情

  1. 新建mSettings对象,辅助Package管理
  2. 已安装程序扫描分析
  3. 安装包APk路径扫描机安装
  4. 通过mSettings回写系统app现状,创建packages.xml文件。

这里来看下,mSettings的新建

这个对象负责package包的日常管理,是及其重要的,其类为Settings,这里先不展开。

接下来PMS分析已安装APK的现状,如下:‘

这一步主要负责已安装APP现状分析(基于持久化文件),构建内存对象,核心是PMS中的mPackages对象。

PMS新建方法中的第三部是非常核心的,负责APK包的扫描分析,包括系统预装路径下APK及应用目录下的APK,其中还涉及到APK解析及安装,如下

跟踪进入方法scanDirLI方法来看如下:

List目录,并对apk文件执行scanPackageLI方法,继续深入此方法,关注核心点如下:

到此为止调用scanPackageLI方法完成apk解析及信息提取,有兴趣的可以深入进去。通过这步PMS的mPackages方法已经填充完毕,接下来来看PMS构建方法的第四步,更新持久化信息packages.xml。

PMS通过mSettings.writeLPr()达到目标,如下

继续跟踪,如下

可以看到通过fs最终更新packages.xml文件。

至此PMS的初始化方法,完成了Android系统APP包信息的统一,安装,权限收集等,以待其它系统服务的调用。

2 APK分析

2.1 Apk包组成

我们在分析安装流程前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值