从3.4.3更新到4.1.1后无法检测到OpenCV库

问题描述 投票:1回答:1

我已经将OpenCV模块的依赖关系从3.4.3更新到4.1.1,现在我收到了消息

找不到OpenCV Manager软件包

尽管我已包含所有libopencv_java4.so本机库。

对于以前的版本(3.4.x),仅当我省略包含本地*.so库时才需要软件包管理器,但是对于此版本(4.1.1)似乎没有什么区别,每次都要求使用OpenCV Manager不管。

我不希望该应用依赖于单独的OpenCV管理器。如何解决此错误?

错误日志是:

OpenCV error: Cannot load info library for OpenCV
W/System.err: java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
W/System.err:     at java.lang.Runtime.loadLibrary0(Runtime.java:1071)
W/System.err:     at java.lang.Runtime.loadLibrary0(Runtime.java:1007)
W/System.err:     at java.lang.System.loadLibrary(System.java:1667)
W/System.err:     at org.opencv.android.StaticHelper.loadLibrary(StaticHelper.java:64)
W/System.err:     at org.opencv.android.StaticHelper.initOpenCVLibs(StaticHelper.java:95)
W/System.err:     at org.opencv.android.StaticHelper.initOpenCV(StaticHelper.java:39)
W/System.err:     at org.opencv.android.OpenCVLoader.initDebug(OpenCVLoader.java:107)
W/System.err:     at com.mysite.myapp.OpenCVTestActivity.onResume(OpenCVTestActivity.java:144)
W/System.err:     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1446)
W/System.err:     at android.app.Activity.performResume(Activity.java:7939)
W/System.err:     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4195)
W/System.err:     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4237)
W/System.err:     at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
W/System.err:     at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176)
W/System.err:     at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:107)
W/System.err:     at android.os.Looper.loop(Looper.java:214)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7356)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

编辑

该问题与模块配置无关,而是由OpenCV本机库崩溃导致的,由于某些原因,以前的3.4.x版本不会发生这种情况。发生此错误后,OpenCV模块的重新初始化失败,触发此错误。

android opencv opencv4android
1个回答
0
投票
openCV 4.1.1,我们需要强制使用

gradle中的CMAKE。因此,如果我们创建dummy CMAKEdummy-lib,则会将库libc ++ _ shared.so添加到APK。

然后,首先在/ app / src / main /目录中创建带有

CMakeLists.txt

dummy-lib.cpp文件的cpp文件夹。 >enter image description here<< [CMakeLists.txt是一个虚拟文件,在里面放这个:

cmake_minimum_required(VERSION 3.4.1) add_library( # Sets the name of the library. dummy-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). dummy-lib.cpp) find_library( # Sets the name of the path variable. log-lib # Specifies the name of the NDK library that # you want CMake to locate. log) target_link_libraries( # Specifies the target library. dummy-lib # Links the target library to the log library # included in the NDK. ${log-lib})

dummy-lib.cpp中添加:

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
whatever(
        JNIEnv *env,
        jobject /* this */){
    std::string hello = "Hello";
    return env->NewStringUTF(hello.c_str());
};

然后,在应用程序的gradle

文件中添加:
android {
    ....

    defaultConfig {

        ...

        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                arguments "-DANDROID_STL=c++_shared"
            }
        }

    }

   ...

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2"
        }
    }



}

所以,创建项目

,一切都完成了!
如果您分析生成的

APK

,则可以在其中看到库libc ++ _ shared.so

enter image description here

最后,sample Android Project
© www.soinside.com 2019 - 2024. All rights reserved.