Android 应用包常见问题

关于 Android 应用包

什么是 Android 应用包 (AAB)?

Android 应用包 (AAB) 于 2018 年推出,这是一种 Android 发布格式,Google Play 和其他应用商店以及 Android Studio、Bazel、Buck、Cocos Creator、Gradle、Unity 和 Unreal 等构建工具都支持它。

AAB 和 APK 有什么区别?

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

AAB 是一种专有格式,只能在 Google Play 上使用吗?

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

创建 AAB 是否会阻止我发布到其他应用商店?

不会,这不会阻止您发布到其他应用商店。构建应用时,您可以同时构建 AAB 和 APK,具体取决于每个应用商店所需的发布格式。

使用 AAB 需要多少工作量?

对于大多数应用,构建 AAB 与构建 APK 的工作量相当,因为它只需在构建时选择 AAB 而不是 APK。对于某些应用,可能需要进行一些更改才能充分利用 AAB 的优势。

已经有开发者使用 AAB 了吗?

是的。超过 100 万个应用和游戏正在使用应用包在 Google Play 上发布其生产版本,其中包括大多数热门应用,代表数十亿活跃安装量。如果您使用 Google Play 安装应用,那么您设备上的许多应用都是作为应用包发布的。

AAB 是否会阻止用户“侧载”应用?

不会,AAB 不会阻止用户从任何来源安装 APK。由于 AAB 只是一种发布格式,因此它们不会改变 Android 平台的工作方式。

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

在 Android 上,始终存在一些罕见的情况,即 APK 无法直接从一台设备传输到另一台设备,无论应用是通过 APK 还是 AAB 发布的。具体来说,当 APK 已针对设备进行了优化(例如,针对特定芯片架构)时,如果目标设备与原始设备的属性不匹配,则直接将这些 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 应用签名还会对 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 应用签名?

是的,Play 应用签名支持针对 2021 年 8 月之前创建的应用的“密钥升级”选项。这允许应用开始使用新的应用签名密钥使用 Play 应用签名。但是,为了使用此选项,在执行升级后,您需要在每个版本中上传两样东西:一个应用包和一个使用旧应用签名密钥签名的旧版 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 管理中心中的应用包资源管理器下载并检查工件。此外,Play 开发者 API 将很快提供在将 APK 提交到发布轨道之前验证 APK 的功能。您还可以使用名为应用包代码透明性的可选功能。使用代码透明性,您和您的最终用户可以追究像 Google Play 这样的应用商店交付代码的责任。

应用包代码透明性如何工作?

代码透明性是一项可选功能,它可以让您追究分发您应用的应用商店交付代码的责任。要使用代码透明性,您在构建时会在应用中生成一个代码透明性文件,该文件代表您的代码(具体来说,它是一个包含应用代码哈希的文件)。您使用只有您持有的私有代码透明性密钥对其进行签名。您无需将代码透明性密钥提供给 Google。然后,在设备上,您可以检查已安装的 APK 并验证您签名的代码透明性文件是否仍然与 APK 的代码匹配。这使您可以确保,即使 APK 本身在分发过程中重新签名,通过代码透明性验证的代码也没有被修改。如果存在不匹配,则表明代码在分发过程中已更改。代码透明性不会取代 APK 签名,也不是 Android 平台的一部分。

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

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

从 AAB 生成的基本模块的最大压缩下载大小为 200 MB。也就是说,Google Play 将首先生成基本模块,然后生成您的 AAB 中的任何其他功能模块或资源包。接下来,Google Play 检查任何单个设备接收的最大累积总压缩下载大小不超过 4 GB。

Google Play 是否支持 AAB 的扩展文件 (OBB)?

不,Google Play 不支持 AAB 的扩展文件。扩展文件 (OBB) 是使用 APK 发布大型应用和游戏的旧版 Google Play 特定解决方案。对于大于 200 MB 的 AAB,存在 Google 和第三方替代方案。

如何发布大于 200 MB 的应用或游戏到 Google Play?

使用 AAB 的大型应用和游戏可以使用 Play 传递服务(如 Play 资源传递或 Play 功能传递)来超过 200 MB 的大小限制,或者可以使用第三方内容交付网络。

Play 资源传递相对于扩展文件 (OBB) 有什么优势?

在 Google Play 上,APK 需要单独的扩展文件 (OBB) 来向用户提供其他资源。但是,由于 OBB 未签名且存储在应用的外部存储中,因此它们并不十分安全。使用 Play 资源传递 (PAD),大于 200 MB 的游戏可以通过在 Play 商店上发布整个游戏作为单个应用包来替换 OBB。除了提供更流畅的发布流程和灵活的传递模式外,PAD 还意味着更新需要更少的设备存储空间。因此,它可以提高安装率。最后,由于 ASTC 现在已在约 80% 的设备上得到支持,因此 PAD 的纹理压缩格式定位功能使您可以向支持它的设备提供 ASTC。您可以定位最广泛的设备范围,同时有效利用可用的硬件和设备存储空间。

AAB 解锁的 Google Play 传递功能

Play 为使用 AAB 的开发者提供的哪些新功能示例?

像 Google Play 这样的应用商店会将 AAB 处理成可安装的 APK。负责 APK 使得可以提供新功能和服务,从而为开发者和用户带来好处。Play 已经提供此类服务,这些服务已被开发者广泛使用并重视,两个例子是Play 功能传递Play 资源传递

什么是 Play 功能传递?

应用包的一项功能是它们允许将应用分成多个模块,称为“功能模块”。然后可以动态地将这些模块在不同的时间传递给用户和设备(不像过去那样,所有内容都必须在安装时作为一个文件传递)。Play 功能传递使您可以自定义向哪个设备以及何时传递哪些功能模块,包括安装时、条件和按需传递模式。这使您可以减小应用大小,从而获得更多安装量,并定制您的应用体验。例如,您可以按需向需要它的用户传递很少使用的功能(如客户支持),而不是在安装时传递,从而减小所有用户的初始安装大小。或者,您可以向高端设备传递完整的应用体验,同时向具有数据和设备存储空间限制的入门级设备传递较小的应用体验以及可选的按需功能。

什么是 Play 资源传递?

Play 资源传递允许游戏开发者通过在最佳时间动态传递大型资源来改善用户体验并减少用户等待时间。使用 Play 资源传递的游戏还可以使用纹理压缩格式定位,因此您的用户只获得适合其设备的资源,不会浪费空间或带宽。

这些 Play 传递功能在其他应用商店中可用吗?

不,Play 功能传递和 Play 资源传递涉及应用和游戏直接与 Google Play 商店交互。这些可选服务是 Play 将自身与应用商店区分开来并为 Play 开发者和用户带来额外价值和实用性的示例。使用应用包和 APK 的其他应用商店也为开发者提供他们自己的应用商店服务。