GameActivity 是 Android 游戏开发套件 的一部分。
GameActivity
是一个 Jetpack 库,旨在帮助 Android 游戏在应用程序的 C/C++ 代码中处理应用程序周期命令、输入事件和文本输入。 GameActivity
是 NativeActivity
的直接后代,并共享类似的架构
如上图所示,GameActivity
执行以下功能
- 通过 Java 端组件与 Android 框架交互。
- 将应用程序周期命令、输入事件和输入文本传递到本地端。
- 将 C/C++ 源代码建模为三个逻辑组件
- GameActivity 的 JNI 函数,直接支持 GameActivity 的 Java 功能并将事件排队到
native_app_glue
中。 native_app_glue
,它主要在其自己的本地线程(不同于应用程序的主线程)中运行,并使用其循环执行任务。- 应用程序的游戏代码,它轮询和处理排队在
native_app_glue
中的事件,并在native_app_glue
线程中执行游戏代码。
- GameActivity 的 JNI 函数,直接支持 GameActivity 的 Java 功能并将事件排队到
使用 GameActivity
,您可以专注于核心游戏开发,避免在处理 JNI 代码上花费过多的时间。
如果您已经熟悉 NativeActivity
,那么 GameActivity
和 NativeActivity
之间的主要区别如下
GameActivity
渲染到SurfaceView
中,这使得游戏更容易与其他 UI 组件交互。- 对于触摸和按键输入事件,
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 库的一部分,该库的发布周期要频繁得多(通常为两周);新功能和错误修复可以更快地到达。
发布位置
GameActivity
库可在以下渠道获取
- 作为 Android Jetpack 库 的一部分(推荐)
- 作为 zip 包,可从 AGDK 下载页面 下载
- 作为 AOSP 源代码
C/C++ 代码以所有发布渠道中的源代码形式提供,使用 Prefab 格式。GameActivity 1.2.2 版添加了静态库到发行版中。从该版本开始,我们建议您使用静态库而不是源代码。
Jetpack 库和 AGDK zip 包的内容
使用 Jetpack 库和 AGDK zip 包渠道,GameActivity 会与 AAR 一起发布。此 AAR 包含以下主要组件
- 用于 Java 代码的 JAR 文件
- C/C++ 静态库
game-activity_static
包含在 GameActivity 1.2.2 版及更高版本中。 - C/C++ 源代码(在
/prefab
文件夹下)
从本页链接的集成说明假设您可以使用 Prefab 在您的构建系统中;否则,您可以将打包在 prefab/modules/game-activity/include
文件夹下的源代码复制到您的构建系统中,并执行必要的集成步骤。类似的文件结构存在于 androidx
下的 Android Jetpack 库的发布中;默认情况下,gradle 将 AAR 解压缩到其缓存目录 (~/.gradle/caches/...) 中。您可以通过搜索 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 的错误或请求新功能,请使用 GameActivity 问题跟踪器。