【发布时间】:2014-05-13 16:17:49
【问题描述】:
我在我的 android 仪器测试中使用 OpenCV。它适用于较新的设备(gnex、nexus 5、nexus 7),但不适用于较旧的设备(nexus 1、三星 GT-P7500R)。我正在为这个库使用静态初始化(而不是使用池/共享本机库的管理器应用程序)。
对于 armeabi 和 armeabi-v7a,它是相同的构建代码,基于 gradle 并包含相同的 .so 文件。
我已经安装了 OpenCVManager 和另一个使用它的应用程序,即使在旧设备上也能正常工作。我查看了 apk 内部,甚至复制了相同的 .so 文件,但仍然收到相同的错误消息:
java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:429)
at java.lang.System.loadLibrary(System.java:554)
at org.opencv.android.StaticHelper.loadLibrary(StaticHelper.java:54)
at org.opencv.android.StaticHelper.initOpenCVLibs(StaticHelper.java:85)
at org.opencv.android.StaticHelper.initOpenCV(StaticHelper.java:29)
at org.opencv.android.OpenCVLoader.initDebug(OpenCVLoader.java:51)
还有什么不同的想法吗?我查看了仪器 apk(调试测试)的内部,并且 lib 文件在那里......
编辑:我尝试了各种设置,但都不起作用: - 只有 armeabi 文件夹中的 armeabi 文件 - 只有 armeabi-v7a 文件夹中的 armeabi-v7a 文件 - 只是顶层文件夹中的 armeabi 文件(apk 中的 lib 文件夹) - 只是顶层文件夹中的 armeabi-v7a 文件(apk 中的 lib 文件夹) - 手动加载 opencv_java - 手动加载 OpenCVENgine、OpenCVEngine_jni(从 OpenCVManager 应用“借用”)。
我已经在其他设备上尝试了其中的一些方法,并且效果很好......
【问题讨论】:
-
通常是静态的 { OpenCVLoader.initDebug();从这个意义上说,对我来说,这是您应用程序的根本解决方案。但似乎不像你说的那样加载它。可能您的 armeabi 文件夹中缺少一些静态库?
-
有趣的是,在 nexus one 上,opencv 管理器只有一个 armeabi-v7a 文件夹,我尝试将它们捆绑在其中,但没有成功。
-
没有 armeabi 文件夹,您将无法在旧设备上使用 opencv 库。我在办公室里有一对旧的,仅使用 armeabi-v7 文件夹就无法使用。我下载的 OpenCV Android 库项目中有一个 armeabi 文件夹结构。如果除了现有文件夹之外,您还可以在 /libs 文件夹下的应用程序中提供该文件夹,您很可能会回到那些旧系统上的链接。
-
我确实有原始问题中所述的 armeabi 和 armeabi-v7a,它们包含相同的文件。我发现一些报告指出,旧设备在从一个文件夹加载文件时可能会出现问题,但这对我也不起作用。