最近整理PackageMangerService相关代码,追到scanDirLI这部分内容,感觉整个流程非常繁琐,这一步又是安卓开机必经的路径,在PackageMangerService的构造函数中会把所有机器安装的app进行扫描(加密模式下普通用户app不被扫描onlyCore模式),其中会检查apk的合法性,扫描apk中的AndoridManifens.xml的一些属性,以及读取apk的asset等,并且记录到mSettings这个数据结构体中,也是开机过程中最耗时的一部分操作,在安卓8.0以前都是单线程扫描,8.0及以后采用多线程模式。所以这部分有必要单独整理,整个过程见如下流程图,部分操作被省略,但是整理的函数跳转以及处理都被记录下来。
流程图的读法:
当流程中间有带参数的代表发生了函数跳转,当这部分函数执行完会有返回的箭头,然后继续执行上次函数内部的内容,关于流程图内有疑问以及错误欢迎及时指出,此流程中部分的解释后续会在图片下做讲解。