GameActivity   属于 Android 游戏开发套件 的一部分。

GameActivity 是一个 Jetpack 库,旨在帮助 Android 游戏在应用程序的 C/C++ 代码中处理应用周期命令、输入事件和文本输入。GameActivityNativeActivity 的直接后代,并共享类似的架构

alt_text

如上图所示,GameActivity 执行以下功能

  • 通过 Java 端组件与 Android 框架交互。
  • 将应用周期命令、输入事件和输入文本传递到原生端。
  • 将 C/C++ 源代码建模为三个逻辑组件
    • GameActivity 的 JNI 函数,直接支持 GameActivity 的 Java 功能并将事件排队到 native_app_glue
    • native_app_glue,主要在其自己的原生线程(与应用程序的主线程不同)中运行,并使用其 looper 执行任务。
    • 应用程序的游戏代码,它轮询并处理 native_app_glue 中排队的事件,并在 native_app_glue 线程中执行游戏代码。

使用 GameActivity,您可以专注于核心游戏开发,避免花费过多时间处理 JNI 代码。

如果您已经熟悉 NativeActivity,则 GameActivityNativeActivity 之间的主要区别如下

  • GameActivity 渲染到 SurfaceView 中,使游戏更容易与其他 UI 组件交互。
  • 对于触摸和按键输入事件,GameActivity 使用 android_input_buffer 接口具有全新的实现,与 NativeActivity 使用的 InputQueue 分开。
  • GameActivityAppCompatActivity 的派生类,使您可以无缝使用其他 Jetpack 组件。ActionBarFragment 等都可用。
  • GameActivity 通过集成 GameTextInput 库 添加了文本输入功能。
  • GameActivity 派生的应用预计会将 C/C++ 代码的所有三个部分构建到一个库中。另一方面,NativeActivity 的 JNI 函数是框架的一部分(始终由操作系统加载)。因此,仅 native_app_glue 和应用程序的 C/C++ 代码预计会构建到一个库中。
  • NativeActivity 是 Android 框架的一部分,并遵循其发布周期(通常为每年一次)。GameActivity 是 Jetpack 库的一部分,Jetpack 库的发布周期要频繁得多(通常为每两周一次);新功能和错误修复可以更快地到来。

发布位置

可以在以下渠道中找到 GameActivity

C/C++ 代码以所有发布渠道中的源代码形式提供,使用 预制件 格式。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 文件夹下的源代码复制到您的构建系统中,并执行必要的集成步骤。Android Jetpack 库的 androidx 下的版本也存在类似的文件结构;默认情况下,gradle 会将其缓存目录 (~/.gradle/caches/…) 中解压 AAR。您可以搜索 prefab/modules/game-activity/include 并选择您目标版本下的位置来找到 C/C++ 源代码。

有关使用 Jetpack 库集成的说明,请参阅 GameActivity 入门

对于 AGDK 库 zip 包,请按照以下步骤获取 C/C++ 代码

  1. 解压缩下载的包。
  2. 在解压缩的包中,解压缩 GameActivity-release.aar。
  3. 找到并复制 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 的新功能,请使用 GameActivity 问题跟踪器