如创建您的第一个即时应用中所述,为应用设置在Google Play 免安装应用上运行的步骤也适用于游戏。本指南强调了游戏特有的一些设置步骤。
您可以使用 Unity(无论是否使用 Google Play 免安装应用 Unity 插件)、Cocos2D、Android 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 上发布您的游戏
- 在两个 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 免安装游戏有 15 MB 的下载大小限制。要创建此大小的游戏,您可能需要重构游戏逻辑。本节介绍了一些有助于优化游戏大小的工具和技术。
工具
以下工具列表可以帮助您确定哪些因素导致了您游戏的大小
- APK 分析器:提供已编译 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 可用后,它可以将其素材资源加载到游戏引擎中,并为玩家提供开始游戏所需的内容。
采用 UX 最佳实践
在配置您的游戏以支持即时体验后,添加以下各节中显示的逻辑以提供良好的用户体验。
支持 64 位架构
在 Google Play 上发布的应用程序需要支持 64 位架构。添加应用程序的 64 位版本可提供性能改进,并为您在仅支持 64 位硬件的设备上做好准备。了解有关 64 位支持的更多信息。
检查游戏是否正在运行即时体验
如果您的某些游戏逻辑取决于用户是否参与您的即时体验,请调用 isInstantApp()
方法。如果当前正在运行的进程是即时体验,此方法将返回 true
。
通过执行此检查,您可以确定您的应用是否需要在受限执行环境中运行,或者是否可以利用平台功能。
显示安装提示
如果您构建了试用版 Google Play 即时体验,游戏应在某个时候提示玩家将完整版安装到其设备上。为此,请使用 Google APIs for Android 中的 showInstallPrompt()
方法。
要了解有关何时以及如何提示玩家安装的更多信息,请参阅Google Play 免安装应用的 UX 最佳实践。
将数据传输到已安装的体验
如果玩家喜欢您的试用体验,他们可能会决定安装游戏的完整版。为了提供良好的用户体验,将玩家的进度从您的即时体验传输到游戏的完整版非常重要。
如果您的游戏指定 targetSandboxVersion
为 2
,则玩家的进度会自动传输到游戏的完整版。否则,您必须手动传输与玩家进度相关的数据。为此,请使用 Cookie API - 示例应用
其他资源
从这些其他资源中了解更多关于 Google Play 即时应用的信息
- Codelab:构建您的第一个即时应用
- 在现有应用中添加对 Google Play 即时应用的支持。
- Codelab:构建多功能即时应用
- 将多功能应用模块化。