实现资源的云端分发

在根据大小要求缩减应用时,请先尝试使用标准 APK 大小优化技巧。如果您需要进一步缩减大小,可能需要依靠资源的云端分发。本文档介绍了进行资源云端分发之前的准备工作以及各种游戏引擎提供的支持选项。虽然本页面上的指南侧重于游戏,但这些原则适用于包含大型资源的所有应用。

准备

在考虑拆分应用以进行资源的云端分发时,应考虑如何根据用户何时需要使用应用文件将这些文件拆分为多个部分。这样从时间上考虑往往将资源分为以下三个类别:始终需要、启动时需要和稍后需要的资源。

始终需要

有些资源很难拆分成较小的块,或者需要捆绑在基础 APK 中。游戏代码及其库或引擎依赖项就属于这类资源。尽管 Google Play 核心支持代码 app bundle,但许多引擎不支持稍后下载代码。

启动时需要

游戏启动后,用户应该能够立即开始玩游戏。Google Play 免安装体验要求使用 LTE 或 4G 连接的用户能够在 15 秒内开始玩您的游戏(请参阅 Google Play 免安装体验核对清单)。因此,您应将启动后的所有辅助下载限制为不超过支持初始体验所需的大小。例如,可在启动后立即快速下载的内容中包括第一个游戏关卡和位置资源,或运行游戏的前几分钟所需的全部代码。

稍后需要

可以稍后在后台根据需要下载的所有资源都属于此类别。此类别包含了玩的时间较长的游戏的大多数资源。稍后下载这些资源有助于尽可能地减小应用大小。

引擎支持

资源云端分发是使您的游戏突破免安装游戏的 15MB 大小限制的主要方式。是否支持下载资源因游戏引擎而异。下面给出了最常见的情况以及资源托管选项。

请注意,启动时所需的资源越少,用户进入游戏的速度就越快,这样可以降低游戏首次启动时的放弃率,提高玩家的留存率。

Play 功能分发(通过 App Bundle)

如果要将应用发布为 app bundle(这是首选方法),您可以使用功能模块获取基础 APK 以外的其他资源。对于免安装应用,每个功能模块都必须在清单中设置 dist:instant="true"。不得使用 dist:on-demand 属性;该属性主要用于安装式应用 APK 中的按需模块。此外,无论模块是否包含代码,每个功能模块的大小都必须小于免安装应用 APK 的 15MB 大小限制。如果不能将每个模块的大小保持在此限制范围以内,将无法发布到 Alpha 版或发布轨道。正确配置后,您就可以使用 PlayCore 库在运行时获取功能模块

Cocos Creator

Cocos 从 v2.0.4 版开始支持资源的云端分发。Cocos 会按需下载资源,如果未能及时下载资源,则显示占位符。由于 Cocos 本身不提供托管服务,因此由 Cocos 生成的资源文件必须由某种在线服务托管。

Unity

Unity 5.6、2017.4 或 2018.2 版的 Unity Google Play 免安装体验插件支持资源的云端分发。Unity 的更高版本对于进行引擎剥离更加有利,因此为了释放更多空间,最好迁移到更高版本。Unity 云端资源托管在 Unity 为您创建的 AssetBundle 文件中。将这些文件上传到云端服务器可实现资源的云端分发,因为 Unity 原本就支持下载 asset bundle

其他引擎

无论您使用自定义引擎还是多种原生库的集合,您的选择都可以开箱即支持资源的云端下载。如果您有足够多的资源需要从云端下载,则需要编写代码或集成一种方法来按需下载游戏资源。最好从 Firebase HostingFirebase Cloud Storage API 入手。有些引擎提供简单的 HTTPS 文件获取功能,可能也能够满足您的需求。

托管资源

除非您使用 Google Play app bundle 通过 Play 下载资源,否则就需要将资源托管在其他位置。您可以按照自己的喜好使用任何服务来托管资源,只要能够提供合理的全球分布和可用性即可。Google Play 游戏应用的用户在世界各地玩游戏,因此必须快速地将云端托管的资源提供给他们,不管他们身在何处。