【发布时间】:2019-01-31 02:33:21
【问题描述】:
我有一个使用OpenCV 3.1 的应用程序。我将lib_opencv_java.so 文件复制到jniLibs 文件夹中。现在我想将一个新的 sdk 集成到我的应用程序中,但是这个 SDK 也使用了不同版本的 OpenCV。 SDK OpenCV 库随 Gradle 添加,未复制到 jni 文件夹。当我构建应用程序时,编译时间出错:
找到多个文件,其独立于操作系统的路径为“lib/arm64-v8a/libopencv_java3.so”
为了解决这个问题,我重命名了我的 OpenCV 并使用不同的名称重新生成了 .so 文件。之后,它没有给出上述问题,但是当我尝试打开使用 OpenCV 的活动时。应用程序因以下错误而崩溃:
java.lang.UnsatisfiedLinkError: dlopen failed: 找不到“/data/app/io.xxxxxx-gilxH9B4dAHGtuXtU4Sl6Q==/lib/arm64/libProcess.so”引用的符号“_ZN2cv7imwriteERKNS_6StringERKNS_11_InputArrayERKSt6vectorIiSaIiEE”。
【问题讨论】:
-
尺寸很重要。您的用户不会很高兴发现您的应用程序已经增长了几兆字节只是为了存储两个版本的 so。让两个库都使用一个版本的 OpenCv 应该不是很难。
-
是的,apk 大小会增加。但是我为什么要保留这两个库是因为我不想依赖第三方 sdk 的 opencv 版本。谢谢,我会尝试使用相同的。
标签: android android-studio android-ndk java-native-interface opencv3.1