有没有办法使用同一个库的2个不同版本,所以android中的文件

时间:2019-01-31 02:33:22

标签: android android-studio android-ndk java-native-interface opencv3.1

我有一个使用OpenCV 3.1的应用程序。我将lib_opencv_java.so文件复制到jniLibs文件夹中。现在,我想将新的sdk集成到我的应用程序中,但是此SDK也使用其他版本的OpenCV。带有Gradle的SDK OpenCV lib已添加,未复制到jni文件夹中。当我构建应用程序时,它在编译时给出了错误:

  

使用操作系统独立路径'lib / arm64-v8a / libopencv_java3.so'找到多个文件

为解决此问题,我重命名了OpenCV,并使用不同的名称重新生成了.so文件。之后,它没有出现上述问题,但是当我尝试打开使用OpenCV的活动时。该应用程序崩溃并出现以下错误:

  

java.lang.UnsatisfiedLinkError:dlopen失败:无法找到符号“ _ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE”,并由“ /data/app/io.xxxxxx-gilxH9B4dAHGtuXtU4Sl6so=/lib”引用。

1 个答案:

答案 0 :(得分:4)

要正确摆脱以下错误:

  

使用操作系统独立路径'lib / arm64-v8a / libopencv_java3.so'找到多个文件

您应在app/build.gradle

中使用以下代码
android{
    ...        
    packagingOptions {
        pickFirst 'lib/x86_64/libopencv_java3.so'
        pickFirst 'lib/x86/libopencv_java3.so'
        pickFirst 'lib/arm64-v8a/libopencv_java3.so'
        pickFirst 'lib/armeabi-v7a/libopencv_java3.so'
    }
    ...
}