【问题标题】:native library not found in instrumentation tests在仪器测试中找不到本机库
【发布时间】: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,它们包含相同的文件。我发现一些报告指出,旧设备在从一个文件夹加载文件时可能会出现问题,但这对我也不起作用。

标签: android opencv


【解决方案1】:

事实证明这是一个问题,因为 opencv 库是仪器测试项目的依赖项的一部分。

build.gradle 文件中从androidTestCompile 切换到compile(基本上,将依赖项添加到被测应用而不是测试应用)使库加载正常工作。我会再挖掘一些,看看是否有任何解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多