相关动态
Android内核解读-应用的安装过程android手机「Android内核解读-应用的安装过程」
2025-01-11 23:02

转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/19578947

我们知道,在android手机上安装一个apk很简单,只要打开apk文件,默认就会弹出安装界面,然后点击确定,经过若干秒后,apk就安装成功了,可是你知道apk的安装过程是什么吗?你知道android系统在安装一个apk的时候都干了什么吗?在本文中,将一一解答这个问题。简单来说,apk的安装过程分两步:第一步,将apk文件复制到程序目录下(/data/app/;第二步,为应用创建数据目录(/data/data/package name/)、提取dex文件到指定目录(/data/dalvik-cache/)、修改系统包管理信息。注意,本文的分析基于Android 4.3源码。

apk的安装从PackageManager的installApk方法开始,由于PackageManager所对应的binder服务为PackageManagerService(PMS,所以,真正的安装过程都在PackageManagerService中完成。PackageManagerService的installApk方法最终调用了installPackageWithVerificationAndEncryption方法,该方法的核心就是在最后发送了一个INIT_COPY的消息,这个消息的含义是完成apk的拷贝过程。

 

通过分析代码可以发现,真正实现apk拷贝的方法是InstallParams的handleStartCopy方法,InstallParams中有重试机制,拷贝如果失败的话会重试,最多重试4次。在拷贝之前,还必须做一件事情,那就是绑定media container service,安装过程中一些状态的检查会用到这个服务,代码如下所示

 

现在分析一下InstallParams的handleStartCopy方法,这个方法很长,代码就不帖出来了,大家可以自己去看看,这里主要分析下它的工作流程

1. 检查安装位置标记位是否有冲突,如果有冲突,则安装失败,这里的有冲突是指“一个apk同时要求被安装到内部存储和sd卡”

2. 调用MCS服务的getMinimalPackageInfo方法来得到apk的推荐安装位置,并检查是否能够进行正常的安装。在这一步,有可能抛出一些无法安装的状态位:存储空间不足、程序已经安装、无效的apk文件等,这个时候安装过程终止

3. 到这一步,表示程序可以正常安装,同时MCS服务服务可能会根据需要调整安装位置,在InstallParams的installLocationPolicy中完成

4. 文件的复制过程,PMS针对内部存储和sd卡分别提供了一个类:FileInstallArgs和AsecInstallArgs,并分别调用二者的copyApk方法来完成apk的复制过程

经过了上面4步,待安装apk已经被复制到了/data/app/目录了。

上面,apk已经被复制到了/data/app/目录,安装的第一步已经完成,那么系统是什么时候对apk进行dex提取和解析的呢,这还要从PMS说起,在PMS内部有一个AppDirObserver类,顾名思义,它的作用是应用目录观察者,它时刻观察着应用目录/data/app/,当目录内部结构改变的时候(创建文件和删除文件)它会做出相应行为,下面看下它的代码

 

下面,我们主要分析一下scanPackageLI方法,还是仅仅分析,不帖代码,因为代码太长了,帖出来没法看了,这个方法不仅仅是完成apk包的扫描,还解析AndroidManifest.xml文件并提取出所有的intent-filter和permission信息,apk安装的主要功能都由它来完成的,当apk包扫描完成后,系统会调用updatePermissionsLPw方法更新系统所具有的权限。

scanPackageLI方法有两个,其第一个参数分别接受File和PackageParser.Package类型,第一个方法会从File中提取出package信息然后再调用第二个方法,下面分析第二个scanPackageLI方法,其完成的事情如下

1. 如果包名是android,则会做一些特殊处理,这个包名为android的应用是系统内部应用的,其他应用的包名如果叫android则安装会有问题,大家可以试一下

2. 解析常见的use-feature、shared-userId、use-library标签并保存到成员变量中

3. 进行签名验证,对应的方法是verifySignaturesLP,验证失败则应用无法安装

4. 创建应用程序目录/data/data/包名,同时将apk中提取出dex文件并保存到/data/dalvik-cache,把apk当做zip解压就能得到dex文件

5. 解析AndroidManifest.xml文件,提取出所需信息,包括具有intent-filter的四大组件信息(Activity、Service、BroadcastReceiver、ContentProvider)和声明的系统权限等

    以上就是本篇文章【Android内核解读-应用的安装过程android手机「Android内核解读-应用的安装过程」】的全部内容了,欢迎阅览 ! 文章地址:http://sjzytwl.xhstdz.com/news/13550.html 
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 物流园资讯移动站 http://sjzytwl.xhstdz.com/mobile/ , 查看更多   
最新文章
苹果手机怎么恢复备份?详细攻略为你整理好了!云备份怎么恢复到手机「苹果手机怎么恢复备份?详细攻略为你整理好了!」
随着智能手机和互联网的普及,手机中存储的个人信息、照片、视频、聊天记录等数据会变得越来越多。一旦手机丢失、损坏或系统出现
李亚鹏正式息影 投资50亿丽江当老板金立手机老板「李亚鹏正式息影 投资50亿丽江当老板」
  华西都市报4月28日讯 昨日,李亚鹏打造的“云南省文化产业试验园”项目北京签约“我每年只选一部戏来拍,这已经严格遵循了10
怎样采用比特币挖矿?手机挖矿「怎样采用比特币挖矿?」
好吧,废话不多说了,其实比特币 - Bitcoin 出现时间已经很久了,不过对于新手来说,还是需要讲解一下的。关于比特币。FORECE 在
定了!苹果 2022 秋季发布会定档,9月8日见iPhone 14 来了?苹果手机发布会「定了!苹果 2022 秋季发布会定档,9月8日见iPhone 14 来了?」
又是九月,丰收的季节,今年的苹果又该熟了.......正如此前传闻那样,今晚苹果正式向外界发送了邀请函,宣布将于当地时间 9月7日
苹果手机微信闪退怎么回事苹果手机闪退是什么原因「苹果手机微信闪退怎么回事」
  品牌型号:iPhone12  系统版本:IOS14  苹果手机如果出现微信闪退的状况,首先我们得寻找原因,接下来小编就带着你们来
ZArchiver手机解压缩工具chm文件手机怎么打开「ZArchiver手机解压缩工具」
ZArchiver是一款功能强大的解压缩工具APP,可用于解压文件或压缩文件,软件支持多种文件格式的压缩和解压缩,包括ZIP、RAR、7Z、
【原】一部手机最长能用几年?主要有三个因素,决定了手机的寿命什么手机寿命最长「【原】一部手机最长能用几年?主要有三个因素,决定了手机的寿命」
一部手机最长能用几年?主要取决于以下这几个重要因素,才能决定手机的使用寿命。在当今社会,智能手机已经成为我们生活中不可或
iQOO 3评测:旗舰机还能在哪提升?这部手机给了答案机械手机「iQOO 3评测:旗舰机还能在哪提升?这部手机给了答案」
  文/晓光 于泽 瑞豪 视频/贾乾 图/苏航  从去年成立至今,iQOO这品牌发布了不到十款产品,并成功在互联网渠道占据了自己的
2013-4-7发布华为模拟器eNSP月度更新版(V2.0)支持全系列AR路由器模拟华为手机模拟器「2013-4-7发布华为模拟器eNSP月度更新版(V2.0)支持全系列AR路由器模拟」
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.ne
ADB驱动源码深度解析,从原理探究到实践应用android手机驱动「ADB驱动源码深度解析,从原理探究到实践应用」
摘要:,,本文深入解析ADB(Android Debug Bridge)驱动源码,从原理到实践全面阐述。文章首先介绍了ADB的基本原理和主要功能,
相关文章