Java 不能';“找不到”;libjniopencv_core.so“;
我正在用opencv开发一个android应用程序,我遇到了一个问题 我遇到的错误是:Java 不能';“找不到”;libjniopencv_core.so“;,java,android,opencv,Java,Android,Opencv,我正在用opencv开发一个android应用程序,我遇到了一个问题 我遇到的错误是: FATAL EXCEPTION: AsyncTask #3 Process: com.sogeti.innovation.obcapture, PID: 29681 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3
FATAL EXCEPTION: AsyncTask #3
Process: com.sogeti.innovation.obcapture, PID: 29681
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.sogeti.innovation.obcapture-1/base.apk"],nativeLibraryDirectories=[/data/app/com.sogeti.innovation.obcapture-1/lib/arm, /data/app/com.sogeti.innovation.obcapture-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find "libjniopencv_core.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:804)
at org.bytedeco.javacpp.Loader.load(Loader.java:613)
at org.bytedeco.javacpp.Loader.load(Loader.java:530)
at org.bytedeco.javacpp.opencv_core.<clinit>(opencv_core.java:10)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at org.bytedeco.javacpp.Loader.load(Loader.java:585)
at org.bytedeco.javacpp.Loader.load(Loader.java:530)
at org.bytedeco.javacpp.helper.opencv_core$AbstractArray.<clinit>(opencv_core.java:109)
at com.sogeti.innovation.obcapture.bl.mobile.alg.ImageProcessingHelper.liveProcessImage(ImageProcessingHelper.java:46)
at com.sogeti.innovation.obcapture.bl.LiveProcessImage.doInBackground(LiveProcessImage.java:35)
at com.sogeti.innovation.obcapture.bl.LiveProcessImage.doInBackground(LiveProcessImage.java:21)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.sogeti.innovation.obcapture-1/base.apk"],nativeLibraryDirectories=[/data/app/com.sogeti.innovation.obcapture-1/lib/arm, /data/app/com.sogeti.innovation.obcapture-1/base.apk!/lib/armeabi-v7a, /vendor/lib, /system/lib]]] couldn't find "libopencv_imgproc.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:804)
at org.bytedeco.javacpp.Loader.load(Loader.java:604)
at org.bytedeco.javacpp.Loader.load(Loader.java:530)
at org.bytedeco.javacpp.opencv_core.<clinit>(opencv_core.java:10)
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:324)
at org.bytedeco.javacpp.Loader.load(Loader.java:585)
at org.bytedeco.javacpp.Loader.load(Loader.java:530)
at org.bytedeco.javacpp.helper.opencv_core$AbstractArray.<clinit>(opencv_core.java:109)
at com.sogeti.innovation.obcapture.bl.mobile.alg.ImageProcessingHelper.liveProcessImage(ImageProcessingHelper.java:46)
at com.sogeti.innovation.obcapture.bl.LiveProcessImage.doInBackground(LiveProcessImage.java:35)
at com.sogeti.innovation.obcapture.bl.LiveProcessImage.doInBackground(LiveProcessImage.java:21)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
这是设置.graddle文件:
include ':app', ":common", ":commonwidget", ":panowidget", ":base"
在我添加包“base”之前,一切都很正常
提前感谢您的帮助:D
编辑:多亏了@Prateek answer,我创建了JNILibs文件夹,然后添加了所需的.so文件。但是有一个问题,因为我没有所有需要的版本(arm64-v8a、armeabi、armeabi-v7a…),特别是关于我手机的版本。所以我试着从这里下载,但文件不是共享对象。所以是静态的。所以它不工作。。。有人能帮我吗?:)
解决方案:我只有32位版本的库文件“.so”。所以我所做的就是,像@Prateek所说的,将这些文件放在文件夹“JNILibs”的子文件夹“armeabi”、“armeabi-v7a”、“mips”和“x86”中。然后我通过在“build.graddle”应用程序文件中添加ndk规范来强制使用32位文件,如下所示
android {
compileSdkVersion 24
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "com.sogeti.innovation.obcapture"
minSdkVersion 19
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
jackOptions {
enabled false
additionalParameters("jack.incremental" : "true")
}
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
希望它能帮助别人:)你把libjniopencv_core.so文件放在JNI文件夹中了吗 我刚试过,现在错误变了,它说“由以下原因引起:java.lang.unsatifiedlinkerror:dlopen失败:”/data/app/com.sogeti.innovation.obcapture-1/lib/arm64/libjniopencv_core.so“是32位而不是64位”我认为“是”基数“我添加的包是64位的,但我的是32位的,或者类似的…嘿@Pratek,我想我理解版本问题,但现在还有一个问题,你能看看我的答案吗?”?谢谢:)如果你自己创建了android.mk文件,请共享这些文件的代码。我在jni文件夹中没有这样的文件
android {
compileSdkVersion 24
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "com.sogeti.innovation.obcapture"
minSdkVersion 19
targetSdkVersion 22
versionCode 1
versionName "1.0"
multiDexEnabled true
jackOptions {
enabled false
additionalParameters("jack.incremental" : "true")
}
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}