GameActivity Part of Android Game Development Kit.
GameActivity
is a Jetpack library designed
to assist Android games in processing app cycle commands, input events, and text
input in the application's C/C++ code. GameActivity
is a direct descendant of
NativeActivity
and shares a similar
architecture:
As illustrated in the above diagram, GameActivity
performs the following
functions:
- Interacting with Android framework through the Java-side component.
- Passing app cycle commands, input events, and input text to the native side.
- Modelling C/C++ source code into three logical components:
- GameActivity’s JNI functions, which directly support GameActivity’s Java
functionality and enqueue the events to
native_app_glue
. native_app_glue
, which runs mostly in its own native thread (different from the application’s main thread), and executes tasks with its looper.- The application's game code, which polls and processes the events queued
inside
native_app_glue
and executes game code within thenative_app_glue
thread.
- GameActivity’s JNI functions, which directly support GameActivity’s Java
functionality and enqueue the events to
With GameActivity
, you can focus on your core game development and avoid
spending excessive time dealing with the JNI code.
If you are already familiar with NativeActivity
, the major differences
between GameActivity
and NativeActivity
are as follows:
GameActivity
renders into aSurfaceView
, making it much easier for games to interact with other UI components.- For touch and key input events,
GameActivity
has a completely new implementation with theandroid_input_buffer
interface, separate from theInputQueue
thatNativeActivity
uses. GameActivity
is a derived class ofAppCompatActivity
, which lets you seamlessly use other Jetpack components.ActionBar
,Fragment
, and others are all available.GameActivity
adds text input functionality by integrating the GameTextInput library.- Apps derived from
GameActivity
are expected to build all three parts of C/C++ code into one library. On the other hand,NativeActivity
's JNI functions are a part of the framework (always loaded by OS). Hence, only thenative_app_glue
and application’s C/C++ code are expected to be built into one library. NativeActivity
is a part of Android framework and follows its release cycle (typically yearly).GameActivity
is a part of the Jetpack library, which has a much more frequent release cycle (typically biweekly); new features and bug fixes can arrive much more quickly.
Release locations
The GameActivity
library is available in the following channels:
- As a part of the Android Jetpack library (recommended)
- As a zip package, downloadable from the AGDK download page
- As AOSP source code
The C/C++ code is provided as source code in all release channels, using the Prefab format. GameActivity version 1.2.2 adds a static library to the distribution. Starting with this version and later, we recommend you use the static library instead of the source code.
Contents of Jetpack library and AGDK zip package
With the Jetpack library and AGDK zip package channels, GameActivity is released with an AAR. This AAR contains the following major components:
- A JAR file for Java code
- The C/C++static library
game-activity_static
is included with GameActivity version 1.2.2 and later. - C/C++ source code (under the
/prefab
folder)
The integration instructions linked to from this page assume that you can use
Prefab in your build system; otherwise, you can copy the source code packed
under the prefab/modules/game-activity/include
folder into your build system
and perform the necessary integration steps. A similar file structure exists for
the releases under androidx
for the Android Jetpack library; by default,
gradle unpacks AARs in its cache directory (~/.gradle/caches/...). You can find
the C/C++ source code by searching for prefab/modules/game-activity/include
and picking up the location under your intended release version.
For instructions on integrating using the Jetpack library, see Get started with GameActivity.
For the AGDK library zip package, follow these steps to get the C/C++ code:
- Unzip the downloaded package.
- In the unzipped package, unzip GameActivity-release.aar.
- Find and copy out all C/C++ source code under
prefab/modules/game-activity/include
, includes the following:game-activity
forGameActivity
related C/C++ codegame-text-input
forGameTextInput
related C/C++ code
Content of AOSP source code
AOSP always contains the most recent source code. Follow the build instructions to create your own releases or directly integrate the source into your build environment. The C/C++ source code is saved in a file structure similar to the ones for the Jetpack library and AGDK zip package.
Integration guides
Follow those guides to integrate GameActivity
into your applications:
Additional resources
To learn more about GameActivity
, see the following:
- GameActivity and AGDK release notes.
- Use GameTextInput in GameActivity.
- NativeActivity migration guide.
- GameActivity reference documentation.
- GameActivity implementation.
Feedback
To report bugs or request new features to GameActivity, use the GameActivity issue tracker.