Play Core 库介绍:依赖配置、版本选择,以及与 Android App Bundle 的关系

做动态交付,绕不开 Play Core 库。说白了,它就是 Google Play 提供的一把钥匙,让你的 App Bundle 中的动态功能模块能在运行时按需下载、安装。没有它,SplitInstall 就是个空话。

我做第一个接入动态交付的项目时,第一步就是配置这个库。但版本号选错了,运行时报错,查半天才发现是 Play Core 和 AGP 版本不兼容。所以别小看这一步,我来把关键点掰开揉碎。

1. 依赖配置:加一行代码就能跑起来

Play Core 库的依赖非常简单,你只需要在模块的 build.gradle 中加上一行。不过要注意:从 2021 年开始,Google 把原来的 play-core 拆成了几个独立的库。如果你的应用只做按需下载模块,用 feature-delivery 就够了。

dependencies {
    // 如果你用的是较新的 Play Core 全家桶(含更新、审查等)
    implementation "com.google.android.play:app-update:2.1.0"
    implementation "com.google.android.play:review:2.0.1"
    // 动态交付专用(推荐)
    implementation "com.google.android.play:feature-delivery:2.1.0"
}

我个人习惯用 feature-delivery,因为它只包含按需模块的 API,包体更小。但如果你用了旧版 play-core,也可以继续用 com.google.android.play:core:1.10.3(最后一个 1.x 版本)。

注意:如果你同时使用了 play-core 和 feature-delivery,会产生冲突。选择其一即可。我曾经不小心两个都加了,编译时直接报重复类错误。

2. 版本选择:别乱追新,要看兼容性

版本不是越新越好。Play Core 库与 Android Gradle Plugin(AGP)以及 Google Play 服务的版本有紧密关系。我建议你遵循下表的原则:

Play Core / Feature Delivery 版本 推荐 AGP 版本 备注
1.10.x(旧版 play-core) 4.2.x ~ 7.0.x 用于传统 App Bundle 的按需交付
2.0.x(feature-delivery) 7.0+ 支持新 API,包更小
2.1.x(最新) 7.2+ 推荐稳定版,修复了多个内存泄漏

避坑指南:我曾经在一个项目里直接用了 feature-delivery:2.1.0,但 AGP 还是 4.2,结果 SplitInstallManager 运行时频繁抛异常。查了官方文档才明白,2.x 系列要求 Gradle 7.0 以上。所以升级 Play Core 之前,先确认你的构建工具链。

我的习惯:在上线前用 implementation "com.google.android.play:feature-delivery:2.1.0",因为它在 2.x 系列中最稳定,而且兼容最新 App Bundle 格式。开发阶段如果想快速试错,可以用 1.10.3。

3. 与 Android App Bundle 的关系:一个硬币的两面

你可能会问:App Bundle 和 Play Core 库是干什么的?举个例子——App Bundle 是你的应用「发布包」,它包含了基础模块和所有动态功能模块的原始资源,但安装到用户手机上的只有基础模块。而 Play Core 库是运行时「拉取工具」,它通过 SplitInstallManager 调用 Google Play 服务,把用户需要的功能模块下载到本地。

它们之间的关系可以用一句话概括:

  • App Bundle 决定了「你能按需交付哪些模块」。
  • Play Core 库 决定了「你如何按需交付这些模块」。

实际流程中,App Bundle 上传到 Google Play 控制台后,Play 会把它拆成多个 APK(Base、Feature1、Feature2...)。当设备上的应用通过 Play Core 请求某个模块时,Play 服务下发对应的拆分 APK 并安装。整个过程对用户是透明的。

核心要点:没有 Play Core 库,App Bundle 只能做瘦身(去掉不用的语言、屏幕密度),不能做运行时按需加载。所以动态交付 = App Bundle + Play Core + SplitInstallManager。

我在一个电商项目里遇到过奇葩情况:用户反馈「新手引导页面加载空白」。查日志发现是请求了一个名为“onboarding”的动态模块,但当时 Play Core 库版本太旧,不支持同时下载多个模块。升级到 2.1.0 后问题消失。所以版本选择真不是小事。

Play Core、App Bundle 与 SplitInstall 关系图 Play Core 库与 App Bundle、SplitInstall 的关系 Android App Bundle 基础模块 (Base) 动态功能模块 A 动态功能模块 B 动态功能模块 C Google Play App Bundle 解析 拆分 APK 生成 按需下发模块 设备端应用 基础 APK 已安装 SplitInstallManager Play Core 库 动态加载模块 上传 下发拆分 APK 用户触发功能需求 (点击按钮 / 进入页面) 下载并安装 Feature APK (SplitInstallManager 调用) 💡 核心依赖路径 1. 开发者将 App Bundle(含动态模块)上传至 Google Play 控制台。 2. Google Play 根据用户设备配置,只下发基础 APK,动态模块视需要触发。 3. 应用内通过 Play Core 库的 SplitInstallManager 请求指定模块。 4. Google Play 服务下载对应的拆分 APK,并整合到应用中,无需重启。

总结:三件事记住就够

  • 依赖配置:用 com.google.android.play:feature-delivery:2.1.0 最省心,别混用旧版。
  • 版本选择:确保 AGP ≥ 7.0,不信你去翻我踩过的坑。
  • 与 App Bundle 的关系:App Bundle 是菜谱(原料清单),Play Core 库是厨师(动手做菜),缺一不可。