添加对免安装访问的支持

用于设置支持 Google Play 免安装体验的应用的步骤(如创建您的第一个免安装应用中所述)也适用于游戏。本指南着重介绍专用于游戏的一些设置步骤。

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

本指南假定您已了解自己想要提供的游戏体验。如果您想了解制作高品质游戏的理念和最佳做法,请参阅支持 Google Play 免安装体验的游戏的用户体验最佳做法

此外,在发布支持 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 免安装体验的版本号。
  • 将安装式 APK 的版本号提高一个较大的数值(如 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 属性文档。

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

已下载的免安装体验仍会保留在用户的设备上,直到免安装体验缓存被清除。系统会在出现以下情况时执行清除操作:

  • 由于设备的可用内存不足,系统会对免安装体验缓存进行垃圾回收。
  • 用户重启设备。

如果出现上述任一情况,用户必须重新下载免安装体验才能与之互动。

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

缩减 APK 的大小

与其他类型的应用不同,支持 Google Play 免安装体验的游戏具有 15MB 的下载大小限制。为了创建此大小的游戏,您可能需要重构游戏的逻辑。本部分将介绍一些可以帮助您优化游戏大小的工具和技巧。

工具

下面的工具可以帮助您确定哪些内容构成了游戏的大小:

  • 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 免安装体验来使游戏容纳到单个 15MB 的 APK 中。为克服这一困难,您可以将游戏分割为多个 APK。玩家可以先下载主要的基础 APK,然后在他们玩游戏的过程中,游戏可以从后台调用其他拆分 APK。

例如,基础 APK 可以包含核心游戏引擎以及显示加载屏幕所需的资源。基础 APK 启动后,它会显示加载屏幕,并立即请求包含游戏和关卡数据的其他拆分 APK。在这个拆分 APK 可用后,它可以将其资源加载到游戏引擎中,并向玩家提供开始游戏所需的内容。

采用用户体验最佳做法

将游戏配置为支持免安装体验后,您可以添加以下各部分中介绍的逻辑以提供良好的用户体验。

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

如果游戏的部分逻辑依赖于用户是否参与了免安装体验,请调用 isInstantApp() 方法。如果当前正在运行的进程是免安装体验,此方法会返回 true

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

显示安装提示

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

如需进一步了解应如何以及何时提示玩家安装游戏,请参阅支持 Google Play 免安装体验的游戏的用户体验最佳做法

将数据转移到安装式体验

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

如果玩家使用的设备搭载的是 Android 8.0(API 级别 26)或更高版本,并且您的游戏targetSandboxVersion 指定为 2,则玩家的游戏进度会自动转移到完整版游戏上。否则,您必须手动转移与玩家游戏进度相关的数据。为此,请使用以下某个 API:

  • 对于使用搭载 Android 8.0(API 级别 26)或更高版本的设备的用户,请使用 Cookie API - 应用示例
  • 如果玩家可以在搭载 Android 7.1(API 级别 25)及更低版本的设备上与您的体验互动,请添加对 Storage API 的支持 - 应用示例

其他资源

如需详细了解 Google Play 免安装体验,请参阅下面列出的其他资源:

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