#android #c #opencv #android-ndk
#Android #c #opencv #android-ndk
Вопрос:
Какие шаги мне необходимо предпринять для интеграции,
в проект Android NDK на чистом C (без кода Java), такой как Android NDK Google tutorial:
официальная документация по интеграции Android относится к гораздо более старой версии: OpenCV-2.4, и структуры папок больше не те.
Я использую Android Studio в Linux.
Я высоко ценю любую помощь.
Ответ №1:
-
Загрузите пакет opencv для Android (например, opencv-4.0.1-android-sdk) и распакуйте, скажем,
~/android
. -
В нижней части CMakeLists.txt, добавить
set( OpenCV_DIR "~/android/OpenCV-android-sdk/sdk/native/jni" ) find_package( OpenCV REQUIRED ) target_link_libraries(game opencv_java)
Пакет определит следующие переменные:
OpenCV_LIBS : список всех импортированных целевых объектов для модулей OpenCV.
OpenCV_INCLUDE_DIRS : список каталогов OpenCV включает каталоги. С CMake >= 2.8.11 вам даже не нужно писать
include_directories(${OpenCV_INCLUDE_DIRS})
Эта версия встроенного OpenCV SDK также определяет
OpenCV_VERSION : версия этой сборки OpenCV: «4.0.1»
OpenCV_ANDROID_NATIVE_API_LEVEL : Минимально необходимый уровень Android API: «16».
Это означает, что для манифеста вашего приложения требуется minSdkVersion 16 или выше (исходный образец нуждается в исправлении здесь).
Вместо общей библиотеки, которая содержит все функциональные возможности OpenCV, вы можете использовать статические библиотеки (opencv_imgcodecs, opencv_stitching, et al). Эти статические библиотеки принимают значение по умолчанию ANDROID_STL=c _static.
Для достижения наилучших результатов используйте NDK r.18 или r.19.
ОБНОВЛЕНИЕ: NDK r.21 хорошо работает для opencv 4.3.0.
Комментарии:
1. Выглядит как идеальный ответ. но мне нужно около 3 дней для подтверждения. большое вам спасибо.
2. Мне кажется, это сбой в плагине Android Gradle. Я должен еще немного поэкспериментировать. Простым решением является добавление
<opencv>/sdk/native/libs
в jniLibs.src3. Вручную создал папку jniLibs и скопировал содержимое ~/OpenCV-android-sdk /sdk/native / libs в эту папку. [ссылка] youtube.com/watch?v=Lg24S-Y8NU8 Спасибо @AlexCohn. если вы найдете решение после эксперимента, пожалуйста, дайте мне знать.
4. Спасибо @AlexCohn
5. Пользовательская команда копирования больше не нужна для импортированных целей при использовании плагина Android Gradle 4.0, смотрите Здесь: developer.android.com/studio/projects /…
Ответ №2:
Если вы хотите создавать общие объекты (.so)
и компилировать без использования Android Studio, вот мой блог. Это часто бывает полезно, когда вы хотите создать собственную стороннюю библиотеку.