将现有游戏转换为即时游戏

创建您的第一个即时应用中所述,设置应用在Google Play 即时体验上运行的步骤也适用于游戏。本指南重点介绍一些特定于游戏的设置步骤。

您可以使用Unity(使用或不使用Google Play Instant Unity 插件)、Cocos2DAndroid Studio或您自己的自定义引擎来开发 Google Play Instant 游戏。

本指南假设您已经知道您想要提供的游戏体验类型。如果您想了解制作高质量游戏的创意和最佳实践,请阅读Google Play Instant 游戏的 UX 最佳实践

此外,在发布可在 Google Play Instant 上运行的游戏之前,您应该查看技术要求清单

包含以下意图过滤器的活动将成为 Google Play Instant 体验的入口点

<activity android:name=".GameActivity">
   <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
</activity>

当用户点击 Play 商店中的立即试用按钮或 Google Play 游戏应用中的即时游戏按钮时,将启动此活动。您还可以使用深度链接 API直接启动此活动。

定义正确的版本代码

游戏的即时体验的版本代码必须小于可安装游戏的版本代码。以这种方式为应用设置版本允许玩家从 Google Play Instant 体验过渡到将游戏下载并安装到他们的设备上。Android 框架认为此过渡是应用更新。

为确保您遵循推荐的版本控制方案,请遵循以下策略之一

  • 将 Google Play Instant 体验的版本代码重新启动为 1。
  • 将可安装应用的版本代码增加大量数字,例如 1000,以确保有足够的空间来增加即时体验的版本号。

在两个独立的 Android Studio 项目中开发即时游戏和可安装游戏是可以的。但是,如果您这样做,则必须执行以下操作才能在 Google Play 上发布游戏

  1. 在两个 Android Studio 项目中使用相同的包名称。
  2. 在 Google Play Console 中,将两个变体上传到同一个应用。

有关设置游戏版本的更多详细信息,请参阅为您的应用设置版本

支持执行环境

与其他应用一样,Google Play Instant 上的游戏在设备上的有限沙盒中运行。要支持此执行环境,请完成以下部分中显示的步骤。

选择退出明文流量

Google Play Instant 上的游戏不支持 HTTP 流量。如果您的游戏面向 Android 9(API 级别 28)或更高版本,则 Android 默认情况下会在您的游戏中禁用明文支持。

但是,如果您的游戏面向 Android 8.1(API 级别 27)或更低版本,则必须创建一个网络安全配置文件。在此文件中,将cleartextTrafficPermitted设置为false,如下面的代码片段所示

res/xml/network_security_config.xml

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="false">
        <domain includeSubdomains="true">secure.example.com</domain>
    </domain-config>
</network-security-config>

更新目标沙盒版本

更新游戏的AndroidManifest.xml文件,使其面向 Google Play Instant 支持的沙盒环境。您可以通过向游戏的<manifest>元素添加android:targetSandboxVersion属性来完成此更新,如下面的代码片段所示

<manifest
   xmlns:android="http://schemas.android.com/apk/res/android"
  ...
   android:targetSandboxVersion="2" ...>

更多信息,请参阅关于targetSandboxVersion 属性的文档。

不要依赖缓存或应用数据的存在

您的即时体验将保留在用户的设备上,直到即时体验缓存被清除,这种情况会在以下情况下发生:

  • 由于设备可用内存不足,即时体验缓存被垃圾回收。
  • 用户重启设备。

如果发生上述任一过程,用户必须重新下载您的即时体验才能与其交互。

如果系统存储空间非常低,您的即时体验的用户数据可能会从内部存储中删除。因此,建议定期将用户数据与游戏的服务器同步,以便保存用户的进度。

减小应用大小

与其他类型的应用不同,Google Play 即时游戏的大小限制为15 MB。要创建此大小的游戏,您可能需要重构游戏的逻辑。本节介绍一些工具和技术,以帮助优化游戏的大小。

工具

以下工具列表可以帮助您确定哪些因素导致了游戏的大小:

  • APK 分析器:提供已编译 APK 内容的整体视图。使用此视图,您可以确定每个元素对整体大小的字节数贡献。使用此工具快速检查游戏使用的资源、资产、逻辑和原生库的大小。
  • Bloaty McBloatface:显示二进制文件的大小概要。
  • Android GPU 监视器:查看减少纹理大小而无需重新编译游戏的文件大小效果。

技术

以下是您可以用来减小游戏大小的技术列表:

  • 提取部分游戏逻辑,并将其放置在一个或多个功能模块中,这些模块不计入大小限制。
  • 降低游戏纹理的分辨率。
  • 考虑使用WebP 格式,尤其是在 GPU 上使用未压缩纹理时。WebP 格式创建的图像质量与 JPEG 图像相同,但大小却小 15% 到 30%。虽然解压缩 WebP 图像需要更长时间,但这解压缩时间仍然明显短于游戏纹理的下载时间。Google 还已将该格式集成到一个开源游戏引擎中。
  • 压缩或重复使用声音和音乐。
  • 使用不同的编译标志来帮助减小二进制文件的大小
    • -fvisibility=hidden – 最重要的一个。在cmake中,您可以按如下方式指定它:
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
      
    • -Oz – 也非常重要,用于减小尺寸。如果您使用gcc编译,请改用-Os
    • -flto – 有时可以减小文件大小。
    • 链接器标志 – 将--gc-sections与编译器标志(例如-ffunction-sections-fdata-sections)一起使用。
  • 使用 Proguard缩减代码和资源
  • 使用 Gradle 4.4 或更高版本生成更小的 DEX 文件。
  • 实现资源的云端分发

将大型游戏分成多个 APK

即使应用了减小 APK 大小的建议,也很难优化 Google Play 即时体验以使您的游戏适合单个 15 MB 的 APK。为了解决此问题,您可以将游戏分成多个 APK。玩家首先下载主要的基准 APK;当他们玩游戏时,其余的分割 APK 会在后台提供给游戏。

例如,基准 APK 可以包含核心游戏引擎和显示加载屏幕所需的资源。当基准 APK 启动时,它会显示加载屏幕并立即请求包含游戏和关卡数据的附加分割 APK。该分割 APK 可用后,它可以将其资源加载到游戏引擎中,并为玩家提供开始游戏所需的内容。

采用 UX 最佳实践

配置游戏以支持即时体验后,请添加以下各节中显示的逻辑,以提供良好的用户体验。

支持 64 位架构

在 Google Play 上发布的应用需要支持 64 位架构。添加应用的 64 位版本可提高性能,并为仅支持 64 位硬件的设备做好准备。了解有关 64 位支持的更多信息

检查游戏是否正在运行即时体验

如果游戏的一些逻辑取决于用户是否参与您的即时体验,请调用isInstantApp() 方法。如果当前运行的进程是即时体验,则此方法返回true

通过进行此检查,您可以确定您的应用是否需要在有限的执行环境中运行,或者是否可以利用平台功能。

显示安装提示

如果您构建了试用版 Google Play 即时体验,则游戏应在某个时间点提示玩家将完整版安装到他们的设备上。为此,请在适用于 Android 的 Google API中使用showInstallPrompt() 方法。

要了解有关应如何以及何时提示玩家进行安装的更多信息,请参阅Google Play 即时游戏的 UX 最佳实践

将数据传输到已安装的体验

如果玩家喜欢您的试用体验,他们可能会决定安装游戏的完整版。为了提供良好的用户体验,重要的是将玩家的进度从您的即时体验转移到游戏的完整版。

如果您的游戏指定targetSandboxVersion2,则玩家的进度会自动传输到游戏的完整版。否则,您必须手动传输与玩家进度相关的数据。为此,请使用 Cookie API - 示例应用

其他资源

从以下其他资源中了解有关 Google Play 即时的更多信息

代码实验室:构建您的第一个即时应用
在现有应用中添加对 Google Play 即时的支持。
代码实验室:构建多功能即时应用
模块化多功能应用。