Образцы

Примеры расширения для разработки игр для Android демонстрируют, как использовать ключевые функции расширения. В этом разделе описаны примеры и настройки, необходимые для их запуска.

На странице загрузок доступны следующие образцы:

  • HelloJNI: вводный проект.
  • Endless-Tunnel: проект только для Android.
  • Чайник: кроссплатформенный проект для Windows и Android.
  • AssemblyCode-Link-Objects: проект шаблона, содержащий исходный код сборки.

Прежде чем начать

  • Установите расширение для разработки игр для Android и примеры. Подробности смотрите в кратком руководстве . В этом разделе также описывается, как создать и запустить образец, и в качестве примера используется версия Teapot для Android.

  • В руководстве по настройке проекта описывается, как настроить параметры проекта, использующего расширение, например добавление платформы Android и APK.

ПриветJNI

Пример HelloJNI — это простой проект, который отображает сообщение «Привет от JNI» в окне приложения. В проекте используется разный набор исходного кода для Windows и Android.

  • Каталог исходного кода Android и сценариев сборки Gradle: HelloJNI\AndroidPackaging.
  • Исходный код Windows и каталог проекта Visual Studio: HelloJNI.

При сборке проекта Visual Studio передает следующие параметры в файл build.gradle уровня приложения. Вы можете изменить эти настройки, изменив сценарии сборки Gradle .

  • MSBUILD_NDK_VERSION
  • MSBUILD_MIN_SDK_VERSION
  • MSBUILD_JNI_LIBS_SRC_DIR
  • MSBUILD_ANDROID_OUTPUT_APK_NAME
  • MSBUILD_ANDROID_GRADLE_BUILD_OUTPUT_DIR

Чтобы настроить и запустить образец:

  1. В Visual Studio откройте и создайте образец HelloJNI.
  2. Добавьте платформу Android Arm64-v8a . Дополнительную информацию см. в разделе Добавление платформы Android .
  3. Добавьте элемент Android APK на новую платформу.
  4. Скомпилируйте проект.
  5. Добавьте следующие платформы Android, а затем добавьте к каждой из них элемент Android APK: Android-armeabi-v7a , Android-x86 и Android-x86_64 .
  6. Создайте и запустите образец.

Бесконечный туннель

Образец Endless-Tunnel — это игра для Android, в которой игрок собирает белые кубики, пытаясь достичь конца туннеля. Он был портирован из образца OpenGL в репозитории Android NDK на Github . В образце не указана версия игры для Windows.

В образце уже настроены параметры и платформы Android, поэтому вы можете собрать и запустить проект в Visual Studio без каких-либо изменений. Когда вы открываете решение, обозреватель решений отображает следующие модули:

  • бесконечный туннель: модуль приложения, отображающий логику игры.
  • glm: снимок репозитория OpenGL Math , построенный как статическая библиотека.
  • native_app_glue: оболочка NDK, которая взаимодействует с объектом NativeActivity .

Чайник

В примере Teapot показан классический чайник, визуализированный с помощью OpenGL ES и перенесенный в расширение разработки игр для Android, чтобы продемонстрировать следующие функции:

  • Разработка кросс-платформенного проекта: вы можете создать образец Teapot для Windows и Android.
  • Использование пользовательской упаковки Android: сценарии сборки Gradle были перемещены в корневой каталог примера, где находится файл Teapot.sln .
  • Пользовательские конфигурации Android, демонстрирующие использование Address Sanitizer (ASan) и Hardware Address Sanitizer (HWAsan).

Реализация примера Teapot разбита на несколько частей, что типично для крупных кроссплатформенных приложений и игр:

  • Модуль GameApplication : определяет действия пользователя и состояния приложения, например, поворот пользователем чайника или обновление статистики приложения.
  • Модуль GameEngine : реализует основной модуль рендеринга.

Чтобы настроить образец и запустить его на Android, смотрите краткое руководство . Чтобы настроить образец и запустить его в Windows:

  1. Установите ГЛЕВ:
    1. Загрузите и разархивируйте GLEW .
    2. Скопируйте двоичные файлы из $your-glew-directory\bin\Release\x64 в %SystemRoot%\system32 .
  2. Установите фриглут:
    1. Загрузите и разархивируйте файл freeglut .
    2. Скопируйте $your-freeglut-directory\bin\x86\freeglut.dll в %SystemRoot%\system32 .
  3. Добавьте зависимости проекта freeglut:
    1. Откройте Teapot.sln в Visual Studio.
    2. В меню выберите «Отладка» > «x64» > «Локальный отладчик Windows» .
    3. В обозревателе решений щелкните правой кнопкой мыши GameApplication и выберите «Свойства» > C/C++ > «Общие» > «Дополнительные каталоги включения» .
    4. Добавьте в путь $your-freeglut-dir\include .
      Снимок экрана: диалоговое окно «Дополнительные каталоги включения».
    5. Нажмите «ОК» .
    6. Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
    7. Добавьте в путь $your-freeglut-dir\lib\x64 . Снимок экрана: диалоговое окно «Дополнительные каталоги библиотеки».
    8. Нажмите «ОК» .
    9. Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
    10. Добавьте в путь freeglut.lib .
    11. Нажмите «ОК» .
  4. Добавьте зависимости проекта GLEW:
    1. На панели обозревателя решений щелкните правой кнопкой мыши GameApplication и выберите «Свойства» > C/C++ > «Общие» > «Дополнительные каталоги включения» .
    2. Добавьте в путь $your-glew-dir\include .
    3. Нажмите «ОК» .
    4. Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
    5. Добавьте в путь $your-glew-dir\lib\Release\x86 .
    6. Нажмите «ОК» .
    7. Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
    8. Добавьте glew32.lib в путь.
    9. Нажмите «ОК» .
  5. Запустите образец в Windows:
    1. На панели инструментов Visual Studio нажмите кнопку «Запустить локальный отладчик Windows» .
    2. Образец должен выглядеть следующим образом:
      Снимок экрана примера Teapot, работающего в Windows.

Это шаблонный проект, который демонстрирует, как создать собственную библиотеку Android из сборки и исходного кода C/C++. Это основные компоненты:

  • AssemblyCode-Link-Objects : основная собственная библиотека Android, созданная на основе C++ и исходного кода сборки.
  • StaticLib : вспомогательная статическая библиотека, которая экспортирует функцию from_static_lib_assembly_code_as .

Проект поддерживает несколько архитектур. Каждая поддерживаемая архитектура имеет свои собственные исходные файлы, реализующие функции, экспортированные из StaticLib . Вам следует включать только исходные файлы сборки для платформ, которые вы создаете. Этот проект включает файлы сборки в сборки с использованием пользовательских инструментов сборки .

Чтобы настроить и построить образец:

  1. В Visual Studio убедитесь, что для файлов сборки настроены пользовательские инструменты сборки:
    1. В обозревателе решений щелкните правой кнопкой мыши файл сборки и выберите «Свойства» . Откроется диалоговое окно «Страницы свойств» файла.
    2. Выберите конфигурацию и платформу, например Все конфигурации для Android-arm64-v8a .
    3. Убедитесь, что для параметра Общие > Исключить из сборки установлено значение Нет .
    4. Убедитесь, что для параметра «Общие» > «Тип элемента» установлено значение «Пользовательский инструмент сборки» .
    5. Нажмите «Применить» , если есть изменения, которые нужно применить.
    6. Убедитесь, что для параметра Свойства конфигурации > Пользовательские инструменты сборки > Командная строка : установлено значение $(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath) . NDK включает отдельный ассемблер для каждой архитектуры ЦП, а $(AsToolExe) соответствует правильному ассемблеру. В этом примере используется набор инструментов NDK для создания проектов Android x86 и x86_64. Если вы хотите использовать yasm для платформы Android x86_64, используйте вместо этого $(YasmToolExe) .
    7. Убедитесь, что для параметра Configuration Properties > Custom Build Tools > Outputs : установлено значение $(IntDir)%(FileName).o . Эту строку необходимо включить в настройку командной строки .
    8. Убедитесь, что для параметра «Свойства конфигурации» > «Инструменты пользовательской сборки» > «Связать объекты» установлено значение Yes .

    Например, настройки Android-arm64-v8a должны выглядеть примерно так, как показано на следующем снимке экрана:

    Снимок экрана: страница свойств пользовательских инструментов сборки.
  2. Постройте проект. При этом создается файл libAssmeblyCodeLinkObjects.so :
    1. Откройте файл AssemblyCode-Link-Objects.sln .
    2. В меню нажмите «Создать» > «Построить решение» .
  3. Чтобы убедиться, что функции правильно экспортированы в библиотеку Android, используйте инструмент nm.exe NDK:
    1. В командной строке перейдите в каталог с образцами.
    2. Перейдите в папку библиотеки Android, созданную вашей сборкой. Местоположение по умолчанию аналогично $sample_dir\$solution_configuration\$solution_platform\$platform и $sample_dir\Debug\Android-arm64-v8a\arm64-v8a для платформы Arm64-v8a .
    3. Убедитесь, что раздел экспортированного символа содержит функции, выполнив следующую команду:
        \ndk\toolschains\llvm\prebuilt\windows-x86_64\aarch64-linux-android\bin\nm.exe --defined-only \Debug\Android-arm64-v8a\arm64-v8a\libAssmeblyCodeLinkObjects.so

      В выводе вы должны увидеть список символов, который включает следующее:

         T from_shared_object_assembly_code_as
         T from_static_lib_assembly_code_as