apk安装流程

背景知识

1)PackageManagerService是由SystemServer启动,PMS负责应用的安装,卸载和权限检查等工作

2)/system/app和/data/app目录下的apk文件,PMS启动过程中,都会扫描安装;

apk安装流程

1)拷贝apk到指定的目录:用户安装的apk会拷贝到/data/app下,但是系统apk会放在/system/app, /system/vendor/app以及/system/priv-app下

2)拷贝dex文件:为加快启动速度,将dex文件拷贝到/data/dalvik-cache/目录缓存。art平台会采用AOT(Ahead of Time)技术,将字节码预编译成机器码(dex编程odex),存储空间增加大约20%,安装时间变长

3)创建应用数据目录:创建/data/data/[packageName]目录,用来存放数据库,cache,so动态库。6.0由于支持多用户,/data/user/0/[packageName]是/data/data/[packageName]的软连接。猜想同时会创建/sdcard/Android/data/[packageName]/目录

4)解析AndroidManifest.xml文件:将apk的权限、应用包名、apk的安装位置、版本、userID等信息保存在/data/system/packages.xml文件中,将解析出的四大组件信息注册到PackageManagerServices

出现的问题

1.从安装器打开app存在系统bug

从安装器直接打开应用,当应用退到后台时,点击桌面启动app,并不是回到了之前的页面,而是像第一次打开应用时,比如导航页启动、再到主界面。而当你返回键退出时,又会发现,你又回到了之前Home键退到后台的页面。
原因:通过安装器启动并没有携带category信息
解决方式

if(!this.isTaskRoot()) {
    Intent mainIntent=getIntent();
    String action=mainIntent.getAction();
    if(mainIntent.hasCategory(Intent.CATEGORY_LAUNCHER) && action.equals(Intent.ACTION_MAIN)) {
        finish();
        return;
    }

参考文档

https://blog.csdn.net/mysimplelove/article/details/93619361

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

推荐阅读更多精彩内容