涉及服务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——普通应用安装简介
网友评论