Apk安装过程

涉及服务PMS(PackageManagerService)

1.将apk复制到data/app目录

2.解析apk信息

首先来认识PackageParser类,它主要用来解析手机上的apk文件(支持Single APK和Multiple APK),主要包含两个过程
APK->Package:解析APK文件为Package对象的过程
Package :代表磁盘上APK文件完整解析后的对象,相当于在内存中Package的对象是对磁盘APK的描述.
Package->PackageInfo:由Package对象生成PackageInfo的过程
PackageInfo:该类代表包的整体描述信息,即AndroidManifest.xml中的信息.如果说Package在内存中代表完整的APK描述,那么PackageInfo则是其子集

SingleApk和Multiple Apk
Single APK是我们通常所开发的APK,即一个应用只有一个apk文件.而Google Play还允许你为一个应用中发布不同的apk文件,这些apk文件适用于不同设备.举例说明,假设你现在开发了一款APP叫做Monkey,但是目前该APP由于体积太大或者其他因素导致不能同时适用于手机和平板,此时你就可将原先的Monkey.apk拆分为了Monkey-Phone.apk和Monkey-Tablet,分别用于运行在Android手机和Android平板,只要保存两者拥有相同的包名,并用相同key进行签名就可以在发布Monkey应用的时候,一同发布Monkey-Phone.apk和Moneky-Tablet.apk,那么这种一个应用拥有多个APK文件的程序就称之为Multiple APK.

输出流
文件路径 -> Package ->PackageInfo

3.dexopt操作

Apk文件其实只是一个归档zip压缩包,而我们编写的代码最终都编译成了.dex文件,但为了提高运行性能,android系统并不会直接执行.dex,而是会在安装过程中执行dexopt操作来优化.dex文件,最终android系统执行的时优化后的'odex'文件(注意:这个odex文件的后缀也是.dex,其路径在data/dalvik-cache)。对于dalvik虚拟机,dexopt就是优化操作,而对于art虚拟机,dexopt执行的则是dex2oat操作,既将.dex文件翻译成oat文件

输出流
dex -> odex(DVK,使用dexopt工作),oat(ART,使用dex2oat工具)

4.更新权限信息

5.完成安装,发送Intent.ACTION_PACKAGE_ADDED广播

参考
https://www.jianshu.com/p/953475cea991
https://juejin.im/entry/589541c3128fe1006ca67b2e
http://liuwangshu.cn/tags/Android%E5%8C%85%E7%AE%A1%E7%90%86%E6%9C%BA%E5%88%B6/
深度探究apk安装过程
APK安装流程详解11——普通应用安装简介

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这两天在看Android65535方法数的解决方法,遇到了些Apk安装过程的疑惑,于是决定好好学习下Android...
    朔野阅读 18,514评论 12 75
  • 当你安装一个APK包时,有没有思考过此时你的手机做了哪些操作呢?做完这些操作后,一个应用就算在手机上安装成功,进而...
    CPPAlien阅读 9,052评论 0 12
  • Android Apk安装过程分析 本文以android 8.0(API Level:26) 源码讲解apk安装过...
    北疆小兵阅读 4,026评论 0 0
  • 威武的汉子 和他前世的情人 嬉笑着 烧水点茶 享受着 古老而浪漫的 天伦之乐 汉子中意陈年普洱 女孩偏爱茉莉青饼 ...
    甘露居士阅读 3,933评论 8 14
  • 《原谅你的父母》 原谅父母是最难的事情之一, 因为他们生了你, 所以你怎么可能原谅他们? 除非你开始爱自己...
    旺旺沫初阅读 2,900评论 0 2