.aar 中缺少 opencv core .so 库

Missing opencv core .so library in .aar

提问人:user3112140 提问时间:2/7/2022 更新时间:2/7/2022 访问量:409

问:

我目前正在尝试使用 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 的,它需要从源代码编译整个代码,所以这对我来说不是一个选择。

android opencv cmake android-ndk android-gradle-plugin

评论


答:

0赞 user3112140 2/7/2022 #1

我终于设法将 libopencv_core.so 复制到正确的文件夹中并生成一个完整的 aar。

我只需要将以下内容添加到我的应用程序CMakeLists.txt中:

set_target_properties( opencv_core PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} )

我真的不明白为什么我必须添加这一行,但它正在工作!

评论

0赞 Community 2/7/2022
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。