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 文件。

Google Play 的变化

从 2021 年 8 月开始,Google Play 发生了什么变化?

自 2018 年采用 AAB 以来,这几年采用 AAB 的开发者呈指数级增长,因此从 2021 年 8 月开始,Google Play 要求新应用必须采用 AAB 格式。Google Play 用户可以受益于体量更小、速度更快的应用,而开发者则受益于简化的发布流程和不断完善的新分发功能。

Android 的什么方面未发生变化?

APK 未发生变化,而且目前也没有任何在 Android 平台中对其进行更改的计划。APK 文件是 Android 平台上的可执行应用容器,您在 Android 设备上安装的软件包仍是 APK 文件(无论应用是使用 AAB 文件还是 APK 文件进行发布)。

为什么要更改 Google Play 的发布格式?

APK 以前一直是 Play 中的发布格式,但使用 10 年之后,很显然它已不再适合此用途。应用的大小在 5 年间增长了 5 倍;每 5 部 Android 设备中就有一部设备存储空间用尽;开发者在应对 Android 的多元化设备生态系统时也面临着复杂性日益加剧的问题。开发者可以上传庞大的 APK 文件来涵盖所有可能适用的设备类型并提供不用的代码/资源,但这要以用户流失为代价。或者,他们也可以尝试着管理复杂又耗时的多 APK 版本任务。这促使 Google 与开发者密切合作,共同设计了生态系统解决方案 Android App Bundle,它是一种专为发布应用而设计的格式。开发者可以利用 AAB 来缩减应用的大小(在 Google Play 中,使用 AAB 的应用比使用通用 APK 的应用平均小 15%),这对用户意味着加快应用安装速度,而对开发者则意味着提升安装量。AAB 可以降低发布复杂性并节省开发者时间。更重要的是,将发布格式与可执行格式分开还能发掘应用商店的创新能力,使其能够提供改善用户体验的全新分发功能。例如,Google Play 现在能够为开发者提供按需分发模式,减少用户等待时间并支持更多针对特定设备定制的应用。这种软件分发格式的分离可以实现将可执行文件同时用作发布和分发格式所无法实现的创新。

我是否仍然可以将应用发布到多个应用商店?

可以,无论您是否使用 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 文件执行签名操作。自 2021 年 8 月起,新的应用必须启用 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 管理中心下载分发 APK 文件(为该 APK 文件签名的密钥与 Play 所用的密钥相同),用于在其他应用商店或网站上进行分发。

我是否必须与 Play 分享我在 2021 年 8 月之前一直使用的密钥?

不必,您不需要与 Google 分享您在 2021 年 8 月之前使用的任何密钥。在创建新应用时,您可以选择新的密钥。

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

可以,Play 应用签名功能很快将针对 2021 年 8 月之前创建的应用提供一个额外的“密钥升级”选项。这样,应用就能以新的应用签名密钥开始使用 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 会使用您的新密钥为新安装的应用或其更新签名。同时,对于在密钥升级之前便已安装该应用的用户,则自动使用旧版应用签名密钥为应用更新签名。不久后,Play 应用签名密钥升级还将支持 APK 签名方案 v3 密钥轮替。这会使更多应用可以升级密钥,也有助于让升级后的密钥覆盖更广泛的用户。

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

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

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

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

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

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

在 Google Play 中,APK 文件需要单独的扩展文件 (OBB) 才能向用户提供更多资源。不过,由于 OBB 未签名且存储在应用的外部存储空间中,因此安全性不太高。借助 Play Asset Delivery (PAD) 功能,大小超过 150 MB 的游戏就可以替换 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 文件的其他应用商店会为开发者提供他们自己的应用商店服务。