GameActivity   Android Game Development Kit 提供的一項工具

GameActivity 是 Jetpack 程式庫,旨在協助 Android 遊戲處理應用程式 C/C++ 程式碼中的應用程式週期指令、輸入事件和文字輸入內容。GameActivityNativeActivity 的直接子系,具有相似的架構:

alt_text

如上圖所示,GameActivity 會執行下列函式:

  • 透過 Java 端元件與 Android 架構互動。
  • 將應用程式週期指令、輸入事件和輸入文字傳遞至原生端。
  • 將 C/C++ 原始碼建模為三個邏輯元件:
    • GameActivity 的 JNI 函式,該函式直接支援 GameActivity 的 Java 功能,並將事件加入 native_app_glue 佇列。
    • native_app_glue 主要在其原生執行緒 (與應用程式的主要執行緒不同) 中執行,並透過其循環器執行工作。
    • 應用程式的遊戲程式碼會輪詢並處理在 native_app_glue 中加入佇列的事件,並在 native_app_glue 執行緒中執行遊戲程式碼。

使用 GameActivity 時,您可以專注於核心遊戲開發,避免花費太多時間處理 JNI 程式碼。

如果您已經熟悉 NativeActivityGameActivityNativeActivity 之間的主要差異如下:

  • GameActivity 會轉譯為 SurfaceView,讓遊戲更容易與其他 UI 元件互動。
  • 如果是觸控和按鍵輸入事件,不同於 NativeActivity 使用的 InputQueueGameActivity 具有包含 android_input_buffer 介面的全新實作。
  • GameActivity 是衍生的 AppCompatActivity 類別,可讓您流暢地使用其他 Jetpack 元件。ActionBarFragment 等均可使用。
  • GameActivity 整合 GameTextInput Library 來新增文字輸入功能。
  • GameActivity 衍生的應用程式預期會將 C/C++ 程式碼的三個部分建構為一個程式庫。另一方面,NativeActivity 的 JNI 函式屬於架構的一部分 (一律由 OS 載入)。因此,只有 native_app_glue 和應用程式的 C/C++ 程式碼會建構在同一個程式庫中。
  • NativeActivity 屬於 Android 架構的一部分,並且遵循發布週期 (通常為每年一次)。GameActivity 是 Jetpack 程式庫的一部分,其具有更頻繁的發布週期 (通常為每兩週一次);推出新功能和錯誤修正的速度更快。

發布地區

您可以藉由以下管道取得 GameActivity 程式庫:

所有發布版本的原始碼皆可提供 C/C++ 程式碼,程式碼使用 Prefab 格式。

Jetpack 程式庫和 AGDK zip 套件內容

在 Jetpack 程式庫和 AGDK zip 套件等管道發布 GameActivity 時會搭配一個 AAR。這個 AAR 內含以下主要元件:

  • Java 程式碼用的 JAR 檔案
  • 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++ 原始碼,包括以下內容:
    • GameActivity 相關 C/C++ 程式碼為 game-activity
    • GameTextInput 相關 C/C++ 程式碼為 game-text-input

Android 開放原始碼計畫的原始碼內容

Android 開放原始碼計畫一律都會內附最新版的原始碼。請按照建構說明建立自己的版本,或直接把原始碼整合到建構環境內。C/C++ 原始碼會按照 Jetpack 程式庫和 AGDK zip 套件的檔案結構進行儲存。

整合指南

請按照下列指南,將 GameActivity 整合至您的應用程式:

參考資料

如要進一步瞭解 GameActivity,請參閱以下說明:

意見回饋

如要向 GameActivity 回報錯誤或要求新功能,請使用 GameActivity Issue Tracker