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該工具打開
總結
以上是生活随笔為你收集整理的PMS 包解析源码流程 - 修改定制应用icon的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows11系统正版来了,wind
- 下一篇: 家用双wan口路由器推荐_请推荐双WAN