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

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

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

在OS独立路径'lib / arm64-v8a / libopencv_java3.so'中找到了多个文件

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

java.lang.UnsatisfiedLinkError:dlopen失败:无法找到“/data/app/io.xxxxxx-gilxH9B4dAHGtuXtU4Sl6Q==/lib/arm64/libProcess.so”引用的符号“_ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE”。

android android-studio android-ndk java-native-interface opencv3.1
1个回答
4
投票

要正确摆脱以下错误:

在OS独立路径'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'
    }
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.