1. App Bundle 到底是什么

核心概念定义

Android App Bundle(.aab) 是 Google 在 2018 年 I/O 大会上推出的一种标准化发布格式,用于替代传统的 APK 作为上传至 Google Play 的主要工件。 它包含应用的所有编译代码、资源以及元数据,但不生成最终的可安装 APK——真正的安装包由 Google Play 在分发时根据目标设备的配置(屏幕密度、CPU 架构、语言等)动态生成并签名。

一句话定义:App Bundle 是「原料仓库」,APK 是「定制套餐」;开发者只交付仓库,Google Play 按需烹饪出最适合每台设备的套餐。

诞生背景

2010 年代中后期,Android 应用体积急剧膨胀,导致以下痛点:

  • 用户下载转化率随安装包增大而下降(每增加 10 MB,转化率约降低 1%);
  • 单一 APK 必须包含所有屏幕密度、CPU 架构和语言的资源,大量冗余数据被下载到不需要它们的设备上;
  • 动态功能模块(如按需下载的游戏关卡)缺乏标准化的分发机制。

Google 在 2018 年正式推出 App Bundle,并在 2021 年 8 月要求所有上传至 Google Play 的新应用必须使用 .aab 格式(游戏除外,但强烈推荐)。 这一转变将「构建时打包」推迟到「分发时按需组装」,从根本上解决了冗余分发问题。

与 APK 的本质区别

对比维度 App Bundle(.aab) APK(.apk)
本质 发布格式(不可安装) 安装格式(可直接安装)
扩展名 .aab .apk
能否直接安装到设备 ❌ 否 ✅ 是
内容范围 所有代码 + 所有资源 + 元数据 仅目标设备所需的代码 + 资源
构建者 开发者(通过 Android Studio / Gradle) Google Play(从 .aab 生成)或开发者(直接构建)
体积(典型值) 较大(包含完整资源池) 较小(仅包含按需裁剪的资源)
分发方式 上传至 Google Play 侧载、第三方商店、Google Play

核心目标

  1. 按需分发 —— 让每台设备只下载自己需要的资源,减少安装包体积 20%~50%;
  2. 模块化交付 —— 支持动态功能模块(Dynamic Feature),用户按需加载,不必一次性安装全部功能;
  3. 简化发布流程 —— 开发者只需上传一个 .aab,Google Play 自动生成并签名多个 APK;
  4. 提升转化率 —— 更小的下载体积直接带来更高的安装完成率。

工作流程原理图

下图展示了从开发者构建到用户安装的完整链路:

App Bundle 工作流程 App Bundle 工作流程 🧑‍💻 开发者 构建 .aab App Bundle (.aab 格式) Google Play 接收并处理 拆分 APK 按设备配置 📱 用户设备 安装运行 构建 上传 分发 下载 💡 开发者只需上传 .aab,Google Play 自动为每台设备生成最优 APK。 传统 APK 模式:开发者需要手动构建多个 APK 或使用 Android App Bundle 插件。 ① 开发阶段 ② 发布阶段 ③ 处理阶段 ④ 拆分阶段 ⑤ 安装阶段

生活化类比

🍽️ 餐厅菜单 vs 已做好的菜品

App Bundle 就像一本完整的餐厅菜单,包含所有菜品的名称、原料和做法(所有代码和资源)。 你(开发者)把菜单交给餐厅总厨(Google Play)。 当一位顾客(用户设备)下单时,总厨根据顾客的口味偏好(屏幕密度、CPU 架构、语言)从菜单中选择合适的菜品,现场烹制出正好适合这位顾客的菜肴(拆分 APK)。

而传统 APK 相当于把每道菜都提前做好、打包好,无论顾客是否需要,都得全部端上去——既浪费「食材」又拖慢「上菜速度」。

常见误区

  • ❌ 误区:App Bundle 是一种新的安装格式,可以像 APK 一样直接安装。
    ✅ 真相:.aab 不是安装格式,无法直接安装到设备上;它只是上传到 Google Play 的发布格式。
  • ❌ 误区:使用 App Bundle 后,应用体积一定会变小。
    ✅ 真相:.aab 本身因为包含所有资源,体积反而比单 APK 更大;但最终用户下载的拆分 APK 体积会显著减小(20%~50%)。
  • ❌ 误区:迁移到 App Bundle 需要大量修改代码。
    ✅ 真相:大多数项目只需将 Gradle 构建任务从 assembleRelease 改为 bundleRelease,几乎无需改动代码。
  • ❌ 误区:App Bundle 只适合新项目,老项目无法使用。
    ✅ 真相:已有项目同样可以迁移,Google Play 会自动处理历史版本的兼容性。

自测练习题

  1. 选择题:以下关于 App Bundle 的描述,正确的是?
    A. .aab 文件可以直接安装到 Android 手机上
    B. App Bundle 是一种上传到 Google Play 的发布格式,最终由 Google Play 生成 APK
    C. App Bundle 的体积一定比 APK 小
    D. App Bundle 只包含代码,不包含资源文件

    ✅ 答案:B
  2. 判断题:App Bundle 必须配合 Google Play 才能实现按需分发的能力。( )

    ✅ 答案:✔️ 正确 —— 因为拆分 APK 和按需分发依赖 Google Play 的动态交付基础设施。

应用边界

App Bundle 并非万能方案,在以下场景中需要特别注意:

  • ✅ 推荐使用:所有通过 Google Play 分发的应用(包括新项目和老项目迁移);支持动态功能模块的项目;希望降低安装包体积以提升转化率的团队。
  • ⚠️ 不适用或需谨慎:
    • 侧载 / 第三方商店:.aab 不能直接安装,非 Google Play 渠道仍需使用 APK;
    • 内部测试(非 Google Play):建议使用 APK 或使用 Google Play 内部测试轨道;
    • 大型游戏:Google 不强制要求游戏使用 .aab(但强烈推荐),部分游戏引擎可能需要额外适配;
    • 依赖自定义签名的场景:最终 APK 由 Google Play 签名,开发者无法直接控制签名过程。
  • 构建命令示例:开发者只需在项目根目录执行以下命令即可生成 .aab 文件:
    ./gradlew bundleRelease
    输出文件位于 app/build/outputs/bundle/release/app-release.aab。