我是android studio的新手,正在开发一个使用OpenCV的现有项目。我需要为Android实现CMU的Pocketsphinx,并按照他们给出的安装步骤,在我项目的/ src目录中创建了一个jniLibs文件夹,并在其中放置了pocketphinx的相应文件。
这就是问题发生的地方 - 当我这样做时,我突然收到以下错误消息:
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.robodoot.dr.facetracktest-2/base.apk"],nativeLibraryDirectories=[/data/app/com.robodoot.dr.facetracktest-2/lib/arm, /data/app/com.robodoot.dr.facetracktest-2/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find "libjniopencv_core.so"
如果我在/ src目录中没有jniLibs文件夹,我不会收到此错误,但当然我从pocketSphinx收到错误,说它无法找到它所需的.so文件。
更重要的是,在浏览OpenCV的SDK之后,我注意到没有这样的文件“libjniopencv_core.so”。它不存在于任何地方,还有其他.so文件,但没有一个具有该名称。即使我将所有armeabi和openCV中的所有目录安装到我的新jniLibs文件夹中,我仍然会收到此错误消息。
如何告诉android studio只加载pocketsphinx jniLibs文件,并忽略在openCV .so文件中搜索该目录?
答案 0 :(得分:1)
您可以通过在gradle中添加以下代码来实现此目的
android {
...
defaultConfig {
...
ndk {
abiFilters "armeabi-v7a", "x86","armeabi"
}
packagingOptions {
exclude "lib/arm64-v8a/mysofile.so"
}
}
}
将arm64-v8a / mysofile.so替换为您要排除的内容。
答案 1 :(得分:0)
如何告诉android studio只加载pocketsphinx jniLibs文件,并忽略在openCV .so文件中搜索该目录?
您不应忽视重要文件。 libcniopencv_core.so是opencv。
所必需的在查看OpenCV的SDK之后,我发现没有这样的文件" libjniopencv_core.so"。
它必须与opencv-android-arm.jar一起包含在其他重要的文件中。
不清楚为什么文件冲突,它应该是gradle的一些问题。你需要检查APK的内部是什么,所以文件实际包装在里面。很可能你试图打包不同的架构,如armeabi和armeabi-v7。您可能需要从同一架构中打包.so文件。