Document
Android App Bundle 格式

Android App Bundle 格式

Android App Bundle 是您上传到 Google Play 的一种文件(文件扩展名为 .aab) 。 app bundle 是经过签名的二进制文件,可将应用的代码和资源组织到不同的模块中,如图 1 所示。各个模块的代码和资源的组织方式都与 APK 中的相似,之所以如此,是因为每个模块

Related articles

ON CLOUD REVIEW 2024: 10 Yrs On, Still The Best Clouds Karui Unlock Clarity: Understand Clouded Judgement Meaning Popular and Free Cloud Storage Options (With More Than 5GB Space) Download Adobe After Effects or Subscribe to Creative Cloud (2023)

Android App Bundle 是您上传到 Google Play 的一种文件(文件扩展名为 .aab) 。

app bundle 是经过签名的二进制文件,可将应用的代码和资源组织到不同的模块中,如图 1 所示。各个模块的代码和资源的组织方式都与 APK 中的相似,之所以如此,是因为每个模块都可以作为单独的 APK 生成。然后,Google Play 会使用 app bundle 生成向用户提供的各种 APK,如基本 APK、功能 APK、配置 APK 以及多 APK(多 APK 适用于不支持拆分 APK 的设备) 。以蓝色标识的目录(如 drawable/values/lib / 目录)表示 Google Play 用来为每个模块创建配置 APK 的代码和资源。

Android App Bundle 格式

包含一个基本模块、两个功能模块和两个资源包的 Android App Bundle 的内容。

注意: 您 is 构建 需要 为 每个 的 应用 或 一个 Bundle 。 也就是说 , 如果 您 使用 从 应用 多 个 的 应用 , 且 每个 都 具有 专门 的 , 则 需要 为 每个 应用 的 。

以下列表更详细地介绍了 App Bundle 的部分文件和目录:

拆分 APK 概览

提供经过优化的应用所需的一个基本组件就是 Android 5.0(API 级别 21)及更高版本上提供的拆分 APK 机制。拆分 APK 与常规 APK 非常相似,其中包含经过编译的 DEX 字节码、资源和 Android 清单。不过,Android 平台能够将安装的多个拆分 APK 视为一个应用。也就是说,您可以安装多个拆分 APK,它们共用代码和资源,并且在设备上看起来像是安装的一个应用。

的 好处 is 拆分 是 能够 将 单体式 为 更 小 的 , 这些 可 “ 按 ” 在 上 。 单体式 APK is 指 是 一个 中 应用 所 的 全部 和 对应 的 和 。

例如 , 一个 APK is 包含 可能 只有 少数 需要 的 所 对应 的 和 , 而 另 一个 则 只 或 所 对应 的 。 这些 APK is 安装 可以 根据 的 或 的 需要 和 。

下面介绍可以一起安装在设备上以形成完整应用体验的不同类型的 APK。本页的后面几节将介绍如何配置应用项目以支持这些 APK。

  • 基本 APK:此 APK 中包含了所有其他拆分 APK 都可以访问的代码和资源,并提供应用的基本功能。当用户请求下载您的应用时,会首先下载并安装该 APK。这是因为只有基本 APK 的清单才包含关于应用的服务、内容提供方、权限、平台版本要求和对系统功能的依赖性的完整声明。Google Play 会根据项目的应用模块(即基本模块)为应用生成基本 APK。如果您想减小应用的初始下载大小,请一定要注意,此模块中包含的所有代码和资源都包含在应用的基本 APK 中。
  • 配置 APK:每个配置 APK 都包含针对特定屏幕密度、CPU 架构或语言的原生库和资源。当用户下载您的应用时,他们的设备只会下载并安装该设备对应的配置 APK。每个配置 APK 都是基本 APK 或功能模块 APK 的依赖项。也就是说,配置 APK 会随它们为之提供代码和资源的 APK 一起下载和安装。与基本模块和功能模块不同,您不需要为配置 APK 单独创建模块。如果您在为基本模块和功能模块组织管理配置专用的备用资源时遵循了标准实践,Google Play 会自动为您生成配置 APK。
  • : 每个 都 您 使用 进行 了 处理 的 某 项 应用 的 和 。 您 is 自定义 随后 可以 如何 以及 何时 将 该 到 上 。 例如 , 使用 Play , 可 在 将 基本 到 上 之后 再 按 某些 , 以 向 的 。 我们 有 一 款 应用 , 它 仅 在 并 时 才 并 该 。 由于 在 时 可能 不可 用 , 因此 您 is 包含 将 所有 和 在 基本 中 。 也就是说 , 您 的 模块 is 假定 在 时 只有 基本 的 和 。 Google Play is 生成 会 根据 的 为 应用 。

假设我们有一款包含三个功能模块并支持多种设备配置的应用。下面的图 1 展示了该应用的各个 APK 的依赖关系树可能是什么样子的。请注意,基本 APK 构成树的头部,所有其他 APK 都依赖于基本 APK。(如果您想知道这些 APK 的模块在 Android App Bundle 中的表示方式,请参阅 Android App Bundle 格式。)

Android App Bundle 格式

使用拆分 APK 构建的应用的依赖关系树

注意 , 您 自己 这些 , Google 会 根据 您 通过 Studio 的 来 为 您 完成 。 如 了解 的 和 , 、 和 Bundle 。

搭载 Android 4.4(API 级别 19)及更低版本的设备

由于搭载 Android 4.4(API 级别 19)及更低版本的设备不支持下载和安装拆分 APK,因此 Google Play 会为这些设备提供名为 multi-APK 的单个 APK,该 APK 针对相应设备配置进行了优化。也就是说,multi-APK 提供完整的应用体验,但不包含不必要的代码和资源,例如用于其他屏幕密度和 CPU 架构的代码和资源。

但是,它们包含了应用所支持的所有语言的资源。例如,这让用户无需另外下载 multi-APK 即可更改应用的首选语言设置。

– 无法 在 以后 按 。 如 将 在 此 中 , 必须 在 时 按 或 。

请注意,有了 app bundle,您无需为应用支持的每种设备配置分别构建、签署、上传和管理 APK。您仍然只需为整个应用构建和上传一个 app bundle,剩下的工作可交由 Google Play 处理。因此,无论您是否打算支持搭载 Android 4.4 或更低版本的设备,Google Play 都为您和您的用户提供了灵活的服务机制。

用户语言更改

通过 app bundle,设备只会下载运行应用所需的代码和资源。因此,对于语言资源,用户的设备只会下载与设备设置中当前所选的一种或多种语言相符的应用语言资源。

当用户在设备设置中切换语言时,Google Play 可能需要下载并安装一些额外的拆分 APK,然后应用才能以新语言显示。

切换语言后,Google Play 会尝试立即下载其他语言。如果用户设备处于离线状态、下载失败或者资源太大,Google Play 会在设备条件更有利时重新尝试在后台下载。在搭载 Android 9.0(API 级别 28)或更低版本的设备上,如果应用在安装新语言拆分 APK 期间在前台运行,则应用会被终止。

如果您的应用要求随时在设备上提供所有语言,您可以在构建配置中停用语言拆分。

如果您的应用需要独立于设备设置中所选的用户语言下载其他语言(例如,实现应用内语言选择器),您可以使用 Play Core 库按需下载相应语言。