Integrating ozz-animation Shared Libraries for Android (NDK & CMake) Интеграция динамических библиотек ozz-animation для Android (NDK и CMake)
A step-by-step guide to configuring and integrating the ozz-animation 3D animation shared libraries (.so) in your CMake projects for Android using NDK.
Пошаговое руководство по настройке и интеграции динамических библиотек 3D-анимации ozz-animation (.so) в проекты CMake для Android с использованием NDK.
Step 1: Create Project Directory Шаг 1: Создание директории проекта
Create a workspace folder and a new directory for your ozz-animation Android test project: Создайте рабочую папку для проектов и новую директорию для вашего тестового Android-проекта ozz-animation:
Windows (Command Prompt / PowerShell)
mkdir C:\projects\ozz-android-test
cd C:\projects\ozz-android-test
Step 2: Create Source Files (main.cpp & CMakeLists.txt) Шаг 2: Создание исходных файлов (main.cpp и CMakeLists.txt)
Create the source files in your project directory: Создайте исходные файлы в папке проекта:
Windows (Terminal / Notepad)
notepad main.cpp
notepad CMakeLists.txt
1. File Contents for main.cpp 1. Содержимое файла main.cpp
#include <iostream>
#include <ozz/base/maths/vec_float.h>
int main() {
ozz::math::Float3 v1(1.0f, 2.0f, 3.0f);
ozz::math::Float3 v2(4.0f, 5.0f, 6.0f);
ozz::math::Float3 result = v1 + v2;
std::cout << "Result vector: [" << result.x << ", " << result.y << ", " << result.z << "]" << std::endl;
std::cout << "Hello, ozz-animation from Android!" << std::endl;
return 0;
}
2. File Contents for CMakeLists.txt 2. Содержимое файла CMakeLists.txt
Directly links the compiled ozz-animation shared libraries (libozz_base.so, libozz_animation.so, etc.) and the Android log library:
Напрямую подключает скомпилированные динамические библиотеки ozz-animation (libozz_base.so, libozz_animation.so и др.) и системную библиотеку логирования Android:
cmake_minimum_required(VERSION 3.21)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
project(ozz-android-test CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# -----------------------------------------------------------------------------
# Library Paths for Android
# -----------------------------------------------------------------------------
set(OZZ_DIR "C:/libs/ozz-animation-0.17.0-android/arm64-v8a")
# -----------------------------------------------------------------------------
# Define Project Source Files
# -----------------------------------------------------------------------------
set(PROJECT_SOURCES
main.cpp
)
# -----------------------------------------------------------------------------
# Declare Target Type & Sources
# -----------------------------------------------------------------------------
add_executable(app)
target_sources(app PRIVATE ${PROJECT_SOURCES})
target_include_directories(app PRIVATE
${OZZ_DIR}/include
)
# -----------------------------------------------------------------------------
# Link Libraries
# -----------------------------------------------------------------------------
target_link_libraries(app PRIVATE
# Ozz-animation shared libraries (.so)
${OZZ_DIR}/lib/libozz_animation.so
${OZZ_DIR}/lib/libozz_animation_offline.so
${OZZ_DIR}/lib/libozz_geometry.so
${OZZ_DIR}/lib/libozz_options.so
${OZZ_DIR}/lib/libozz_base.so
log
)
Step 3: Create Build & Execution Scripts Шаг 3: Создание скриптов сборки и запуска
Create batch scripts to configure, compile, and execute the test on an Android device or emulator via ADB: Создайте пакетные bat-скрипты для конфигурации, компиляции и запуска теста на Android-устройстве или эмуляторе через ADB:
Windows (Batch Scripts)
config-android.bat
@echo off
set NDK=H:/AndroidSDK/ndk/28.2.13676358
cmake -G "MinGW Makefiles" ^
-DCMAKE_TOOLCHAIN_FILE=%NDK%/build/cmake/android.toolchain.cmake ^
-DANDROID_ABI=arm64-v8a ^
-DANDROID_PLATFORM=android-21 ^
-DCMAKE_BUILD_TYPE=Release ^
-S . -B dist/android
build-android.bat
@echo off
cmake --build dist/android --config Release --parallel
run-android.bat
@echo off
set ADB=H:/AndroidSDK/platform-tools/adb.exe
set DEVICE_DIR=/data/local/tmp/ozz-test
set OZZ_LIB_DIR=C:/libs/ozz-animation-0.17.0-android/arm64-v8a/lib
echo [*] Creating target directory on device...
%ADB% shell "mkdir -p %DEVICE_DIR%"
echo [*] Pushing executable and shared libraries...
%ADB% push dist/android/app %DEVICE_DIR%/
%ADB% push %OZZ_LIB_DIR%/libozz_animation.so %DEVICE_DIR%/
%ADB% push %OZZ_LIB_DIR%/libozz_animation_offline.so %DEVICE_DIR%/
%ADB% push %OZZ_LIB_DIR%/libozz_geometry.so %DEVICE_DIR%/
%ADB% push %OZZ_LIB_DIR%/libozz_options.so %DEVICE_DIR%/
%ADB% push %OZZ_LIB_DIR%/libozz_base.so %DEVICE_DIR%/
echo [*] Setting permissions and executing...
%ADB% shell "chmod +x %DEVICE_DIR%/app"
%ADB% shell "export LD_LIBRARY_PATH=%DEVICE_DIR%:$LD_LIBRARY_PATH && %DEVICE_DIR%/app"
Make sure an Android device or emulator is connected (verify with adb devices), then run the scripts sequentially in Command Prompt:
Убедитесь, что Android-устройство или эмулятор подключены (проверьте с помощью adb devices), затем последовательно запустите скрипты в командной строке:
config-android.bat
build-android.bat
run-android.bat
Step 4: Expected Output Шаг 4: Ожидаемый результат
After running run-android.bat, the executable will resolve the dynamic libraries and print the vector math result in your terminal:
После запуска run-android.bat исполняемый файл свяжет динамические библиотеки и выведет результат вычисления векторов в терминал:
Result vector: [5, 7, 9]
Hello, ozz-animation from Android!
Step 5: Convert glTF / GLB to .ozz Format (gltf2ozz) Шаг 5: Конвертация glTF / GLB в формат .ozz (gltf2ozz)
To convert a 3D model (glTF / GLB) containing a skeleton and animations into runtime-ready binary .ozz files, run the gltf2ozz command-line tool with a JSON configuration:
Чтобы преобразовать 3D-модель (glTF / GLB), содержащую скелет и анимации, в готовые к загрузке бинарные файлы .ozz, выполните утилиту gltf2ozz с JSON-конфигурацией:
gltf2ozz --file="scene.glb" --config="{\"skeleton\":{\"filename\":\"skeleton.ozz\"},\"animations\":[{\"clip\":\"*\",\"filename\":\"animation.ozz\"}]}"
This exports the model hierarchy into skeleton.ozz and all matching animation clips into animation.ozz.
Эта команда экспортирует иерархию костей в skeleton.ozz, а все подходящие анимационные клипы — в animation.ozz.
Support My Work Поддержать проект
If these tutorials helped you, consider buying me a coffee! Если эти туториалы вам помогли, вы можете поддержать автора.
Sberbank (Russia only) Сбербанк (только для РФ)
Direct transfer via phone number (Russia only) Перевод по номеру телефона (только для РФ)
USDT TRC20
Support via Cryptocurrency Поддержка криптовалютой