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

《创建您的第一个免安装应用》中说明的,让应用在Google Play 免安装体验中运行的设置步骤,也适用于游戏。本指南重点介绍了一些游戏特有的设置步骤。

您可以使用 Unity(无论是否使用 Google Play 免安装 Unity 插件)、Cocos2DAndroid Studio 或您自己的自定义引擎来开发适用于 Google Play 免安装体验的游戏。

本指南假定您已了解希望提供哪种游戏体验。如果您想了解制作高质量游戏的理念和最佳实践,请阅读《Google Play 免安装游戏的 UX 最佳实践》

此外,在发布可在 Google Play 免安装体验中运行的游戏之前,您应查看《技术要求核对清单》

包含以下 intent 过滤器的 activity 将成为 Google Play 免安装体验的入口点

<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 游戏应用中的即时游戏按钮时,此 activity 会启动。您也可以使用深层链接 API 直接启动此 activity。

定义正确的版本代码

您的游戏免安装体验的版本代码需要小于可安装游戏的版本代码。以这种方式对应用进行版本控制可让玩家从 Google Play 免安装体验过渡到将游戏下载并安装到其设备上。Android 框架将此过渡视为应用更新。

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

  • 将 Google Play 免安装体验的版本代码从 1 开始。
  • 将可安装应用的版本代码增加一个较大的数字(例如 1000),以确保免安装体验的版本号有足够的增长空间。

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

  1. 在两个 Android Studio 项目中使用相同的软件包名称。
  2. 在 Google Play 管理中心,将这两个版本上传到同一个应用中。

有关设置游戏版本的更多详细信息,请参阅《应用版本控制》

支持执行环境

与其他应用一样,Google Play 免安装游戏在设备上的受限沙盒中运行。为支持此执行环境,请完成以下各部分所示的步骤。

退出明文流量

Google Play 免安装游戏不支持 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 免安装体验支持的沙盒环境为目标。您可以通过将 android:targetSandboxVersion 属性添加到游戏的 <manifest> 元素来完成此更新,如以下代码段所示

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

如需了解更多信息,请参阅 targetSandboxVersion 属性的文档。

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

您的免安装体验会保留在用户的设备上,直到免安装体验缓存被清除,这会在以下任一情况下发生

  • 由于设备可用内存不足,免安装体验缓存被垃圾回收。
  • 用户重新启动设备。

如果发生任一过程,用户必须重新下载您的免安装体验才能与其互动。

如果系统存储空间非常不足,您的免安装体验的用户数据可能会从内部存储中移除。因此,建议定期将用户数据与您游戏的服务器同步,以保留用户的进度。

减小应用大小

与其他类型的应用不同,Google Play 免安装游戏的下载大小限制为 15 MB。要创建这种大小的游戏,您可能需要重构游戏逻辑。本节介绍了一些有助于优化游戏大小的工具和技术。

工具

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

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

技术

以下是可用于减小游戏大小的技术列表

  • 提取游戏的部分逻辑并将其放入一个或多个功能模块中,这些模块不计入大小限制。
  • 降低游戏纹理的分辨率。
  • 考虑使用 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 可用后,它可以将其素材资源加载到游戏引擎中,并向玩家提供开始游戏所需的内容。

采用用户体验最佳实践

配置您的游戏以支持免安装体验后,添加以下各节中所示的逻辑以提供良好的用户体验。

支持 64 位架构

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

检查游戏是否正在运行免安装体验

如果您的游戏的一些逻辑取决于用户是否正在进行免安装体验,请调用 isInstantApp() 方法。如果当前运行的进程是免安装体验,此方法将返回 true

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

显示安装提示

如果您构建了试用版 Google Play 免安装体验,在某个时候游戏应提示玩家将其完整版本安装到其设备上。为此,请使用 Google APIs for Android 中的 showInstallPrompt() 方法。

要详细了解应如何以及何时提示玩家安装,请参阅《Google Play 免安装游戏的 UX 最佳实践》

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

如果玩家喜欢您的试用版体验,他们可能会决定安装您的游戏的完整版本。为提供良好的用户体验,将玩家的进度从您的免安装体验传输到游戏的完整版本非常重要。

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

其他资源

通过这些其他资源详细了解 Google Play 免安装体验

Codelab:构建您的第一个免安装应用
在现有应用中添加对 Google Play 免安装体验的支持。
Codelab:构建多功能免安装应用
模块化多功能应用。