Android6.0 Framework分析——应用程序APP的安装过程

应用程序的安装是通过包管理服务PackageManagerService完成的,常见的安装方式有以下几种:

① 内置APP随着系统启动PMS而安装。

② 使用adb install命令安装。

③ 通过系统内置的PackageInstaller应用安装。

④ 在一些手机厂商内置的应用商店下载,然后静默安装。

 

分析源码之后,会发现,其实只有两种方式,

一是系统内置应用通过PackageManagerService使用scanDirLi扫描指定目录下的apk安装。

二是第三方apk通过PackageManager直接或者间接的调用PMS的installPackageAsUser接口安装。

 

安装位置有两种:内置存储器和SD卡(Android6.0需要将SD卡转换为内置存储器才行)。

下文将介绍系统应用扫描安装、adb安装到内部存储器、apk安装到SD卡等情况的安装流程。

首先,我们看一下PackageManager的类关系:

PackageManagerService运行在system进程,为使其他进程使用,用到了binder通信,提供PackageManager接口供调用。

然后, 我们看一下系统APP的安装,之前说到系统APP安装是在系统启动PMS的时候,所以我们从SystemServer启动PMS开始看,下面是大概时序图

step2~step10, SystemServer在启动PMS之前,先启动了Installer这个SystemService,Installer新建一个InstallerConnection对象与installd的一个连接,通过socket通信,PMS每次执行安装、dexoat、卸载等操作时,需要调用Installer接口,然后Installer将封装后的命令通过socket发送给installd执行。

step17, 指定目录的路径传递给scanDirLi。

step18, 对目录下的apk文件逐个调用scanPackageLI方法,进行扫描解析。

step19, apk的解析是通过scanPackageLI新建的PackageParser对象完成的。

step20~step26, 主要是对AndroidManifest.xml文件的解析。

step27, 对签名文件的解析。

step28~step41, apk的安装,包含数据目录的创建/data/data/<packagename>,apk的dexopt优化,安装之后将apk的信息记录到packages.xml、packages.list;

 

接下来,简介adb安装apk到内置存储器的过程:

adb安装apk的主要过程如下&#

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值