相关动态
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/ , 查看更多   
最新文章
原来,2000年已经是20年前,看到最后哭了...手机互联网「原来,2000年已经是20年前,看到最后哭了...」
2020年的钟声刚过 欢欣鼓舞迎接着2020年的到来 狂欢之余,恍然间才发现 2010年,已经是10年前了 2000年,竟然是20年前了 那个仿
苹果怎么取消横屏苹果手机自动旋转屏幕设置在哪「苹果怎么取消横屏」
苹果设备以其直观易用的操作系统和丰富的功能深受用户喜爱。然而,在某些情况下,用户可能希望取消横屏模式,以便更好地进行阅读
手机闪退怎么回事手机闪退是什么原因「手机闪退怎么回事」
在日常使用手机的过程中,不少用户都会遇到应用闪退的问题。这不仅影响了使用体验,还可能造成数据丢失或任务中断。那么,手机闪
音响怎么连手机蓝牙音箱怎么连接手机「音响怎么连手机」
在数字音乐日益普及的今天,将手机与音响连接,享受高品质的音乐体验已成为许多人的日常需求。本文将详细介绍手机与音响连接的几
OTTERBOX简介手机壳有异味有毒吗「OTTERBOX简介」
OtterBox的创业过程就和许多新创公司一样:从车库开始,慢慢发展成一家有规模的公司,成就了一个美国创业梦。从防水盒开始,1998
龙湖天钜(闵行龙湖天街) - 上海手机搜狐焦点手机搜狐官网「龙湖天钜(闵行龙湖天街) - 上海手机搜狐焦点」
上海闵行5号线地铁口【龙湖天钜 】 售楼处热线:400-9696-224【官网】(来电尊享优惠活动) 如有问题欢迎来电咨询,来电即可享受
手机连接空调:智能家居的舒适控制指南手机可以测室内温度吗「手机连接空调:智能家居的舒适控制指南」
手机连接空调,轻松掌握舒适环境在这个智能化的时代,智能家居成为了许多家庭的标配,其中也包括通过手机连接空调的功能。想象一
怎样取消手机密码锁屏苹果手机怎么取消锁屏密码「怎样取消手机密码锁屏」
一、如果手机开启了USB调试功能,那么可以用刷机软件(比如刷机精灵、刷机大师、卓大师、甜椒、深度刷机、奇兔刷机)来清除锁屏
手机忘记锁屏密码怎么办?华为 magic2 (TNY-ALOO)手机锁屏密码忘了怎么解开?手机忘记密码如何开机「手机忘记锁屏密码怎么办?华为 magic2 (TNY-ALOO)手机锁屏密码忘了怎么解开
手机忘记锁屏密码怎么办?华为 magic2 (TNY-ALOO)手机锁屏密码忘了怎么解开?如果你忘记了华为手机的锁屏密码,你可以尝试以下几
福禄克iSee TC01A手机热成像仪做温度测量和热成像检测手机测量仪「福禄克iSee TC01A手机热成像仪做温度测量和热成像检测」
TC01APerformance specificationsIR resolution256 x 192Pixel size12 mTemperature range-10 ℃ to 550 ℃Temperature accuracy