为什么 Google Play 推荐 App Bundle:动态交付、按需分发、节省用户存储、减少更新包大小

核心概念定义

Android App Bundle(AAB) 是 Google 官方推广的发布格式,其核心逻辑是将应用的“通用代码”与“设备特定资源”分离。与传统的 APK(Android Package Kit)打包所有资源不同,AAB 只上传一个“母版”到 Google Play,Play 商店根据用户设备的屏幕密度、CPU 架构、语言等特征,生成并分发一个 优化后的 APK 给用户。

Google 推荐使用 App Bundle 的根本原因在于其实现了 按需交付 和 动态交付,从而带来存储节省和更小的更新包。这一机制不是简单的压缩,而是改变了应用的交付模型。

原理图解:APK vs. App Bundle 的资源交付流程

下方 SVG 对比了传统 APK 与 App Bundle 在分发与安装时的行为差异,重点展示动态交付如何减少不必要的资源占用。

传统 APK vs. App Bundle 的分发与安装流程 传统 APK 交付(一次性捆绑) 开发者打包所有资源 用户下载完整 APK 安装后浪费存储 (含无需的 DPI/语言资源) 更新重新下载完整包 更新体积大、无差异 App Bundle 交付(动态按需) 开发者上传 AAB (仅上传一次) Google Play 生成 目标设备专属 APK 按需分发动态模块 (如 AR 特性、On-Demand) 增量更新包极小 (基于基线 APK 的 Patch) 关键差异总结 APK: CPU、语言、屏幕 DPI 资源全部保留 AAB: 只包含用户设备需要的资源,其余按需下载或不下载

生活化类比:自助火锅 vs. 定制套餐

可以将传统的 APK 理解为 自助火锅的自助台:无论你饭量大小,都要为整个台面的所有菜品付钱并占用你的胃容量(存储空间)。而 App Bundle 则是 定制套餐:点餐时服务员根据你的偏好(辣度、忌口、人数)只提供你需要的那几道菜,并且后续加菜(按需分发)可随时单独点,不用重复买整桌。

类比映射:
  • 自助火锅(APK): 一次性包含了所有可能的资源(xhdpi、xxhdpi、zh、en、ar、x86、arm64-v8a),导致 30%–50% 的安装包体积对用户而言是冗余的。
  • 定制套餐(AAB): 服务员(Google Play)只端上你需要的菜品(符合你设备的资源)。如果你后续想加一个甜点(动态功能模块),只需单独下单,而不用重新换一桌菜。

常见误区与关键区别

误区 事实
App Bundle 等于压缩了 APK 不是压缩。AAB 通过“分割+按需组合”减少冗余,而不是单纯压缩。一个 100MB 的 AAB 解包后生成的安装 APK 可能只有 60MB,但压缩率并不是关键。
用了 AAB 后就不用关心资源优化了 仍需要优化。AAB 只负责分发优化,如果你的 AAB 本身包含了超大的无用资源或未配置按需分发,那么最终的 APK 仍会很大。
所有应用都需要动态功能模块 不一定。小型应用或所有用户都需要使用的核心功能(如登录、支付)应放在基础模块中。动态模块适用于可选功能(如高级相机滤镜、AR 导航)。
App Bundle 只能在 Google Play 使用 核心要求是使用 Google Play 的安装时交付。但你可以通过 bundletool 构建自定义 APK 集以用于其他分发渠道。不过非 Play 商店分发通常直接使用 APK。

自测练习题

  1. 选择题: 如果你的 App 目前支持 3 种语言、2 种 CPU 架构、3 种屏幕密度,使用传统 APK 打包,用户下载的包中包含最多的无效资源占比是多少?(假设用户设备为 armeabi-v7a、xxhdpi、英语)
    A. 约 30% B. 约 60% C. 约 90% D. 0%
    提示:简化计算,假设每种资源大小近似,语言、CPU、DPI 的分组彼此独立,且用户设备只属于每个维度中的一种。
  2. 判断题: 使用 App Bundle 发布后,当用户更新应用时,Google Play 会重新下载完整 APK 并覆盖安装,更新包体积与首次安装相同。( )
    思考:App Bundle 是否会影响更新机制?增量更新如何工作?

实际应用边界

App Bundle 并不是万能的。以下场景需要额外考虑:

  • 非 Google Play 渠道: 如果你需要发布到 Amazon Appstore、华为应用市场、三星应用商店等,这些渠道不支持 AAB。此时仍需要生成通用 APK 或使用该渠道的专有格式。
  • 需要精确控制安装包结构的应用: 例如某些安全工具或系统级应用,需要手动管理 APK 内部的资源布局。AAB 的构建和安装过程由 Play 商店控制。
  • 依赖 Google Play 服务: App Bundle 的动态交付依赖于 Google Play Core 库和 Google Play 商店的运行时能力。如果设备没有安装 Play 商店或 Play Core 版本过旧,按需分发将无法正常工作。
  • 离线环境或企业内部分发: 企业内部应用通常通过 MDM 或内部服务器分发,这类环境很少使用 AAB。此时应使用 bundletool 生成通用 APK 进行分发给所有设备。
关键提示:AAB 的核心收益在“存储”和“更新”维度,而不是“首次安装速度”。生成专属 APK 需要 Google Play 的 CDN 时间和计算资源,因此首次安装的等待时间可能略有增加。应当根据应用的类型和用户场景权衡。