Android APP 安装流程
2020-08-20 本文已影响0人
_喝喝酒吹吹风_
安装流程
- 将apk文件复制到data/app目录
- 将APP的dex文件拷贝到/data/dalvik-cache目录,再在/data/data/目录下创建应用程序的数据目录(以应用包名命令),用来存放应用的数据库、xml文件、cache、二进制的so动态库等
- 解析apk的AndroidManifest.xml文件,注册四大组件,将apk的权限、应用包名、apk的安装位置、版本、userID等重要信息保存在/data/system/packages.xml文件中。这些操作都是在PackageManagerService中完成
- dex2oat操作
- 更新权限信息
- 完成安装,发送Intent.ACTION_PACKAGE_ADDED广播
- 桌面显示icon
dexopt/dex2oat 操作在不同版本下的区别
- Dalvik虚拟机-dexopt: 该时机在第一次执行时app时 非安装时(详情见 Android运行流程)
- ART虚拟机-dex2oat:AOT (Ahead-Of-Time) 运行前编译
- Android O(8.0)前,将dex字节码翻译成本地字节码oat(非全量)
- Android O(8.0)开始:开始新增vdex概念,不是为了提升性能,而是为了避免不必要的验证Dex 文件合法性的过程,例如首次安装时进行dex2oat时会校验Dex 文件各个section的合法性,这时候使用的compiler filter 为了照顾安装速度等方面,并没有采用全量编译,当app盘启动后,运行一段时间后,收集了足够多的jit 热点方法信息,Android会在后台重新进行dex2oat, 将热点方法编译成机器代码,这时候就不用再重复做验证Dex文件的过程了
APK安装涉及到的几个常用目录
- system/app : 系统自带的应用程序,获得root权限才能删除。
- data/app : 用户程序安装目录,安装时会把apk文件复制到此目录下。
- data/data : 存放应用程序的数据。
- data/dalvik-cache : 将apk中的dex文件安装到该目录下(dex文件是dalvik或art虚拟机的可执行文件,大小约为原始apk的四分之一)
手机所有的apk 信息存放在哪?
5个位于目录/data/system的文件
- packages.xml:记录了系统中所有安装的应用信息,包括基本信息、签名和权限。
- pakcages-back.xml:packages.xml文件的备份。
- pakcages-stoped.xml:记录系统中被强制停止的运行的应用信息,系统在强制停止某个应用的时候,会将应用的信息记录在该文件中。
- pakcages-stoped-backup.xml:pakcages-stoped.xml文件的备份。
- packages.list:保存普通应用的数据目录和uid等信息。
PacketManagerService
- PackageManagerService是由SystemServer启动,PMS负责应用的安装、卸载、权限检查等工作;
- 在/system/app和/data/app目录下的apk文件,PMS在启动过程中,都会扫描安装;
- 每次开机时,PMS都会在构造函数中对指定目录下的apk进行扫描,没有安装的apk就会触发安装;
参考
- [Android App安装流程] https://www.jianshu.com/p/839711ec545d
- [Android Apk安装过程分析] https://www.jianshu.com/p/953475cea991