Одной из таких библиотек является
Итак, покопавшись на официальном сайте, в
1. Для начала нам потребуется установить свежие версии
2. Далее, необходимо определиться с директориями, куда мы поместим исходный код OpenSceneGraph, объектные файлы библиотек, полученные в результате его сборки и собственно наш проект-болванку, на моей машине эти пути имеют следующий вид:
Код
D:\programs\Android\android-ndk-r13 - корневой каталог Android NDK
D:\programs\Android\sdk - корневой каталог Android SDK
D:\projects\OpenSceneGraph - папка с исходным кодом OpenSceneGraph
D:\projects\OpenSceneGraph\build-android - каталог сборки в который будут сгенерированы сборочные скрипты
D:\projects\OpenSceneGraph\osg-android - каталог установки, в который будут скопированы заголовочные файлы и скомпилированные файлы библиотек
D:\programs\Android\sdk - корневой каталог Android SDK
D:\projects\OpenSceneGraph - папка с исходным кодом OpenSceneGraph
D:\projects\OpenSceneGraph\build-android - каталог сборки в который будут сгенерированы сборочные скрипты
D:\projects\OpenSceneGraph\osg-android - каталог установки, в который будут скопированы заголовочные файлы и скомпилированные файлы библиотек
3. Затем необходимо создать соответствующие переменные окружения, которые потребуются позже.
Код
set ANDROID_NDK=D:\programs\Android\android-ndk-r13
set ANDROID_SDK=D:\programs\Android\sdk
set OSG_PATH=D:\projects\OpenSceneGraph
set ANDROID_SDK=D:\programs\Android\sdk
set OSG_PATH=D:\projects\OpenSceneGraph
4. Теперь нам потребуются исходники OpenSceneGraph 3.4.0, их можно
Код
git clone --branch OpenSceneGraph-3.4.0 https://github.com/openscenegraph/OpenSceneGraph.git
5. Конфигурируем скрипт сборки, для этого перемещаемся в каталог сборки, который мы определили выше, и выполняем в консоли следующую команду:
Код
%ANDROID_SDK%/cmake/3.6.3155560/bin/cmake -G "MinGW Makefiles" -DCMAKE_CXX_FLAGS="-frtti -fexceptions" \
-DCMAKE_MAKE_PROGRAM=%ANDROID_NDK%/prebuilt/windows-x86_64/bin/make.exe \
-DCMAKE_TOOLCHAIN_FILE=%ANDROID_SDK%/cmake/3.6.3155560/android.toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=../osg-android -DOPENGL_PROFILE="GLES2" \
-DDYNAMIC_OPENTHREADS=OFF -DDYNAMIC_OPENSCENEGRAPH=OFF \
-DANDROID_NDK=D:/programs/Android/android-ndk-r13 \
-DANDROID_TOOLCHAIN=clang -DANDROID_ABI=armeabi-v7a \
-DANDROID_PLATFORM=android-15 -DANDROID_NDK_REVISION=13 ..
-DCMAKE_MAKE_PROGRAM=%ANDROID_NDK%/prebuilt/windows-x86_64/bin/make.exe \
-DCMAKE_TOOLCHAIN_FILE=%ANDROID_SDK%/cmake/3.6.3155560/android.toolchain.cmake \
-DCMAKE_INSTALL_PREFIX=../osg-android -DOPENGL_PROFILE="GLES2" \
-DDYNAMIC_OPENTHREADS=OFF -DDYNAMIC_OPENSCENEGRAPH=OFF \
-DANDROID_NDK=D:/programs/Android/android-ndk-r13 \
-DANDROID_TOOLCHAIN=clang -DANDROID_ABI=armeabi-v7a \
-DANDROID_PLATFORM=android-15 -DANDROID_NDK_REVISION=13 ..
Здесь для удобства чтения я использовал мультистрочное форматирование, которое не работает в консоли Windows, поэтому в консоль команду нужно вставлять одной строкой.
8. Собираем OpenSceneGraph (обратите внимание, что сборка осуществляется только под архитектуру armeabi-v7a)
Код
%ANDROID_NDK%/prebuilt/windows-x86_64/bin/make.exe install
7. Теперь нужно сгенерировать в Android Studio новый проект с поддержкой C++. Мастер настройки достаточно простой, поэтому не буду подробно расписывать этот процесс.
8. В текущей версии Android Studio, есть досадный дефект, необходимо вручную дописать путь к NDK, в файле local.properties. Этот файл можно найти в дереве проекта, в секции Gradle Scripts
9. Найдем в дереве проекта, в секции Gradle Scripts, файл build.gradle нашего app и отредактируем в нем секцию externalNativeBuild следующим образом
Код
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ABI=armeabi-v7a"
}
}
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
arguments "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ABI=armeabi-v7a"
}
}
10. Отредактируем CMakeLists.txt нашего проекта-болванки, для этого найдем его в дереве проекта, в секции External Build Files, и приведем к следующему виду:
Код
# Sets the minimum version of CMake required to build the native
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
cmake_minimum_required(VERSION 3.4.1)
set( OSG_PATH $ENV{OSG_PATH} )
set( OSG_INCLUDE ${OSG_PATH}/osg-android/include )
set( OSG_LIB ${OSG_PATH}/osg-android/lib )
set( OSG_PLUGINS ${OSG_LIB}/osgPlugins-3.4.0 )
include_directories( ${OSG_INCLUDE} )
link_directories( ${OSG_LIB} )
link_directories( ${OSG_PLUGINS} )
add_library( osgdb_dds STATIC IMPORTED GLOBAL )
add_library( osgdb_openflight STATIC IMPORTED GLOBAL )
add_library( osgdb_tga STATIC IMPORTED GLOBAL )
add_library( osgdb_rgb STATIC IMPORTED GLOBAL )
add_library( osgdb_osgterrain STATIC IMPORTED GLOBAL )
add_library( osgdb_osg STATIC IMPORTED GLOBAL )
add_library( osgdb_ive STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgviewer STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgvolume STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgtext STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgterrain STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgsim STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgshadow STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgparticle STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgfx STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osganimation STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osg STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgvolume STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgtext STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgterrain STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgsim STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgshadow STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgparticle STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgmanipulator STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgfx STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osganimation STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osg STATIC IMPORTED GLOBAL )
add_library( osgViewer STATIC IMPORTED GLOBAL )
add_library( osgVolume STATIC IMPORTED GLOBAL )
add_library( osgTerrain STATIC IMPORTED GLOBAL )
add_library( osgText STATIC IMPORTED GLOBAL )
add_library( osgShadow STATIC IMPORTED GLOBAL )
add_library( osgSim STATIC IMPORTED GLOBAL )
add_library( osgParticle STATIC IMPORTED GLOBAL )
add_library( osgManipulator STATIC IMPORTED GLOBAL )
add_library( osgGA STATIC IMPORTED GLOBAL )
add_library( osgFX STATIC IMPORTED GLOBAL )
add_library( osgDB STATIC IMPORTED GLOBAL )
add_library( osgAnimation STATIC IMPORTED GLOBAL )
add_library( osgUtil STATIC IMPORTED GLOBAL )
add_library( osg STATIC IMPORTED GLOBAL )
add_library( OpenThreads STATIC IMPORTED GLOBAL )
set_target_properties( osgdb_dds PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_dds.a )
set_target_properties( osgdb_openflight PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_openflight.a )
set_target_properties( osgdb_tga PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_tga.a )
set_target_properties( osgdb_rgb PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_rgb.a )
set_target_properties( osgdb_osgterrain PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_osgterrain.a )
set_target_properties( osgdb_osg PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_osg.a )
set_target_properties( osgdb_ive PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_ive.a )
set_target_properties( osgdb_deprecated_osgviewer PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgviewer.a )
set_target_properties( osgdb_deprecated_osgvolume PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgvolume.a )
set_target_properties( osgdb_deprecated_osgtext PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgtext.a )
set_target_properties( osgdb_deprecated_osgterrain PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgterrain.a )
set_target_properties( osgdb_deprecated_osgsim PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgsim.a )
set_target_properties( osgdb_deprecated_osgshadow PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgshadow.a )
set_target_properties( osgdb_deprecated_osgparticle PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgparticle.a )
set_target_properties( osgdb_deprecated_osgfx PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgfx.a )
set_target_properties( osgdb_deprecated_osganimation PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osganimation.a )
set_target_properties( osgdb_deprecated_osg PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osg.a )
set_target_properties( osgdb_serializers_osgvolume PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgvolume.a )
set_target_properties( osgdb_serializers_osgtext PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgtext.a )
set_target_properties( osgdb_serializers_osgterrain PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgterrain.a )
set_target_properties( osgdb_serializers_osgsim PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgsim.a )
set_target_properties( osgdb_serializers_osgshadow PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgshadow.a )
set_target_properties( osgdb_serializers_osgparticle PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgparticle.a )
set_target_properties( osgdb_serializers_osgmanipulator PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgmanipulator.a )
set_target_properties( osgdb_serializers_osgfx PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgfx.a )
set_target_properties( osgdb_serializers_osganimation PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osganimation.a )
set_target_properties( osgdb_serializers_osg PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osg.a )
set_target_properties( osgViewer PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgViewer.a )
set_target_properties( osgVolume PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgVolume.a )
set_target_properties( osgTerrain PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgTerrain.a )
set_target_properties( osgText PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgText.a )
set_target_properties( osgShadow PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgShadow.a )
set_target_properties( osgSim PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgSim.a )
set_target_properties( osgParticle PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgParticle.a )
set_target_properties( osgManipulator PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgManipulator.a )
set_target_properties( osgGA PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgGA.a )
set_target_properties( osgFX PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgFX.a )
set_target_properties( osgDB PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgDB.a )
set_target_properties( osgAnimation PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgAnimation.a )
set_target_properties( osgUtil PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgUtil.a )
set_target_properties( osg PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosg.a )
set_target_properties( OpenThreads PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libOpenThreads.a )
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp
)
# Searches for a specified prebuilt library and stores the path as a
# variable. Because system libraries are included in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( log-lib log )
find_library( egl-lib EGL )
find_library( gles2-lib GLESv2 )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries(
native-lib
osgdb_dds
osgdb_openflight
osgdb_tga
osgdb_rgb
osgdb_osgterrain
osgdb_osg
osgdb_ive
osgdb_deprecated_osgviewer
osgdb_deprecated_osgvolume
osgdb_deprecated_osgtext
osgdb_deprecated_osgterrain
osgdb_deprecated_osgsim
osgdb_deprecated_osgshadow
osgdb_deprecated_osgparticle
osgdb_deprecated_osgfx
osgdb_deprecated_osganimation
osgdb_deprecated_osg
osgdb_serializers_osgvolume
osgdb_serializers_osgtext
osgdb_serializers_osgterrain
osgdb_serializers_osgsim
osgdb_serializers_osgshadow
osgdb_serializers_osgparticle
osgdb_serializers_osgmanipulator
osgdb_serializers_osgfx
osgdb_serializers_osganimation
osgdb_serializers_osg
osgViewer
osgVolume
osgTerrain
osgText
osgShadow
osgSim
osgParticle
osgManipulator
osgGA
osgFX
osgDB
osgAnimation
osgUtil
osg
OpenThreads
${log-lib}
${egl-lib}
${gles2-lib}
)
# library. You should either keep the default value or only pass a
# value of 3.4.0 or lower.
cmake_minimum_required(VERSION 3.4.1)
set( OSG_PATH $ENV{OSG_PATH} )
set( OSG_INCLUDE ${OSG_PATH}/osg-android/include )
set( OSG_LIB ${OSG_PATH}/osg-android/lib )
set( OSG_PLUGINS ${OSG_LIB}/osgPlugins-3.4.0 )
include_directories( ${OSG_INCLUDE} )
link_directories( ${OSG_LIB} )
link_directories( ${OSG_PLUGINS} )
add_library( osgdb_dds STATIC IMPORTED GLOBAL )
add_library( osgdb_openflight STATIC IMPORTED GLOBAL )
add_library( osgdb_tga STATIC IMPORTED GLOBAL )
add_library( osgdb_rgb STATIC IMPORTED GLOBAL )
add_library( osgdb_osgterrain STATIC IMPORTED GLOBAL )
add_library( osgdb_osg STATIC IMPORTED GLOBAL )
add_library( osgdb_ive STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgviewer STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgvolume STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgtext STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgterrain STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgsim STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgshadow STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgparticle STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osgfx STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osganimation STATIC IMPORTED GLOBAL )
add_library( osgdb_deprecated_osg STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgvolume STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgtext STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgterrain STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgsim STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgshadow STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgparticle STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgmanipulator STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osgfx STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osganimation STATIC IMPORTED GLOBAL )
add_library( osgdb_serializers_osg STATIC IMPORTED GLOBAL )
add_library( osgViewer STATIC IMPORTED GLOBAL )
add_library( osgVolume STATIC IMPORTED GLOBAL )
add_library( osgTerrain STATIC IMPORTED GLOBAL )
add_library( osgText STATIC IMPORTED GLOBAL )
add_library( osgShadow STATIC IMPORTED GLOBAL )
add_library( osgSim STATIC IMPORTED GLOBAL )
add_library( osgParticle STATIC IMPORTED GLOBAL )
add_library( osgManipulator STATIC IMPORTED GLOBAL )
add_library( osgGA STATIC IMPORTED GLOBAL )
add_library( osgFX STATIC IMPORTED GLOBAL )
add_library( osgDB STATIC IMPORTED GLOBAL )
add_library( osgAnimation STATIC IMPORTED GLOBAL )
add_library( osgUtil STATIC IMPORTED GLOBAL )
add_library( osg STATIC IMPORTED GLOBAL )
add_library( OpenThreads STATIC IMPORTED GLOBAL )
set_target_properties( osgdb_dds PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_dds.a )
set_target_properties( osgdb_openflight PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_openflight.a )
set_target_properties( osgdb_tga PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_tga.a )
set_target_properties( osgdb_rgb PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_rgb.a )
set_target_properties( osgdb_osgterrain PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_osgterrain.a )
set_target_properties( osgdb_osg PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_osg.a )
set_target_properties( osgdb_ive PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_ive.a )
set_target_properties( osgdb_deprecated_osgviewer PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgviewer.a )
set_target_properties( osgdb_deprecated_osgvolume PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgvolume.a )
set_target_properties( osgdb_deprecated_osgtext PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgtext.a )
set_target_properties( osgdb_deprecated_osgterrain PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgterrain.a )
set_target_properties( osgdb_deprecated_osgsim PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgsim.a )
set_target_properties( osgdb_deprecated_osgshadow PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgshadow.a )
set_target_properties( osgdb_deprecated_osgparticle PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgparticle.a )
set_target_properties( osgdb_deprecated_osgfx PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osgfx.a )
set_target_properties( osgdb_deprecated_osganimation PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osganimation.a )
set_target_properties( osgdb_deprecated_osg PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_deprecated_osg.a )
set_target_properties( osgdb_serializers_osgvolume PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgvolume.a )
set_target_properties( osgdb_serializers_osgtext PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgtext.a )
set_target_properties( osgdb_serializers_osgterrain PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgterrain.a )
set_target_properties( osgdb_serializers_osgsim PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgsim.a )
set_target_properties( osgdb_serializers_osgshadow PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgshadow.a )
set_target_properties( osgdb_serializers_osgparticle PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgparticle.a )
set_target_properties( osgdb_serializers_osgmanipulator PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgmanipulator.a )
set_target_properties( osgdb_serializers_osgfx PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osgfx.a )
set_target_properties( osgdb_serializers_osganimation PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osganimation.a )
set_target_properties( osgdb_serializers_osg PROPERTIES IMPORTED_LOCATION ${OSG_PLUGINS}/libosgdb_serializers_osg.a )
set_target_properties( osgViewer PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgViewer.a )
set_target_properties( osgVolume PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgVolume.a )
set_target_properties( osgTerrain PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgTerrain.a )
set_target_properties( osgText PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgText.a )
set_target_properties( osgShadow PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgShadow.a )
set_target_properties( osgSim PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgSim.a )
set_target_properties( osgParticle PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgParticle.a )
set_target_properties( osgManipulator PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgManipulator.a )
set_target_properties( osgGA PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgGA.a )
set_target_properties( osgFX PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgFX.a )
set_target_properties( osgDB PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgDB.a )
set_target_properties( osgAnimation PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgAnimation.a )
set_target_properties( osgUtil PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosgUtil.a )
set_target_properties( osg PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libosg.a )
set_target_properties( OpenThreads PROPERTIES IMPORTED_LOCATION ${OSG_LIB}/libOpenThreads.a )
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds it for you.
# Gradle automatically packages shared libraries with your APK.
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp
)
# Searches for a specified prebuilt library and stores the path as a
# variable. Because system libraries are included in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
find_library( log-lib log )
find_library( egl-lib EGL )
find_library( gles2-lib GLESv2 )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in the
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries(
native-lib
osgdb_dds
osgdb_openflight
osgdb_tga
osgdb_rgb
osgdb_osgterrain
osgdb_osg
osgdb_ive
osgdb_deprecated_osgviewer
osgdb_deprecated_osgvolume
osgdb_deprecated_osgtext
osgdb_deprecated_osgterrain
osgdb_deprecated_osgsim
osgdb_deprecated_osgshadow
osgdb_deprecated_osgparticle
osgdb_deprecated_osgfx
osgdb_deprecated_osganimation
osgdb_deprecated_osg
osgdb_serializers_osgvolume
osgdb_serializers_osgtext
osgdb_serializers_osgterrain
osgdb_serializers_osgsim
osgdb_serializers_osgshadow
osgdb_serializers_osgparticle
osgdb_serializers_osgmanipulator
osgdb_serializers_osgfx
osgdb_serializers_osganimation
osgdb_serializers_osg
osgViewer
osgVolume
osgTerrain
osgText
osgShadow
osgSim
osgParticle
osgManipulator
osgGA
osgFX
osgDB
osgAnimation
osgUtil
osg
OpenThreads
${log-lib}
${egl-lib}
${gles2-lib}
)
Вуаля! Проект собирается, устанавливается на устройство и запускается. Если вы все сделали верно, то на экране вашего мобильного устройства должно появиться окно с надписью "Hello from C++".