用于设置支持 Google Play 免安装体验的应用的步骤(如创建您的第一个免安装应用中所述)也适用于游戏。本指南着重介绍专用于游戏的一些设置步骤。
您可以使用 Unity 版 (无论是否带有 Google Play 免安装体验 Unity 插件), Cocos2D、 Android Studio 或您自己的自定义引擎。
本指南假定您已了解自己想要提供的游戏体验。如果您想了解制作高品质游戏的理念和最佳做法,请参阅支持 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 免安装体验的版本号。
- 将安装式应用的版本号提高一个较大的数值(如 1000),确保有足够的空间来提高免安装体验的版本号。
您可以在两个单独的 Android Studio 项目中开发免安装游戏和可安装游戏。但是,如果您这样做,则必须执行以下操作才能将游戏发布到 Google Play 平台上:
- 在两个 Android Studio 项目中使用相同的软件包名称。
- 在 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 免安装体验的游戏具有 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 可用后,它可以将其资源加载到游戏引擎中,并向玩家提供开始游戏所需的内容。
采用用户体验最佳做法
将游戏配置为支持免安装体验后,您可以添加以下各部分中介绍的逻辑,以提供良好的用户体验。
支持 64 位架构
在 Google Play 上发布的应用必须支持 64 位架构。添加 64 位的应用版本不仅可以提升性能,还能针对仅支持 64 位架构的设备做好准备。详细了解 64 位支持。
检查游戏是否在运行免安装体验
如果游戏的部分逻辑依赖于用户是否参与了免安装体验,请调用 isInstantApp()
方法。如果当前正在运行的进程是免安装体验,此方法会返回 true
。
通过执行此检查,您可以确定应用是需要在有限的执行环境中运行,还是可以利用平台功能。
显示安装提示
如果您构建了 Google Play 免安装试玩体验,游戏应在某个时刻提示玩家在其设备上安装完整版游戏。为此,请使用 Android 版 Google API 中的 showInstallPrompt()
方法。
如需进一步了解应如何以及何时提示玩家安装游戏,请参阅支持 Google Play 免安装体验的游戏的用户体验最佳做法。
将数据转移到安装式体验
如果玩家喜欢您的试玩体验,他们可能会决定安装完整版游戏。为了提供良好的用户体验,请务必将玩家的游戏进度从免安装体验转移到完整版游戏上。
如果您的游戏将 targetSandboxVersion
指定为 2
,则玩家的游戏进度会自动转移到完整版游戏上。否则,您必须手动转移与玩家游戏进度相关的数据。为此,请使用 Cookie API - 示例应用
其他资源
如需详细了解 Google Play 免安装体验,请参阅下面列出的其他资源:
- Codelab:构建您的第一个免安装应用
- 在现有的应用中添加对 Google Play 免安装体验的支持。
- Codelab:构建多功能免安装应用
- 模块化处理多功能应用。