一, PackageManagerService 构造函数
1.创建 data 目录下面以及文件 (settings 的构造函数), 然后再添加6个 SharedUserSetting
2.开始扫描并且解析 APK
3.实例化 SystemConfig 并获得 mGlobalGids, mSystemPermissions,mAvailableFeatures,mSharedLibraries
a.mGlobalGids : 建立底层 user ids 和 group ids 同上层 permissions 之间的映射; 可以指定一个权限和几个组 id 的对应. 当一个 APK 被授予这个权限时, 它也同时属于这几个组
b.mSystemPermissions: 给一些底层用户分配权限, 如给 shell 授予各种 permission 权限; 把一个权限赋予一个 UID, 当进程使用这个 UID 运行时, 就具备了这个权限
c. mAvailableFeatures : 系统所有支持的个硬件, 如新增硬件支持, 都要添加相应的 feature
d. mSharedLibraries : 系统增加的一些应用需要 link 的扩展 jar 库
4. 在 data 目录下建立多个系统目录, 如 / data/App(用于保存安装的第三方 apk 包), /data/data(用于保存 apk 数据), /data/App-lib, /data/App-asec, /data/user, /data/App-private
5.将权限分配给 package manager
6 . 分别按照优先级扫描解析并安装 / vendor/overlay> /system/framework>/system/priv-App> /system/App> /vendor/App>oemAppDir 下的所有 apk 文件
二, 解析 apk 的流程:
一些重要参数的解读
1.mPackages 是包名和包对象的映射表, mPackages 会保存所有的已安装 apk 信息
来源: http://www.bubuko.com/infodetail-3039623.html