Android App Bundle 常见问题解答

Android App Bundle 简介

什么是 Android App Bundle (AAB)?

Android App Bundle (AAB) 是 2018 年推出的一种 Android 发布格式,得到 Google Play 和其他应用商店以及 Android Studio、Bazel、Buck、Cocos Creator、Gradle、Unity 和 Unreal 等构建工具的广泛支持。

AAB 文件和 APK 文件有何区别?

app bundle 仅用于发布,无法在 Android 设备上安装。Android 软件包 (APK) 是 Android 的可安装、可执行应用格式。 app bundle 必须由分发者处理成 APK 文件才能在设备上安装。

AAB 是只能在 Google Play 中使用的专有格式吗?

不,AAB 不是专有格式。app bundle 是开放源代码的,因此任何应用商店都可以支持它。Google Play 和一些其他应用商店都支持 app bundle。

创建 AAB 文件会妨碍我将应用发布到其他应用商店吗?

不会,AAB 文件不会妨碍您将应用发布到其他应用商店。在构建应用时,您可以根据每个应用商店所需的发布格式,同时构建 AAB 文件和 APK 文件。

使用 AAB 文件需要多大的工作量?

对于大多数应用而言,构建 AAB 文件的工作量与构建 APK 文件相等,因为您只需要在构建时选择 AAB 而不选择 APK 即可。对于另一些应用而言,则可能需要进行一些更改,才能充分发挥 AAB 文件的全部优势。

是否已有开发者在使用 AAB 文件?

可以。目前,在 Google Play 中使用 app bundle 发布其正式版的应用和游戏已逾 100 万,其中包括大部分的热门应用,代表着数十亿的活跃安装量。如果您使用 Google Play 安装应用,那么您的设备上的许多应用都是以 app bundle 形式发布的。

使用 AAB 文件是否会阻止用户“旁加载”应用?

不会,使用 AAB 文件不会阻止用户从任何来源安装 APK 文件。因为 AAB 只是一种发布格式,不会改变 Android 平台的工作方式。

如果开发者使用 AAB 文件分发经过优化的 APK 文件,这是否意味着共享这些 APK 文件的用户可能会遇到问题?

Android 平台上历来都极少出现 APK 文件无法直接从一部设备转移到另一部设备的情况,无论应用是通过 APK 文件发布还是通过 AAB 文件发布。具体而言,针对某一种设备(例如,针对特定芯片架构)优化 APK 文件后,在将这些 APK 文件直接转移到其他设备时,如果目标设备与原设备的属性不匹配,那么可能会遇到问题。在此类情况下,需要安装适合目标设备的一个或一组 APK 文件。

我可不可以将应用发布到多个应用商店?

可以,无论您是否使用 AAB 文件,都可以将应用发布到多个应用商店。您可以在 Google Play 和支持 AAB 的其他应用商店中发布 AAB 文件,同时在不支持 AAB 的其他应用商店或网站上发布 APK 文件。

AAB 要求是否适用于发布到 Google Play 企业版的专用应用?

不适用,发布到 Google Play 企业版的专用应用可以通过 APK 或 AAB 发布。创建新的专用应用时,如果您想要发布自签名的专用 APK,可以选择更改应用签名密钥,并选择退出 Play 应用签名计划。

Play 应用签名简介

什么是 Play 应用签名?

Android 平台上的每个 APK 文件都必须使用应用签名密钥进行加密签名才能安装。Android 平台使用该密钥来确保所有应用更新与设备上已安装的应用相匹配,进而确保初始安装完成后的每项应用更新都来自同一个密钥持有者。这可以降低恶意应用更新风险。Play 应用签名功能于 2017 年推出,是 Google Play 的密钥管理服务,用于保护和管理 Play 开发者为通过 Play 分发的应用进行签名所用的应用签名密钥。此外,Play 应用签名功能还会对 Play 通过上传的 AAB 文件生成的 APK 文件执行签名操作。新的应用必须启用 Play 应用签名功能才能使用 AAB 文件。

Google 为何推出 Play 应用签名功能?

多年来,应用签名密钥一直是 Play 开发者面临的一个难题。密钥丢失意味着无法再向用户分发应用更新,而密钥被盗会将用户置于恶意更新的风险之中。在软件分发过程中,分发渠道通常会为其分发的软件存储和管理密钥,因为这样做可以降低上述风险。Play 应用签名功能于 2017 年推出,旨在消除丢失 Play 分发密钥的风险,在密钥被盗后为 Play 用户提供保护,并让开发者享受 Google 不断完善的安全防护技术带来的好处。

Google 如何确保 Play 应用签名的安全?

Google 用于保护开发者密钥的安全基础架构正是 Google 用于保护自己密钥的同一个业界领先的安全基础架构。密钥以加密形式存储在锁定的专用密钥管理服务器上,并使用严格的 ACL 和涵盖所有操作的防篡改审核日志。网上详细介绍了 Google 的云安全操作和最佳做法。

我可以选择使用 Play 为我的应用生成的应用签名密钥吗?

可以。创建新应用时,您可以选择让 Google 代表您生成并存储应用签名密钥,也可以选择您自己的应用签名密钥并上传其副本。

我想针对 Play 和其他应用商店使用相同的应用签名密钥。这种做法是否依然可行?

在考虑到应用更新的工作原理后,如果您决定在多个应用商店中使用相同的签名密钥,那么您仍可以这样做。请注意,这将允许每个应用商店为您的应用执行跨商店应用更新。您有两种选择:

  • 您可以在本地生成密钥并将其副本上传到 Play。这样,您在针对其他应用商店构建应用时,就可以使用在 Google Play 中所用的密钥。
  • 您可以将 Google 生成的密钥用于 Play 应用签名,然后从 Play 管理中心下载使用 Google 生成的密钥签名的分发 APK,并通过这些 APK 在其他应用商店或网站上进行分发。

对于 2021 年 8 月之前创建的应用,我是否可以使用 Play 应用签名功能而不提供我的应用签名密钥副本?

可以,针对 2021 年 8 月之前创建的应用,Play 应用签名功能支持“密钥升级”选项。这样,应用就能以新的应用签名密钥开始使用 Play 应用签名功能。不过,为了使用此选项,在执行升级后,您需要在每个版本中上传两项内容:app bundle 和使用旧应用签名密钥签名的旧版 APK 文件。Play 将使用您的 AAB 文件为新安装的应用及其更新生成以升级后的密钥签名的 APK 文件;同时,Play 将使用您的旧版 APK 文件为已安装您的应用的用户分发应用更新。随着时间的推移,已安装的旧版应用将迁移到升级后的密钥(例如,当用户更换为新的移动设备时)。

是否有办法对 2021 年 8 月之前创建的应用和 2021 年 8 月之后创建的应用使用相同的应用签名密钥?

通常,我们建议不要对多个应用使用相同的应用签名密钥,对每个应用使用唯一的密钥更安全。不过,如果您需要对多个应用使用相同的应用签名密钥,也可以办到。要么,您可以在配置 Play 应用签名功能时上传现有应用签名密钥的副本。要么,如果您不想共享现有的应用签名密钥,可以使用即将发布的“密钥升级”选项,让 2021 年 8 月之前创建的应用开始使用 Play 应用签名功能。如此一来,2021 年 8 月之前创建的应用和 2021 年 8 月之后创建的应用就可以使用相同的新密钥。

我可以更改 Play 应用签名功能使用的应用签名密钥吗?

可以,在 Play 管理中心内请求升级密钥就可以更改应用的密钥。

如何才能确定 Google Play 没有对我的代码做出意外更改?

您可以随时从 Google Play 和 Play 管理中心的 App bundle 资源管理器中下载工件并进行检查。此外,Play Developer API 很快也会提供相应功能,让您在将 APK 文件提交到发布轨道前对其进行验证。您还可以使用一项可选功能,名为 app bundle 的代码透明性。借助代码公开透明功能,您和您的最终用户可以让 Google Play 等应用商店为其分发的代码负责。

app bundle 的代码公开透明功能如何运作?

“代码公开透明”是一项可选功能,您可以借助此功能让分发您的应用的应用商店为其分发的代码负责。如需使用代码公开透明功能,请于构建时在应用中生成一个代码公开透明文件来代表您的代码(具体而言,它是一个包含应用代码哈希值的文件)。您可以使用自己的代码透明性私钥为该文件签名。您完全不必向 Google 提供您的代码透明性密钥。然后,您可以检查设备上已安装的 APK 文件,并验证您签名的代码公开透明文件是否仍与该 APK 文件的代码相匹配。这可以保证,即使 APK 文件本身在分发过程中已重新签名,经过代码公开透明功能验证的代码也没有被修改过。如果不匹配,就表明代码在分发期间发生了更改。代码公开透明功能不会取代 APK 文件签名,也不属于 Android 平台的一部分。

在 Google Play 中发布大型应用和游戏

使用 AAB 文件时,Google Play 的应用大小限制是多少?

从 AAB 文件生成的任何一组 APK 文件的压缩后下载大小上限为 200MB。也就是说,Google Play 将从 AAB 文件生成所有可能的 APK 文件。然后,Google Play 会检查任何单个设备收到的最大压缩后下载大小是否未超过 200MB。您上传的 AAB 文件可以比该值大很多倍,这是在 Google Play 中使用 APK 文件所不可能做到的。

Google Play 是否支持对 AAB 文件使用扩展文件 (OBB)?

不,Google Play 不支持对 AAB 文件使用扩展文件。扩展文件 (OBB) 是 Google Play 特有的旧版解决方案,用于使用 APK 文件发布大型应用和游戏。对于大小超过 200MB 的 AAB 文件,您可以使用 Google 和第三方提供的替代方案。

如何在 Google Play 中发布大小超过 200MB 的应用或游戏?

使用 AAB 文件的大型应用和游戏可以使用 Play 分发服务(如 Play Asset Delivery 或 Play Feature Delivery)来分发超过 200MB 的文件,也可以使用第三方内容分发网络。

与扩展文件 (OBB) 相比,Play Asset Delivery 具有哪些优势?

在 Google Play 中,APK 文件需要单独的扩展文件 (OBB) 才能向用户提供更多资源。不过,由于 OBB 未签名且存储在应用的外部存储空间中,因此安全性不太高。借助 Play Asset Delivery (PAD) 功能,大小超过 200MB 的游戏可以替换 OBB,在 Play 商店中以单个 app bundle 的形式发布整个游戏。除了提供更顺畅的发布流程和灵活的分发模式之外,PAD 功能还意味着更新所需的设备存储空间更少。因此,它可以提高安装率。最后,随着 ASTC 如今在 80% 左右的设备上得到支持,您可以借助 PAD 的纹理压缩格式定位功能将 ASTC 提供给支持它的设备。您可以定位最广泛的设备,同时高效利用可用的硬件和设备存储空间。

AAB 解锁的 Google Play 分发功能

能否举例说明 Play 为使用 AAB 文件的开发者提供的新功能?

Google Play 等应用商店会将 AAB 文件处理为可安装的 APK 文件。负责处理 APK 文件使其可以提供为开发者和用户带来好处的新功能和新服务。Play 已经在提供受到开发者广泛使用和重视的此类服务,Play Feature DeliveryPlay Asset Delivery 就是其中两个例子。

什么是 Play Feature Delivery?

app bundle 的一项功能是可将应用拆分为多个模块,称为“功能模块”。然后,可在不同时间将这些模块动态分发给用户和设备(不像过去,所有内容都必须在安装时作为一个文件分发)。借助 Play Feature Delivery,您可以使用安装时分发、条件分发和按需分发模式,自定义将哪些功能模块分发给哪个设备以及何时分发。如此一来,您就能缩减应用大小,提升安装量并定制应用体验。例如,您可以将客户支持等极少使用的功能按需分发给需要相应功能的用户而不是在安装时分发,从而缩减所有用户的初始安装大小。或者,您也可以向高端设备提供完整的应用体验,同时向具有数据和设备存储空间限制的入门级设备提供不太全面的应用体验和可选的按需功能。

什么是 Play Asset Delivery?

借助 Play Asset Delivery,游戏开发者可以在最适宜的时间动态分发大型资源,从而改善用户体验并减少用户等待时间。使用 Play Asset Delivery 的游戏还可以使用纹理压缩格式定位功能,因此您的用户只会获得适合自己设备的资源,而不会浪费空间或带宽。

其他应用商店提供这些 Play 分发功能吗?

不提供。Play Feature Delivery 和 Play Asset Delivery 适用于直接与 Google Play 商店交互的应用和游戏。Google Play 以独到的功能和服务从一众应用商店中脱颖而出,并为 Play 开发者和用户带来附加价值和实用性,这些可选服务正是典型的示例。使用 app bundle 和 APK 文件的其他应用商店会为开发者提供他们自己的应用商店服务。