APK安装过程

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

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

packages.list

packages.xml

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

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

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

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

dalvik-cache

优化后的dex文件被载入到虚拟机中就能够运行。code

参考cdn

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

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

相关文章
相关标签/搜索