不止是“入住”:从 APK 到 AAB,解构 Android 应用安装的今与昔

267 阅读3分钟

一句话总结:

传统的 APK 安装,是“租客自己搬运全套家具”;而现代的 AAB (App Bundle) 模式,则是“开发商(Google Play)根据你的房型,动态生成并配送最合适的精装家具(Split APKs)”。整个过程由系统“总物业” PackageManagerService 统一管理。


第一篇章:“古典时代”——一个“大而全”的 APK 的旅程

这是我们最熟悉的、也是手动安装 APK 时所经历的流程。你的“租客入住”比喻完美地描绘了这一过程。

  1. 安全检查 (PackageManagerService): 系统“物业总管” PMS 首先介入,对 APK 进行签名校验,确保“租客”身份合法、未被冒名顶替。

  2. 信息解析: PMS 解析 AndroidManifest.xml,了解“租客”的基本信息(包名、版本)和需求(权限列表)。

  3. 分配空间:

    • /data/app/ 下为 APK 本身和优化后的代码创建目录。
    • /data/data/ 下为应用未来的数据(数据库、缓存)创建专属“私人储物间”。
  4. 代码优化 (AOT 编译): 系统的 dex2oat 进程开始工作,将 APK 中的 classes.dex 文件进行预编译 (Ahead-of-Time Compilation) ,生成针对当前设备优化的机器码,存入 oat 目录,这是为了加快 App 的首次启动速度。

  5. 户籍登记: PMS 将应用的完整信息,写入到系统的“户籍总册”——/data/system/packages.xml 文件中。

  6. 广而告之: PMS 发送 ACTION_PACKAGE_ADDED 广播,通知 Launcher 等其他应用:“新邻居来啦!”,Launcher 随即生成桌面图标。

这个流程,至今仍然是理解 App 安装基础的基石。


第二篇章:“现代革命”——AAB 与“动态化精装”时代

对于从 Google Play 等现代应用商店安装的应用,流程发生了根本性的改变。

核心变革:从“交付产品”到“交付蓝图”

  • 旧模式 (APK): 开发者构建一个包含了所有语言、所有屏幕密度、所有 CPU 架构资源的“巨无霸”安装包。
  • 新模式 (AAB): 开发者只构建并上传一个**“蓝图” (App Bundle)**。

Google Play:“云端打包工厂”

当用户点击“安装”时,Google Play 会扮演一个智能工厂的角色:

  1. 读取设备信息: 获知用户的设备是 xxhdpi 屏幕、arm64 架构、语言是“中文”。
  2. 按需打包: 根据“蓝图”(AAB),动态地生成一个只包含 base 模块 + xxhdpi 资源 + arm64 so 库 + 中文 语言资源的**“APK 集合” (Split APKs)**。
  3. 签名与分发: Google Play 使用它的密钥对这个 APK 集合进行签名,并将其下发到用户设备。

结论: AAB 的革命性在于,它将**“打包优化”的责任从“开发者”转移到了“分发平台”**,为每个用户提供了极致精简、量身定制的安装体验。


第三篇章:持续进化的“性能调优”——PGO

安装时的 AOT 编译只是“前菜”。现代 ART 虚拟机还有更智能的“主菜”——PGO (Profile-Guided Optimization)

  • 性能监控: ART 运行时会“默默观察”用户最常使用哪些功能、哪些代码路径被执行得最频繁,并生成一份“性能剖析文件”。
  • 后台深度优化: 当手机处于充电、Wi-Fi 连接且空闲的状态时,系统会启动后台优化任务,根据这份“性能剖析文件”,对那些“热点代码”进行更彻底、更激进的 AOT 编译。

这意味着,你的应用在用户手机上,是“越用越快”的。


四、总结:安装流程的演进

维度“古典时代” (手动安装 APK)“现代时代” (通过 Play Store 安装 AAB)
开发者交付物大而全的通用 APK轻量级的 AAB 蓝图
最终安装物单个 base.apk一组 Split APKs (base + config_xx.apk)
优化责任方开发者 (需手动打多渠道包)Google Play (云端按需生成)
代码优化安装时 AOT安装时 AOT + 运行时 PGO 持续优化
核心管理者PackageManagerService (PMS)PackageManagerService (PMS)

理解从 APK 到 AAB 的演进,以及从 AOT 到 PGO 的深化,才能真正把握现代 Android 应用**“分发即优化”“持续自优化”**的精髓。