相关动态
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/ , 查看更多   
最新文章
CDMA智能手机 新款诺基亚6638神秘曝光(图)CDMA手机「CDMA智能手机 新款诺基亚6638神秘曝光(图)」
http://www.sina.com.cn 2005年05月10日13:17 eNet硅谷动力 尽管在GSM世界中可以做到呼风唤雨,但在市场尤其是在美国市场上,诺
947乐讯 | 青年音乐家与隐士大师,开启“一个人的古典”2024秋乐季乐讯手机论坛「947乐讯 | 青年音乐家与隐士大师,开启“一个人的古典”2024秋乐季」
6月中旬,上海大剧院“一个人的古典”2024秋乐季发布,4场音乐会、4位女性演奏家、1位“隐士”大师,演绎跨越世纪的经典杰作。两
1982从小巷子开始
李齐一脸茫然的站在屋内的角落,看着他的老妈在跟他的阿爷阿奶。争的脸红脖子粗,桌子还被拍的啪啪响。他都想不明白,自己只不过
42句诗词,42种感悟,最适合发朋友圈,越读越有味道!
千百诗词,千百模样;千百诗词,千百情感。 总有一句诗,让你读后流连忘返,久久难忘。 也许是“春风得意马蹄疾”的欣喜,也许是
cf活动助手一键领取苹果手机版苹果手机官方网「cf活动助手一键领取苹果手机版」
cf活动助手一键领取苹果手机版是一款非常好用的游戏助手软件!这款软件能够帮助大家领取各种游戏活动奖励,十分的方便!轻轻一点
Android手机互换功能按键位置手机按键「Android手机互换功能按键位置」
绝大多数Android手机底部都配有菜单、主页和返回三个快捷功能键。可惜,鲜有厂商会提供菜单键和返回键位置互换的功能。如果你希
30多块的凯夫拉手机壳能用吗?我觉得还凑合…奇葩手机壳「30多块的凯夫拉手机壳能用吗?我觉得还凑合…」
618入手了台xfold3pro,官方送的手机壳只有一半,还会把前膜蹭下来…偏偏官方又没出壳,只好趁618活动买了一兜第三方试试,这个3
android 虚拟内存是什么 手机虚拟内存是什么android是什么手机「android 虚拟内存是什么 手机虚拟内存是什么」
我们应该知道物理内存(Physical Memory)指的是硬件上的内存,即 RAM。它通常指的是插在主板上的内存条,给进程提供临时数据存
2023年最新票房榜:电影《消失的她》突破23亿,《八角笼中》破2亿
2023年最新票房榜出炉,令人瞩目的电影《消失的她》票房突破23亿,继续领跑市场,成为暑期档的一匹黑马。《八角笼中》也不落下风
相关文章