AppBundle 是 Android 应用的一种发布格式,用于替代传统的 APK 文件。它使用 Android App Bundle (.aab) 格式,由 Google 推出,旨在通过**按需分发(on-demand delivery)和动态交付(dynamic delivery)**机制,减小用户下载体积、提升安装效率。
一、什么是 AppBundle?
-
文件扩展名:
.aab -
目标:生成优化后的 APK(由 Google Play 服务器根据用户设备配置生成)
-
优势:
- 减少应用体积(只下载用户设备需要的资源,如语言、CPU 架构、屏幕密度等)
- 支持 Dynamic Feature Modules(动态功能模块)
- 更安全(签名由 Google Play 管理,支持 Play App Signing)
自 2021 年 8 月起,Google Play 要求所有新应用必须使用 App Bundle 发布。
二、如何生成 App Bundle?
1. 使用 Android Studio
- 菜单栏:Build > Generate Signed Bundle / APK
- 选择 Android App Bundle
- 按照向导填写密钥信息即可生成
.aab文件
2. 使用 Gradle 命令行
./gradlew bundleRelease
生成路径通常为:
app/build/outputs/bundle/release/app-release.aab
三、测试 App Bundle
由于 .aab 不能直接安装到设备上,你需要:
方法 1:使用 bundletool
Google 提供的命令行工具,可将 .aab 转换为可安装的 APK。
安装 bundletool
生成 APK 集合
java -jar bundletool.jar build-apks --bundle=<your_app_bundle_path> --output=<output_apks_path> --ks=your-keystore.jks
安装到设备
java -jar bundletool.jar install-apks --apks=<output_apks_path>
方法 2:通过 Firebase App Distribution 或 Internal App Sharing
- 上传
.aab到 Google Play Console 的内部测试轨道 - 或使用 Internal App Sharing 快速分享测试版
四、启用 Dynamic Delivery(可选)
你可以将某些功能拆分为 Dynamic Feature Modules,实现按需下载:
-
创建模块:File > New > New Module > Dynamic Feature Module
-
在主模块中请求安装:
val moduleSplitInstallRequest = SplitInstallRequest.newBuilder() .addModule("my_dynamic_feature") .build() splitInstallManager.startInstallation(moduleSplitInstallRequest)
五、注意事项
- 签名:建议启用 Play App Signing,让 Google 管理你的应用签名密钥
- 兼容性:仅支持通过 Google Play 分发(其他商店可能不支持 .aab)
- 调试:开发阶段仍使用 APK;发布时才构建 .aab
- 大小限制:Google Play 对 App Bundle 的压缩包大小有限制(通常 ≤ 150MB,超限需使用 Play Asset Delivery)
六、常见问题
Q:能直接安装 .aab 吗?
A:不能。必须通过 Google Play 或 bundletool 转成设备专用 APK。
Q:旧项目如何迁移到 App Bundle?
A:只需在 build.gradle 中确保使用较新版本 AGP(Android Gradle Plugin ≥ 3.2),然后按上述方式生成即可,无需代码大改。
Q:第三方应用市场怎么办?
A:部分市场(如华为、小米)已支持 .aab;否则你仍需提供通用 APK(可通过 bundletool 生成 universal.apk):
java -jar bundletool.jar build-apks --bundle=app.aab --output=app.apks --mode=universal
然后解压得到 universal.apk。
App Bundle 的核心优势
1. 体积优化(最主要优势)
- 按需分发资源:只下载设备需要的资源(语言、屏幕密度、ABI 架构等)
- 平均可减少 15-20% 的应用体积
- 示例:西班牙语用户不会下载中文资源
2. 动态功能模块(Dynamic Feature Modules)
- 按需下载功能模块
- 减少初始安装体积
- 提高安装转化率
3. Play Feature Delivery
- 即时功能交付
- 按条件交付功能
- 后置功能安装
何时使用 App Bundle?
- ✅ 强烈推荐:面向全球用户的多语言应用
- ✅ 强烈推荐:功能丰富的大型应用
- ✅ 推荐:资源密集型游戏
- ✅ 推荐:需要 A/B 测试功能的应用
- ⚠️ 谨慎使用:网络条件差的地区用户
- ⚠️ 不适用:非 Google Play 渠道分发