Примеры расширения для разработки игр для 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
Чтобы настроить и запустить образец:
- В Visual Studio откройте и создайте образец HelloJNI.
- Добавьте платформу Android Arm64-v8a . Дополнительную информацию см. в разделе Добавление платформы Android .
- Добавьте элемент Android APK на новую платформу.
- Скомпилируйте проект.
- Добавьте следующие платформы Android, а затем добавьте к каждой из них элемент Android APK: Android-armeabi-v7a , Android-x86 и Android-x86_64 .
- Создайте и запустите образец.
Бесконечный туннель
Образец 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:
- Установите ГЛЕВ:
- Загрузите и разархивируйте GLEW .
- Скопируйте двоичные файлы из
$your-glew-directory\bin\Release\x64
в%SystemRoot%\system32
.
- Установите фриглут:
- Загрузите и разархивируйте файл freeglut .
- Скопируйте
$your-freeglut-directory\bin\x86\freeglut.dll
в%SystemRoot%\system32
.
- Добавьте зависимости проекта freeglut:
- Откройте
Teapot.sln
в Visual Studio. - В меню выберите «Отладка» > «x64» > «Локальный отладчик Windows» .
- В обозревателе решений щелкните правой кнопкой мыши GameApplication и выберите «Свойства» > C/C++ > «Общие» > «Дополнительные каталоги включения» .
- Добавьте в путь
$your-freeglut-dir\include
. - Нажмите «ОК» .
- Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
- Добавьте в путь
$your-freeglut-dir\lib\x64
. - Нажмите «ОК» .
- Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
- Добавьте в путь
freeglut.lib
. - Нажмите «ОК» .
- Откройте
- Добавьте зависимости проекта GLEW:
- На панели обозревателя решений щелкните правой кнопкой мыши GameApplication и выберите «Свойства» > C/C++ > «Общие» > «Дополнительные каталоги включения» .
- Добавьте в путь
$your-glew-dir\include
. - Нажмите «ОК» .
- Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
- Добавьте в путь
$your-glew-dir\lib\Release\x86
. - Нажмите «ОК» .
- Выберите «Компоновщик» > «Основные» > «Дополнительные каталоги библиотеки» .
- Добавьте
glew32.lib
в путь. - Нажмите «ОК» .
- Запустите образец в Windows:
- На панели инструментов Visual Studio нажмите кнопку «Запустить локальный отладчик Windows» .
- Образец должен выглядеть следующим образом:
AssemblyCode-Link-Objects
Это шаблонный проект, который демонстрирует, как создать собственную библиотеку Android из сборки и исходного кода C/C++. Это основные компоненты:
-
AssemblyCode-Link-Objects
: основная собственная библиотека Android, созданная на основе C++ и исходного кода сборки. -
StaticLib
: вспомогательная статическая библиотека, которая экспортирует функциюfrom_static_lib_assembly_code_as
.
Проект поддерживает несколько архитектур. Каждая поддерживаемая архитектура имеет свои собственные исходные файлы, реализующие функции, экспортированные из StaticLib
. Вам следует включать только исходные файлы сборки для платформ, которые вы создаете. Этот проект включает файлы сборки в сборки с использованием пользовательских инструментов сборки .
Чтобы настроить и построить образец:
- В Visual Studio убедитесь, что для файлов сборки настроены пользовательские инструменты сборки:
- В обозревателе решений щелкните правой кнопкой мыши файл сборки и выберите «Свойства» . Откроется диалоговое окно «Страницы свойств» файла.
- Выберите конфигурацию и платформу, например Все конфигурации для Android-arm64-v8a .
- Убедитесь, что для параметра Общие > Исключить из сборки установлено значение Нет .
- Убедитесь, что для параметра «Общие» > «Тип элемента» установлено значение «Пользовательский инструмент сборки» .
- Нажмите «Применить» , если есть изменения, которые нужно применить.
- Убедитесь, что для параметра Свойства конфигурации > Пользовательские инструменты сборки > Командная строка : установлено значение
$(AsToolExe) -o "$(IntDir)%(FileName).o" %(FullPath)
. NDK включает отдельный ассемблер для каждой архитектуры ЦП, а$(AsToolExe)
соответствует правильному ассемблеру. В этом примере используется набор инструментов NDK для создания проектов Android x86 и x86_64. Если вы хотите использовать yasm для платформы Android x86_64, используйте вместо этого$(YasmToolExe)
. - Убедитесь, что для параметра Configuration Properties > Custom Build Tools > Outputs : установлено значение
$(IntDir)%(FileName).o
. Эту строку необходимо включить в настройку командной строки . - Убедитесь, что для параметра «Свойства конфигурации» > «Инструменты пользовательской сборки» > «Связать объекты» установлено значение
Yes
.
Например, настройки Android-arm64-v8a должны выглядеть примерно так, как показано на следующем снимке экрана:
- Постройте проект. При этом создается файл
libAssmeblyCodeLinkObjects.so
:- Откройте файл
AssemblyCode-Link-Objects.sln
. - В меню нажмите «Создать» > «Построить решение» .
- Откройте файл
- Чтобы убедиться, что функции правильно экспортированы в библиотеку Android, используйте инструмент nm.exe NDK:
- В командной строке перейдите в каталог с образцами.
- Перейдите в папку библиотеки Android, созданную вашей сборкой. Местоположение по умолчанию аналогично
$sample_dir\$solution_configuration\$solution_platform\$platform
и$sample_dir\Debug\Android-arm64-v8a\arm64-v8a
для платформы Arm64-v8a . - Убедитесь, что раздел экспортированного символа содержит функции, выполнив следующую команду:
…\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