APK安装过程

当你安装一个APK包时,有没有思考过此时你的手机做了哪些操作呢?做完这些操作后,一个应用就算在手机上安装成功,进而这个应用就可以被运行呢?下面我们来一步步的探讨下。

当你点击安装后,首先是APK中的AndroidManifest.xml被解析,解析的内容会被存储到/data/system/packages.xml/data/system/packages.list中。我们打开packages.list和packages.xml,找到Demo应用包名,如下图

packages.list中指名了该应用默认存储的位置/data/data/cn.hadcn.example,packages.xml中包含了该应用申请的权限、签名和代码所在位置等信息,并且两者都有一个userId为10060。之所以每个应用都有一个userId,是因为Android在系统设计上把每个应用当作Linux系统上的一个用户对待,这样就可以利用已有的Linux上用户管理机制来设计Android应用,比如应用目录,应用权限,应用进程管理等。

做完以上操作,就相当于应用在系统注册了,可以被系统识别。接下来就得保存应用的执行文件了,根据packages.xml中指定的codePath,创建一个目录,apk会被命名成base.apk并拷贝到此,其中lib目录用来存放native库。如下图所示

注:目录是由 包名-1 组成,有时候此处是 -2。这是为了升级使用,升级时会新创建一个-1 或 -2的目录,如果升级成功,则删除原目录并更改packages.xml中codePath到新目录

此时应用就可以运行了,但如果每次应用运行还得去base.apk中取dex文件,效率就太低了。为了提升效率,Android系统在应用安装时还会做些优化操作,把所有可运行的dex文件单独提取放在一块并做些优化。在Dalvik模式下,会使用dexopt把base.apk中的dex文件优化为odex,存储在/data/dalvik-cache中,如果是ART模式,则会使用dex2oat优化成oat文件也存储在该目录下,并且文件名一样,但文件大小会大很多,因为ART模式会在安装时把dex优化为机器码,所以在ART模式下的应用运行更快,但apk安装速度相对Dalvik模式下变慢,并且会占用更多的ROM。

优化后的dex文件被载入到虚拟机中就可以运行。

参考

http://stackoverflow.com/questions/12442979/android-understanding-the-apk-installation-process

作者简介 彭涛(@彭涛me) 致力于让技术变得易懂且有趣 个人博客:http://pengtao.me, GitHub地址:https://github.com/CPPAlien

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值