0%

(08)2021.12.26-PKMS Android11.0 源码阅读---Derry老师

大厂面试,我们主要是 AMS ,这个要理解透。

PKMS 是啥? PackageManagerService。这里要区分 PMS (PowerManagerService)

Launcher查询PKMS 就能得到所有的安装应用。PKMS 的主要职责:

  • 解析 AndroidManifest.xml 文件,解析清单文件中的所有节点信息
  • 扫描 apk 文件,安装系统应用,本地应用等
  • 管理本地应用:包括安装、卸载、应用信息查询

细节点:为什么大家看源码不使用 AS ,主要是因为使用 AS 看源码有很多文件是被阉割过的,比如你想找 PKMS 中 Binder 通信用到的 aidl 文件,是找不到的,必须要下载完整源码(10个多G),AS 上的源码是找不到的。

Android 三大命脉——AMS、BInder、Handler

现在的桌面一般都是 Launcher3 。面试题:桌面上的应用是怎么展示的?

Launcher3 是系统应用,在 packages/app/Launcher3.apk 路径下跨进程通信向 PKMS 请求获得

手机开机很慢,大概什么问题?

开机过程service 启动总共有7部曲:

startBootstrapService中做的事情:

  • 启动 installer 服务
  • 获取设备是否加密
  • 调用 PKMS.main 实例化 PKMS (启动 30s ,将近有20s都在这里)
  • 设备的加密操作

startOtherService中做的事情:

  • dex 优化操作
  • 磁盘优化维护操作
  • PKMS准备就绪

上面总共 7 个步骤,7个步骤中PKMS 的构造函数很耗时,dex 优化很耗时,要着重关注。

ROM 开发代码改动很少的,可能看代码2周,改了1行代码。编译都要1晚上,所以我们一般不能用调试的方法去发现问题,需要认真看日志,会看日志,正确打印日志。

为什么PKMS源码?

ROM定制开发

Launcher 开发

PKMS 扫描所有的系统应用,接着扫描用户应用,将这些安装信息保存在内存中,PKMS 就会保存这些安装的应用。

Android 安装APK 的原理?

  • 第一步:Copy apk
  • 第二步:扫描指定目录的 apk

    所以,每次系统启动,都会扫描所有应用,安装的应用越多,启动越慢

MainActivity 跳转 SecondActivity (在 AndroidManifest.xml 中指定了 Launchmode了),请问,是在哪里解析这个 launchMode 的?

答:在 PKMS 扫描APp 的时候,就已经解析出来了

为什么手机开机后,我能收到开机广播?

因为开机时,PKMS 构造函数中已经扫描了所有 APK清单文件了,(静态广播)已经注册了

新应用安装时间很长,是为什么?

安装完成后需要 App 扫描,还有更耗时的 APK 优化

谢谢你的鼓励