GameActivity Android Game Development Kit 的一部分。
GameActivity
是一个 Jetpack 库,旨在帮助 Android 游戏在应用的 C/C++ 代码中处理应用周期命令、输入事件和文本输入。GameActivity
是 NativeActivity
的直接后代,具有类似的架构:
如上图所示,GameActivity
执行以下功能:
- 通过 Java 端组件同 Android 框架进行交互。
- 将应用周期命令、输入事件和输入文本传递到原生端。
- 将 C/C++ 源代码建模为三个逻辑组件:
- GameActivity 的 JNI 函数,直接支持 GameActivity 的 Java 功能,并会将事件加入
native_app_glue
中的队列。 native_app_glue
,主要在自己的原生线程(不同于应用的主线程)中运行,并且使用其 Looper 执行任务。- 应用的游戏代码,负责轮询和处理在
native_app_glue
内排队的事件,并在native_app_glue
线程中执行游戏代码。
- GameActivity 的 JNI 函数,直接支持 GameActivity 的 Java 功能,并会将事件加入
借助 GameActivity
,您可以专注于核心游戏开发,并避免花费过多时间处理 JNI 代码。
如果您已熟悉 NativeActivity
,GameActivity
和 NativeActivity
之间的主要区别如下:
GameActivity
会渲染到SurfaceView
中,从而可大幅简化游戏与其他界面组件的交互。- 对于触摸和按键输入事件,
GameActivity
具有全新的实现(采用android_input_buffer
接口),并与NativeActivity
使用的InputQueue
分离开来。 GameActivity
是AppCompatActivity
的派生类,可让您无缝使用其他 Jetpack 组件。ActionBar
、Fragment
等均可用。GameActivity
通过集成 GameTextInput 库来添加文本输入功能。- 派生自
GameActivity
的应用应将 C/C++ 代码的所有三个部分构建到一个库中。另一方面,NativeActivity
的 JNI 函数是框架的一部分(始终由操作系统加载)。因此,应该只将native_app_glue
和应用的 C/C++ 代码构建到一个库中。 NativeActivity
是 Android 框架的一部分,并遵从该框架的发布周期(通常是一年一次)。GameActivity
是 Jetpack 库的一部分,发布频率要高得多(通常是两周一次);新功能和 bug 修复的发布频率可以更高。
发布位置
GameActivity
库通过以下渠道提供:
- 作为 Android Jetpack 库的一部分(推荐)
- zip 软件包(可从 AGDK 下载页面下载)
- 使用 AOSP 源代码
在所有发布渠道中,C/C++ 代码都是以源代码的形式提供,采用 Prefab 格式。GameActivity 版本 1.2.2 向发行版添加了静态库。 在这个版本及更高版本中,建议您开始使用静态库(别再使用源代码了)。
Jetpack 库和 AGDK zip 软件包的内容
通过 Jetpack 库和 AGDK zip 软件包渠道发布 GameActivity 时会搭配一个 AAR。此 AAR 包含以下主要组件:
- 用于 Java 代码的 JAR 文件
- GameActivity 1.2.2 版及更高版本随附 C/C++ 静态库
game-activity_static
。 - C/C++ 源代码(在
/prefab
文件夹下)
本页面所链接的集成说明假定您可以在构建系统中使用 Prefab;如果无法使用,您可以将 prefab/modules/game-activity/include
文件夹下打包的源代码复制到构建系统中,然后执行必要的集成步骤。Android Jetpack 库 androidx
所提供的版本也存在类似的文件结构;默认情况下,Gradle 会在其缓存目录 (~/.gradle/caches/...) 中解压缩 AAR。您只需搜索 prefab/modules/game-activity/include
,然后选择所需发布版本下的位置,便可找到 C/C++ 源代码。
如需了解如何使用 Jetpack 库进行集成,请参阅开始使用 GameActivity。
对于 AGDK 库 zip 软件包,请按以下步骤操作,以获取 C/C++ 代码:
- 解压缩下载的软件包。
- 在解压缩的软件包中,解压缩 GameActivity-release.aar。
- 在
prefab/modules/game-activity/include
下找到并复制所有 C/C++ 源代码,其中包含以下内容:game-activity
,适用于GameActivity
相关的 C/C++ 代码game-text-input
,适用于GameTextInput
相关的 C/C++ 代码
AOSP 源代码的内容
AOSP 始终包含最新的源代码。请按照构建说明创建自己的版本,或直接将源代码集成到构建环境中。C/C++ 源代码会以与 Jetpack 库和 AGDK zip 软件包类似的文件结构保存。
集成指南
请按照以下指南将 GameActivity
集成到您的应用中:
其他资源
如需详细了解 GameActivity
,请参阅以下内容:
- GameActivity 和 AGDK 版本说明。
- 在 GameActivity 中使用 GameTextInput。
- NativeActivity 迁移指南。
- GameActivity 参考文档。
- GameActivity 实现。
反馈
如需向 GameActivity 报告 bug 或请求新功能,请使用 GameActivity 问题跟踪器。