AppBundle 学习笔记

50 阅读3分钟

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,实现按需下载:

  1. 创建模块:File > New > New Module > Dynamic Feature Module

  2. 在主模块中请求安装:

    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 渠道分发