1.Settings 类:Settings主要用于保存一些信息,实际上它确实是用于管理Android系统运行过程中的一些设置信息
1.成员变量:
1.settings 类初始化时 生成/创建/data/system/ 下的packages.xml , packages-backup.xml 和 packages.list 文件;
2.packages.xml和package-backup.xml为一组,用于描述系统所安装的Package信息,其中packages-backup.xml是package.xml的备份。
pkg的权限状态,codePath,nativeLibraryPath , privateFlags 等;
3.packages-list用于描述系统中存在的所有非系统自带的apk信息及UID大于10000的apk。当这些APK有变化时,PackageManagerService就会更新该文件
【packages-list:com.android.bluetooth 1002 0 /data/user_de/0/com.android.bluetooth platform:targetSdkVersion=27 3002,1023,1015,3003,3001,3007,1002,3010,3011,3005,1016】
4.在Android中每一个应用都有一个UID,两个相同的UID的应用可以运行在同一个进程中,所以为了让两个应用运行在一个进程中,往往会在AndroidManifest.xml文件中设置shareUserId这个属性
=====》 1.Android中每一个应用都有一个UID,uid 相同的2个app可以运行在同一进程
2.运行在同一进程了才可以进行数据交换
5. ShareUserSetting :【记录某一特定UID下所有PKG共有的权限 和 其中单个PKG 不同于其他PKG 自己特有的权限】
1.Settings 的一个成员变量, 是已一个特定的UID为key值创建。
2.ShareUserSetting的成员变量packageSettings 代表单个PKG,记录此PKG的**独有**的权限;
3.ShareUserSetting的成员变量permissionState就记录了 同一个UID下所有PKG 的共有权限;
4.不同的UID 对应不同的ShareUserSetting成员变量
6.SystemConfig :
PKMS创建的SystemConfig负责解析系统的xml配置文件,最终将形成数据结构,在此之后,PKMS取出并保存了SystemConfig中的权限和feature等信息.
PKMS 构造函数中调用mGlobalGids = systemConfig.getGlobalGids(); 获取系统UID 合集,实际上systemConfig.getGlobalGids()函数是读取”etc/permissions/platform.xml“ 来得到uid 合集的。
7.PackageManageService启动的时候会将PackageHandler和ServiceThread进行绑定。ServiceThread其实就是PackageManageService的工作线程,PackageManageService的各种操作都将利用PackageHandler分发到HandlerThread去处理
==============================================PKMS 流程======================================================================
PackageManager在启动时会
1.扫描所有的APK文件和jar包,然后把他们的信息读取出来,保存在内存中(SystemConfig类中),这样系统运行时就能迅速找到各种应用和组件的信息。
2.扫描中如果遇到没有优化过的文件还要进行优化工作(dex格式转换成oat格式(Android 5.0以前是odex)),优化后的文件放在/data/dalvik-cache/下面
初始化:
1.new Settings()对象
增加共享用户组信息;
2.获取默认的设备展示信息
// 创建一个Installer对象,该对象和Native进程installd交互
3.创建PackageHandler()对象
处理安装或者卸载命令
4.创建UserManagerService 对象
解析user相关信息
5.readPermission()
解析/system/etc/permissions/目录下的文件
6.调用Settins.readLPW()
解析/data/system/ 下的4个文件
7.进行dex优化操作
8.调用ScanDirLI扫描文件