构建和使用支持运行时的 SDK

1
Key concepts
2
Set up your development environment
3
Build an RE SDK
4
Consume the RE SDK
5
Testing, and building for distribution

主要概念

本部分介绍了 SDK 运行时架构、如何安装支持运行时的 SDK、向后兼容性,以及如何将现有 SDK 迁移到 SDK 运行时。

术语库

  • 支持运行时的 SDK (RE SDK):一种旨在 SDK 运行时环境中运行并通过进程间通信 (IPC) 与应用通信的 SDK。
  • 支持运行时的 SDK (RA SDK):一种未启用运行时的 SDK,与应用静态关联,可能包含您现有的 SDK 代码以及用于调用已启用运行时的 SDK 的新代码。
    • 有时也称为“静态链接”或“静态 SDK”。
  • Shim:一个 Jetpack 库,可帮助抽象跨进程或进程间通信 (IPC),并保持相同的应用-SDK 接口。

SDK 运行时架构

SDK 运行时采用客户端-服务器类型的模型。

主要区别在于“客户端”(应用)和“服务器”(启用时的 SDK)在同一设备上运行,并且此通信跨进程进行。

为了帮助应对这些挑战,我们构建了以下 Jetpack 库和工具,以简化 SDK 运行时中的应用-SDK 集成:

  • shim 库:封装库(或 shim)有助于抽象跨进程或进程间通信 (IPC)。它还有助于保持相同的应用-SDK 接口。
  • Backcompat 库:此库可处理向后兼容性,确保您的 SDK 无论 SDK 运行时是否可用都兼容。
  • 界面库:我们还提供了一些库来处理远程呈现,例如从启用运行时的 SDK 中提取界面,或调整视图大小并重新布局视图。
SDK 运行时架构概览
图表:显示应用通过不同的库与支持运行时的 SDK 进行交互。

安装流程变更

在 Android Studio 或其他工具中构建支持运行时的 SDK 时,您会创建 Android SDK Bundle (ASB),这是一种支持运行时的 SDK 的发布格式。

bundletool 会处理 ASB 以生成支持运行时的 SDK 的 APK:此单独的 APK 包含您的 SDK 代码,但不包含应用代码。

应用的清单文件声明了对已启用运行时的 SDK 名称和版本的依赖项,并且此依赖项由安装程序应用解析。

安装程序获取 SDK APK 后,便会开始安装,首先安装 SDK APK。成功后,它会继续安装应用的 APK。

如果应用安装在 Android 13 及更低版本上,以及不支持 SDK 运行时的设备上,则流程会有所不同。在这种情况下,商店会安装一个包含运行时启用型 SDK 和应用代码的 APK。如需了解详情,请参阅“分发”部分

每当应用在正式版中依赖于此 SDK 时,应用商店都会从此 ASB 创建正确的 SDK APK 并进行安装。

向后兼容性

由于 SDK 运行时已在 Android 14 中推出,我们需要支持更早的版本,同时不会给 SDK 或应用开发者带来开销。

为了在 Android 13 及更低版本上处理向后兼容性问题,我们引入了一个 Jetpack 库,无论设备是否支持 SDK 运行时,该库都能无缝运行已启用运行时的 SDK。

按照本指南操作可使已启用运行时的 SDK 默认向后兼容,您无需采取进一步措施。

我们会重点介绍相关阶段与向后兼容性相关的操作,但一般来说,您应确保已声明正确的依赖项,并且在适用时使用 *Compat 类。

迁移现有 SDK

如果您有想要迁移到运行时的现有 SDK,则不必一次性重构整个代码库。您可以选择将现有 SDK 逻辑逐步迁移到新的支持运行时的 SDK。

我们建议分以下三个阶段将现有 SDK 迁移到 SDK 运行时:

  1. 构建过渡期支持运行时的 SDK 以及对应的厚运行时感知 SDK。这样,您就可以逐步将业务逻辑从现有 SDK 迁移过来,并获得一个用于 A/B 测试的测试平台
  2. 将所有现有的 SDK 业务逻辑移至稳定状态,同时提供一个对应的精简型运行时感知 SDK,以简化应用迁移
  3. 支持感兴趣的应用完全迁移,以直接使用支持运行时的 SDK,而无需使用精简的运行时感知型 SDK

第 1 阶段 - 过渡期:厚运行时感知 SDK

您可以先选择将部分业务逻辑保留在运行时感知型 SDK 中。我们将其称为“厚”运行时感知型 SDK 或应用内封装容器。

借助此方法,您可以将 SDK 的全部或部分功能保留在静态应用库中,同时构建新的已启用运行时的 SDK。

这样一来,您就可以逐步将用例迁移到支持运行时的 SDK 中,并针对现有 SDK 测试支持运行时的 SDK。

在此阶段,应用开发者无需更改使用 SDK 的方式,因为是您的静态应用库(运行时感知型 SDK)负责完成使用运行时感知型 SDK 所需的工作。

应用调用自身内部的静态、运行时感知型 SDK,该 SDK 可以包含一个翻译层,用于调用支持运行时的 SDK 以及其中的其他业务逻辑。
应用调用自身内部的静态、运行时感知型 SDK,该 SDK 可以包含一个翻译层,用于调用支持运行时的 SDK 以及其中的其他业务逻辑。

第 2 阶段 - 稳定状态:精简的运行时感知 SDK

与厚运行时感知型 SDK 相比,瘦封装容器或瘦运行时感知型 SDK(瘦 RA_SDK)仅在静态链接的库 SDK 中包含 API 转换和运行时启用型 SDK 调用代码。

在此阶段,您应已将所有 SDK 代码从静态应用库 SDK 迁移到启用运行时的 SDK。

应用开发者无需进行任何更改,因为您的应用内精简运行时感知型 SDK 会处理对 SDK 运行时内支持运行时的 SDK 的调用。

应用在自身内部调用仅包含翻译层的静态 SDK。
应用在自身内部调用仅包含翻译层的静态 SDK。

第 3 阶段 - 全面迁移

在此最终阶段,您已将 SDK 的所有功能迁移到启用时的 SDK 中,并从应用中移除了所有静态库。

此时,应用客户端不再需要在 build 中包含您的库,而只需在清单中列出 SDK 依赖项,并在其应用代码中包含 SDK 调用。

系统会将 SDK 调用路由到 SDK 运行时,并在其中自动加载支持运行时的 SDK。

完整迁移阶段的架构,其中应用的广告代码直接调用启用运行时的 SDK。
完整迁移阶段的架构,其中应用的广告代码直接调用启用时的 SDK。


简介

第 2 步:设置开发环境