PMS 包解析源码流程 - 修改定制应用icon

PMS构造方法中任务阶段性trace Tag

BOOT_PROGRESS_PMS_START

BOOT_PROGRESS_PMS_SYSTEM_SCAN_START

BOOT_PROGRESS_PMS_DATA_SCAN_START

BOOT_PROGRESS_PMS_SCAN_END

BOOT_PROGRESS_PMS_READY

PMS主要工作:包解析、签名校验、应用安装卸载,如下时序图仅为包解析流程

 首次开机完整流程为未提及cache的路径,非首次开机,则会涉及到ParsedPackage的cache流程,即当应用被解析完成后会存储很多配置文件,例如package.xml,package_list等,其中包解析的内容会被存贮在data/system/package_cache/目录下,当机器重启后,此类配置文件信息会在PMS构造方法中preparePackageParserCache中构建cache对象。当cache对象存在后,包解析ParsingPackageUtils中的方法就不会再执行,直接从cache文件中构建出parsedPackage包。这也是为啥reboot会比首次开机快一些的一个原因。

  经上述流程,故icon替换就可以在parseBaseApplication方法中去做出来,当前包为定制icon应用时,则将其icon替换,这里要注意,有时我们获取可能从acitivityInfo信息中获取icon,所以ParsedActivityUtils.parseActivityOrReceiver中也需要做icon替换。当前项目高通di5 laucnher调用中相册、智慧充电就存在该情况

   

在包解析处做修改优点:

即此时修改应用icon后,不论其他应用如何调用,都能保证获取到的即为定制后的icon,否则
    1.  在APPlicationPackageManager接口处做修改,则需要保证应用必须调用此接口,且代码替换代码会重复走很多遍。

 2.在PackageInfoWithoutStateUtils中调用generateApplicationInfoUnchecked或generateAcitivtyInfoUnchecked生成ApplicationInfo或ActivityInfo的时候修改,这里比起APMS未限制应用的接口调用,但是依旧走很多遍。

   在包解析处修改的缺点:

当应用icon是根据某个属性值取不同icon图片时,则会出现修改persist属性值重启后,样式修改未生效,原因即为上述情况说到的cache,重启后,cache不为空,解析流程会直接返回不会重新走一次包解析,此时可以考虑执行恢复出厂设置,但是要注意看恢复出厂设置,是否有去清data/system/package_cache目录,若未做清除,则也是不会生效。如果这里需要做改动,可以考虑修改bootable/recovery/recovery.cpp将此目录在恢复出厂设置的时候清掉。

   在此处修改的缺点:

当应用icon是根据某个属性值取不同icon图片时,则会出现修改persist属性值重启后,样式修改未生效,原因即为上述情况说到的cache,重启后,cache不为空,解析流程会直接返回不会重新走一次包解析,此时可以考虑执行恢复出厂设置,但是要注意看恢复出厂设置,是否有去清data/system/package_cache目录,若未做清除,则也是不会生效。如果这里需要做改动,可以考虑修改bootable/recovery/recovery.cpp将此目录在恢复出厂设置的时候清掉。
https://download.csdn.net/download/kanghongxia_021/85405257https://download.csdn.net/download/kanghongxia_021/85405257

  原图,可用https://www.diagrams.net/,draw.io该工具打开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值