在我的安卓项目中加入第二个JNI库(OpenCV)后出现错误

 2023-01-19    353  

问题描述

我正在尝试将OPENCV添加到我的现有Android项目中,但是在合并它们时,我遇到了以下错误:

12-08 16:15:21.951 22052-22052/ai.inbi.face_recognition_robot E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                      Process: ai.inbi.wonderful_face_recognition_robot, PID: 22052
                                                                                      java.lang.UnsatisfiedLinkError: Couldn't load uvcNative from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ai.inbi.wonderful_face_recognition_robot-1.apk"],nativeLibraryDirectories=[/data/app-lib/ai.inbi.wonderful_face_recognition_robot-1, /vendor/lib, /system/lib]]]: findLibrary returned null
                                                                                          at java.lang.Runtime.loadLibrary(Runtime.java:358)
                                                                                          at java.lang.System.loadLibrary(System.java:526)

我尝试手动评论对OpenCV的所有引用,但是除非我从LIBS文件夹中删除所有OpenCV文件,否则现有库(com.qihancloud.opensdk)未能找到其自己的库函数.
我的库的文件夹结构就是这样:

在我的安卓项目中加入第二个JNI库(OpenCV)后出现错误

如果我在编译所有内容之前删除OpenCV库文件.
另外,我的独立openCV项目正在工作,但是一旦我尝试将它们结合起来,它就无法执行.

我的应用程序build.gradle文件可以在此处看到:
https://pastebin.com/z7hph3vy

和我的cmakelists.txt
https://pastebin.com/ggwgwtxp

推荐答案

错误意味着文件 libuvcnative.so 尚未使用APK安装.这可能发生在各种根本原因中.

您的案例与在此处描述. qihanopensdk_1.1.8.0.aar 只有 armeabi libuvcnative.so 的版本.修复程序是将 build.gradle “> build.gradle 更改#15行

abiFilters 'armeabi'

但我必须承认您的 cmakelists.txt 使我感到困惑.对我来说,

set_target_properties(lib_qihan PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR} /libs/QihanOpenSDK_1.1.8.0.aar)

不起作用.真诚,

set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR} /libs/${ANDROID_ABI}/libopencv_java3.so)

也不匹配我的书.对于后者,我相信您只是在复制/粘贴脚本时添加了一个空间.

对于前者,我知道一个特别的 trick 进口 aar 在本机构建中使用.

我相信您的工作版本不仅丢弃了所有opencv库,而且也不会构建 libnative-lib.so .这样, cmake 确实永远不会寻找 libuvcnative.so ,但是仍然将这种本地lib与APK一起部署,因为 aar 是a 汇编您的应用程序的依赖性.我猜一些 qihanopensdk 类明确调用

System.loadLibrary("uvcNative")

如果您的 libnative-lib.so 不使用 libuvcnative.so 的外部符号,那么您不需要我上面提到的技巧,也不需要在您的 cmakelists.txt .

以上所述是小编给大家介绍的在我的安卓项目中加入第二个JNI库(OpenCV)后出现错误,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/25867.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。