android10的PKMS很low的简单研究

2021-12-27  本文已影响0人  nich

写的超级省超级烂

PKMS简介

pkms叫packageManageserver,主要功能是1.解析AndroidNanifest.xml清单文件,解析清单文件中的所有节点信息2.扫描.apk文件,安装系统应用,安装本地应用等3.管理本地应用,主要有, 安装,卸载,应用信息查询 等

简单启动流程

android手机开机解析init.rc进入init方法启动zygote,然后调用通过fork出进程启动system.run方法启动systemserver方法,然后启动startBootstrapServices();引导服务startCoreServices();核心服务startOtherServices();其他服务,pkms主要先看startBootstrapServices和startOtherServices服务

初始化流程

主要看pkms构造函数:

mSettings =new Settings();//创建 Settings 对象,其内部创建了 packages.xml、packages-backup.xml、 packages.list 等文件,用于存储应用信息

添加SharedUserSetting对象到mSettings中

mSettings.readLPw(sUserManager.getUsers(false))//从packages.xml文件中解析出信息(如果该文件存在),并保存到 Settings相应的字段中

scanDirLI//扫描指定文件目录下的Apk包,解析其内部的Manifest.xml文件,将值赋值给PMS和Settings、Package中;主要包括androidManifest.xml里面activity,application广播啥乱七八糟东西

// 这里扫描用户应用:mAppInstallDir = "/data/app" 

scanDirLI(mAppInstallDir, 0, scanFlags | SCAN_REQUIRE_KNOWN, 0); 

// 这里扫描用户应用:mDrmAppPrivateInstallDir = "/data/app-private" 

scanDirLI(mDrmAppPrivateInstallDir, PackageParser.PARSE_FORWARD_LOCK, scanFlags | SCAN_REQUIRE_KNOWN, 0);一堆代码,最后mSettings.writeLPr(); 重新记录一下

然后启动startotherservices执行performdexoptupdate完成的dex优化(耗时)然后完成磁盘维护performfstrimifneed()然后调用pkms.systemready()准备就绪

androidapp简单安装流程

主要看PackageInstallerActivity类

installingasynctask-》commit然后binder丢给pkms通过handlermessage(INIT_COPUY)-〉执行startcopy

startcopy就是把apk copy到data/app/包名下面,apk中的dex文件安装在data/dalvik-cache下面

上一篇 下一篇

猜你喜欢

热点阅读