为什么 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 在分发与安装时的行为差异,重点展示动态交付如何减少不必要的资源占用。
生活化类比:自助火锅 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。 |
自测练习题
-
选择题: 如果你的 App 目前支持 3 种语言、2 种 CPU 架构、3 种屏幕密度,使用传统 APK 打包,用户下载的包中包含最多的无效资源占比是多少?(假设用户设备为 armeabi-v7a、xxhdpi、英语)
A. 约 30% B. 约 60% C. 约 90% D. 0%
提示:简化计算,假设每种资源大小近似,语言、CPU、DPI 的分组彼此独立,且用户设备只属于每个维度中的一种。 -
判断题: 使用 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 时间和计算资源,因此首次安装的等待时间可能略有增加。应当根据应用的类型和用户场景权衡。