Хорошо, у меня ушло около недели, чтобы это заработало, но оно окупилось. Я перечислю все, что мне нужно было сделать, чтобы использовать VTK в моем приложении для Android.
ШАГ 1: Сборка VTK на компьютере с Linux
Поскольку Android основан на ОС Linux, вам необходимо создавать библиотеки в формате .a
или .so
. Для этого проще всего собрать VTK на Linux-машине. Таким образом, вы должны установить Linux на свою машину как двойную загрузку или, как в моем случае, установить виртуальную машину под управлением Linux.
После этого вам необходимо установить все необходимое для загрузки и сборки VTK для Android. Вот список того, что вам нужно скачать и установить на ваш компьютер с Linux:
- Загрузка и установка Android NDK - я скачал ту же версию, которую использую в своей Android Studio - r17c
- Загрузите и установите Android SDK, т.е. Android Studio
- Загрузите и установите ANT
- Скачать и установить Java
- Скачайте и установите CMake - также после того, как я его установил, мне нужно было запустить:
sudo apt-get update && sudo apt-get install build-essential
- Скачать и установить Git
- Установить OpenGL - я использовал:
sudo apt-get install freeglut3-dev
- Определить
ANDROID_NDK
переменную среды - укажите ее в разархивированной папке Android NDK
- Определить
ANT_HOME
переменную среды - укажите ее в разархивированной папке ANT
- Определить
JAVA_HOME
переменную среды - укажите ее в разархивированной папке Java JRE
- Определить
ANDROID_SDK
переменную среды - укажите ее расположение на папке Android / Sdk
- Define
CMAKE_HOME
переменная окружения - укажите ее местоположение установленного CMake
- Добавить к
PATH
Переменная среды: ANT_HOME/bin
, JAVA_HOME/bin
, ANDROID_SDK/platform-tools
, ANDROID_SDK/tools
, CMAKE_HOME/bin
После установки всех вышеперечисленных инструментов вам необходимо скачать исходный код VTK с помощью git:
- Создать папку 'vtk' где-нибудь
cd vtk
git clone https://github.com/Kitware/VTK.git
Теперь вы можете пойти и построить VTK:
mkdir vtk/vtk-android
cd vtk-android
ccmake ../VTK
- нажмите c (настроить)
- нажмите c (настроить)
- нажмите q (выйти)
cmake -DVTK_ANDROID_BUILD=ON -DANDROID_NATIVE_API_LEVEL=23 -DANDROID_ARCH_ABI=arm64-v8a ../VTK
- здесь я определил уровень 23 api, потому что это то, что я использую в своем приложении. Кроме того, здесь вы определяете архитектуру ABI ваших целевых устройств. У меня устройство arm64-v8a, поэтому я его использую. Чтобы построить VTK для других архитектур, вам нужно будет построить каждую из них. Кроме того, вы можете изменить это на следующем шаге!
ccmake ../VTK
ДОПОЛНИТЕЛЬНО: на этом этапе вы можете определить дополнительные модули, которые вам нужны в вашем приложении. Если вы просто пропустите этот шаг, вы получите следующие модули (.a файлы):
vtkCommonColor, vtkCommonComputationalGeometry, vtkCommonCore,
vtkCommonDataModel, vtkCommonExecutionModel, vtkCommonMath, vtkCommonMisc,
vtkCommonSystem, vtkCommonTransforms, vtkDICOMParser, vtkdoubleconversion,
vtkexpat, vtkFiltersCore, vtkFiltersExtraction, vtkFiltersGeneral,
vtkFiltersGeometry, vtkFiltersHybrid, vtkFiltersModeling, vtkFiltersSources,
vtkFiltersStatistics, vtkfreetype, vtkglew, vtkImagingCore,
vtkImagingFourier, vtkImagingMath, vtkImagingSources, vtkInfovisCore,
vtkInteractionStyle, vtkIOCore vtkIOGeometry, vtkIOImage, vtkIOInfovis,
vtkIOLegacy, vtkIOPLY, vtkIOXML, vtkIOXMLParser, vtkjpeg, vtkjsoncpp,
vtklibxml2, vtklz4, vtklzma, vtkmetaio, vtkParallelCore, vtkpng,
vtkRenderingCore, vtkRenderingFreeType, vtkRenderingOpenGL2,
vtkRenderingVolume, vtkRenderingVolumeOpenGL2, vtksys, vtkTestingRendering,
vtktiff, vtkWrappingTools, vtkzlib
Если этих модулей вам недостаточно, вам нужно добавить несколько строк в файл VTK / CMake / vtkAndroid.cmake, потому что там определена сборка для android. Добавляемые строки должны выглядеть следующим образом:
-DVTK_MODULE_ENABLE_VTK_[name-of-the-module]:STRING=YES
Вы можете найти все возможные значения name-of-the-module
, если нажмете t (переключить) и выделите часть конфигурации VTK_MODULE_ENABLE_VTK _...
- c (настроить)
- г (генерировать)
make
Итак, процесс сборки начинается. На моем ноутбуке это заняло ~ 30 минут (я выделил 3 ГБ ОЗУ для виртуальной машины).
ШАГ 2: Импорт VTK в Android Studio
После завершения процесса сборки вам необходимо скопировать папку vtk/vtk-android/CMakeExternals/Install/vtk-android
на ваш компьютер с Windows.
Папка lib
содержит библиотеку VTK для сборки в виде набора статических библиотек (файлы .a), а папка include
содержит все заголовочные файлы VTK, которые необходимы вам для полной работы VTK.
Теперь в своем проекте Android Studio создайте новый модуль Android Library под названием vtk
.
Создайте папку src/main/jni
и внутри этой папки скопируйте папку lib
и include
, описанную выше.
В папке jni
хранится файл vtk-lib.cpp
, который будет служить интерфейсом от вашего Java-кода к библиотеке VTK. Примером может быть:
#include <jni.h>
#include <vtkConeSource.h>
extern "C"
JNIEXPORT void JNICALL
Java_link_to_your_java_function(
JNIEnv *env,
jobject /*this*/) {
vtkConeSource *cone = vtkConeSource::New();
cone->SetHeight(3.0);
cone->Delete();
}
В файле build.gradle
вашего модуля vtk
добавьте следующие строки:
android {
...
defaultConfig {
...
externalNativeBuild {
cmake {
cppFlags "-std=c++11"
arguments "-DANDROID_CPP_FEATURES=rtti exceptions",
"-DANDROID_STL=gnustl_shared"
abiFilters 'arm64-v8a'
}
}
}
...
externalNativeBuild {
cmake {
path "src/main/jni/CMakeLists.txt"
}
}
}
После этого в папку jni
добавьте файл CMakeLists.txt
, который будет использоваться для сборки модуля:
cmake_minimum_required(VERSION 3.4.1)
set(LIB_DIR ${PROJECT_SOURCE_DIR}/lib/${ANDROID_ABI})
add_library(vtk-common-color STATIC IMPORTED)
set_target_properties(vtk-common-color
PROPERTIES IMPORTED_LOCATION
${LIB_DIR}/libvtkCommonColor-8.90.a)
#53 more libraries from lib folder
add_library( vtk-lib SHARED ${PROJECT_SOURCE_DIR}/vtk-lib.cpp)
target_include_directories(vtk-lib PRIVATE ${PROJECT_SOURCE_DIR}/include)
target_link_libraries(
vtk-lib
-Wl,--start-group -L ${TARGET_OUT}
vtk-common-color
#53 more libraries names
-Wl,--end-group
)
И это все, вуаля!