Android强制OpenCV 3.0作为32位库加载
我正试图让我的64位Android设备编译本地32位jniLibs,到目前为止还可以,但我有点遇到了障碍 几天来,我一直在研究到底哪里出了问题,四处游荡,但这是我目前遇到的错误: java.lang.unsatifiedlinkerror:dlopen失败:“/data/app/org.opencv.engine-1/lib/arm64/libopencv_java3.so”是64位而不是32位 考虑到64位设备认识到它应该编译32位体系结构,这实际上是有希望的,我通过省略arm64、x86_64和mips64实现了这一点,根据以下回答: 我使用的初始化代码是:Android强制OpenCV 3.0作为32位库加载,android,java-native-interface,opencv3.0,qandroidjniobject,Android,Java Native Interface,Opencv3.0,Qandroidjniobject,我正试图让我的64位Android设备编译本地32位jniLibs,到目前为止还可以,但我有点遇到了障碍 几天来,我一直在研究到底哪里出了问题,四处游荡,但这是我目前遇到的错误: java.lang.unsatifiedlinkerror:dlopen失败:“/data/app/org.opencv.engine-1/lib/arm64/libopencv_java3.so”是64位而不是32位 考虑到64位设备认识到它应该编译32位体系结构,这实际上是有希望的,我通过省略arm64、x86_6
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
因此,我的问题如下:
通过删除所有64位库并将所有32位库保留在app->src->main下的jniLibs文件夹中,我正确安装了它,但我没有调用OpenCVLoader来加载库,而是执行了如下调用:
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_1_0, this, mLoaderCallback);
}
else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
它检测应用程序是否已在本地包含OpenCVManager将处理的文件。将这些文件包含在jniLibs文件夹中的另一个优点是,不再出现下载OpenCVManager的提示,并且您的应用程序仍然具有用户拥有的功能
我想在本地实现所有内容的快速指南应该是:
我相信这只是将本机OpenCV与私有JNI库一起使用时可以预加载的原因之一。我可以在包含64位armeabi-v8a/arm64时正确加载它,但我想使用的项目库都是32位的。我也使用Android Studio作为IDE,但没有太大不同:导入、生成build.gradle,包括jniLibs及其各自的子目录,在项目级别引用,并添加模块依赖项编辑:此外,在仔细检查之后,我还没有加载自定义库,仅包括(据我所知)32位opencv libsI不认为您可以在独立安装opencv管理器的情况下强制
OpenCVLoader
选择32位libs。也许我误解了OpenCVLoader的实际功能,应该在快速搜索找到OpenCVLoader.initDebug()后以不同的方式实例化所有内容将只浏览应用程序jni文件,但它似乎不太稳定,因为如果文件没有以某种方式全部包含,我会抛出大量异常…您如何知道哪些库是64位的?根据经验,很少有,但官方的repo内容可以处理64位体系结构。