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 并安装。整个过程对用户是透明的。
我在一个电商项目里遇到过奇葩情况:用户反馈「新手引导页面加载空白」。查日志发现是请求了一个名为“onboarding”的动态模块,但当时 Play Core 库版本太旧,不支持同时下载多个模块。升级到 2.1.0 后问题消失。所以版本选择真不是小事。
总结:三件事记住就够
- 依赖配置:用
com.google.android.play:feature-delivery:2.1.0最省心,别混用旧版。 - 版本选择:确保 AGP ≥ 7.0,不信你去翻我踩过的坑。
- 与 App Bundle 的关系:App Bundle 是菜谱(原料清单),Play Core 库是厨师(动手做菜),缺一不可。