如何告诉Android Studio不要查看特定库的jniLibs文件夹?

时间:2016-10-15 16:27:59

标签: android opencv android-gradle pocketsphinx-android

我是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文件中搜索该目录?

2 个答案:

答案 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文件。