提问人:user3112140 提问时间:2/7/2022 更新时间:2/7/2022 访问量:409
.aar 中缺少 opencv core .so 库
Missing opencv core .so library in .aar
问:
我目前正在尝试使用 Gradle 编译 OpenCV 并将其集成到我的 Android 项目中,但我遇到了一个问题,我不知道如何解决它。
我在我的项目中创建了一个原生库模块,并创建了一些 gradle 任务,用于下载和解压缩项目中的源代码。然后,使用 OpenCV 项目中提供的 CMakeLists.txt 文件,在我的应用程序 CMakeList.txt 文件中使用“add_subdirectory”导入它。
这样,OpenCV 编译就可以正确完成,并在 .cxx/RELEASE/buildHash/arm64-v8a/opencv/lib/arm64-v8a/ 文件夹中生成两个必需的库 libopencv_core.so 和 libopencv_imgproc.so
但是,只有我自己的应用程序 .so 库和 libopencv_imgproc.so 包含在最终的 .aar 文件中。缺少 libopencv_core.so。如果我检查位于 build/intermediates/cxx/RELEASE/buildHash/obj/arm64-v8a/ 中的 Gradle 构建文件夹,我可以看到与 .aar 中相同的问题。
有趣的是,如果我只需要使用 libopencv_core.so,它将正确地集成到最终的 .aar 中,我不明白为什么。
这是我的CMakeList,.txt文件:
cmake_minimum_required(VERSION 3.18.1)
project("myapp")
add_library(
myapp
SHARED
myapp.cpp )
find_library(
log-lib
log )
# OpenCV source code and CMakeList.txt are located in the opencv folder
add_subdirectory(opencv)
# Library opencv_core and opencv_imgproc are generated by the OpenCV CMakeList.txt
target_link_libraries(myapp opencv_core opencv_imgproc ${log-lib} )
target_include_directories(myapp PUBLIC
opencv/modules/core/include
opencv/modules/imgproc/include
)
include_directories (${CMAKE_BINARY_DIR})
我的问题是,我错过了什么?我必须指定什么来强制包含 libopencv_core.so 吗?
PS:为什么我不简单地集成二进制文件而不是编译它们?因为该应用程序是针对 F-Droid 的,它需要从源代码编译整个代码,所以这对我来说不是一个选择。
答:
我终于设法将 libopencv_core.so 复制到正确的文件夹中并生成一个完整的 aar。
我只需要将以下内容添加到我的应用程序CMakeLists.txt中:
set_target_properties( opencv_core PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} )
我真的不明白为什么我必须添加这一行,但它正在工作!
评论