GameActivity   Часть Android Game Development Kit.

GameActivity – это библиотека Jetpack, предназначенная для обработки в играх Android команд жизненного цикла приложений, событий ввода и текстового ввода в коде приложения на C/C++. GameActivity является прямым потомком NativeActivity и имеет похожую архитектуру:

alt_text

Как показано на диаграмме выше, GameActivity выполняет следующие функции:

  • Взаимодействие с фреймворком Android через компонент на стороне Java.
  • Передавать команды жизненного цикла приложения, события ввода и текст в нативную часть.
  • Моделирование исходного кода C/C++ в три логических компонента:
    • Функции JNI GameActivity, которые напрямую поддерживают функции Java GameActivity и ставят события в очередь в native_app_glue.
    • native_app_glue, который в основном работает в собственном нативном потоке (отличающемся от основного потока приложения) и выполняет задачи с помощью своего цикла обработки сообщений.
    • Код игры, который опрашивает и обрабатывает события, поставленные в очередь в native_app_glue, и выполняет код игры в потоке native_app_glue.

GameActivity позволяет сосредоточиться на разработке игры и не тратить много времени на код JNI.

Если вы уже знакомы с NativeActivity, основные различия между GameActivity и NativeActivity перечислены ниже.

  • GameActivity преобразуется в SurfaceView, что значительно упрощает взаимодействие игр с другими элементами интерфейса.
  • Для событий ввода с помощью сенсорного экрана и клавиатуры в GameActivity реализована совершенно новая реализация с интерфейсом android_input_buffer, отдельным от InputQueue, который использует NativeActivity.
  • GameActivity – это производный класс AppCompatActivity, который позволяет легко использовать другие компоненты Jetpack. ActionBar, Fragment и другие.
  • GameActivity добавляет функцию ввода текста, интегрируя библиотеку GameTextInput.
  • Приложения, созданные на основе GameActivity, должны содержать все три части кода C/C++ в одной библиотеке. С другой стороны, функции JNI NativeActivity являются частью фреймворка (всегда загружаются ОС). Поэтому в одну библиотеку должны быть встроены только код приложения на C/C++ и native_app_glue.
  • NativeActivity является частью платформы Android и выпускается в соответствии с ее циклом (обычно раз в год). GameActivity входит в библиотеку Jetpack, которая обновляется гораздо чаще (обычно раз в две недели), поэтому новые функции и исправления ошибок появляются быстрее.

Освобождение местоположений

Библиотека GameActivity доступна в следующих каналах:

Исходный код на C/C++ предоставляется во всех каналах обновления в формате Prefab. В версии 1.2.2 GameActivity в дистрибутив добавлена статическая библиотека. Начиная с этой версии мы рекомендуем использовать статическую библиотеку вместо исходного кода.

Содержимое библиотеки Jetpack

Библиотека Jetpack позволяет выпускать GameActivity в виде AAR-файла. В AAR входят следующие основные компоненты:

  • JAR-файл для кода Java.
  • Статическая библиотека 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/...). Исходный код на C/C++ можно найти, выполнив поиск по запросу prefab/modules/game-activity/include и выбрав расположение для нужной конечной версии.

Инструкции по интеграции с помощью библиотеки Jetpack приведены в статье Как начать работу с GameActivity.

Содержимое исходного кода AOSP

В AOSP всегда содержится самый новый исходный код. Следуйте инструкциям по сборке, чтобы создать собственные релизы или напрямую интегрировать источник в среду сборки. Исходный код C/C++ сохраняется в файловой структуре, похожей на библиотеку Jetpack.

Руководства по интеграции

Чтобы интегрировать GameActivity в свои приложения, следуйте инструкциям в этих руководствах:

Дополнительные ресурсы

Чтобы узнать больше о GameActivity, ознакомьтесь со следующими материалами:

Отзыв

Чтобы сообщить об ошибке или запросить новую функцию GameActivity, воспользуйтесь системой отслеживания ошибок GameActivity.