在《创建您的第一个免安装应用》中说明的,让应用在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 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 最佳实践》。
将数据传输到已安装的体验
如果玩家喜欢您的试用版体验,他们可能会决定安装您的游戏的完整版本。为提供良好的用户体验,将玩家的进度从您的免安装体验传输到游戏的完整版本非常重要。
如果您的游戏指定了 targetSandboxVersion
为 2
,则玩家的进度会自动传输到游戏的完整版本。否则,您必须手动传输与玩家进度相关的数据。为此,请使用 Cookie API - 示例应用
其他资源
通过这些其他资源详细了解 Google Play 免安装体验
- Codelab:构建您的第一个免安装应用
- 在现有应用中添加对 Google Play 免安装体验的支持。
- Codelab:构建多功能免安装应用
- 模块化多功能应用。