Ich bin ein Android-App opencv developping und ich mit einem Problem bin stecken ...konnte nicht gefunden werden "libjniopencv_core.so"
Der Fehler das ich habe ist:
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)
hier
ist, was die build.graddle Datei enthält:
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.application'
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")
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/1.2/javacpp-presets-1.2.pom.xml'
pickFirst 'META-INF/maven/org.bytedeco.javacpp-presets/org.bytedeco.javacpp-presets-1.2.pom.xml'
}
}
dependencies {
compile files('libs/javacpp-1.3.jar')
compile files('libs/javacv-1.3.jar')
compile files('libs/opencv-3.1.0-1.3-android-arm.jar')
compile files('libs/opencv-3.1.0-1.3.jar')
compile files('libs/ffmpeg-3.2.1-1.3-android-arm.jar')
compile files('libs/ffmpeg-3.2.1-1.3.jar')
compile fileTree(include: ['*.jar'], dir: 'libs')
compile files('libs/maps.jar')
compile "com.android.support:appcompat-v7:24.1.1"
compile "com.android.support:cardview-v7:24.1.1"
compile "com.android.support:recyclerview-v7:24.1.1"
compile "com.android.support:design:24.1.1"
compile "com.android.support:support-v4:24.1.1"
compile 'com.google.android.gms:play-services:9.0.2'
compile 'com.github.bluejamesbond:textjustify-android:2.1.1'
compile 'com.google.android.gms:play-services-ads:9.0.2'
compile 'com.google.android.gms:play-services-identity:8.4.0'
compile 'com.google.android.gms:play-services-gcm:9.0.2'
compile 'com.android.support:multidex:1.0.0'
compile 'com.squareup.okio:okio:1.8.0'
compile 'commons-codec:commons-codec:1.9'
compile 'com.google.android.gms:play-services-auth:9.0.2'
compile 'com.android.support:multidex:1.0.1'
compile 'org.florescu.android.rangeseekbar:rangeseekbar-library:0.3.0'
compile 'com.theartofdev.edmodo:android-image-cropper:2.3.1'
compile project(':common')
compile project(':commonwidget')
compile project(':panowidget')
compile project(':base')
}
Und hier ist die setti ngs.graddle Datei:
include ':app', ":common", ":commonwidget", ":panowidget", ":base"
Alles funktioniert gut, bis ich das Paket „Basis“ hinzugefügt.
Vielen Dank im Voraus für Ihre Hilfe: D
EDIT: Dank @Prateek Antwort, die ich die JNILibs Ordner erstellt und hinzugefügt dann die .so-Dateien benötigt. Aber es gab ein Problem, weil ich nicht alle benötigten Versionen (arm64-v8a, armeabi, armeabi-v7a ...) und besonders die, die mein Telefon betreffen, habe. Also habe ich versucht, es von hier herunterzuladen, aber die Dateien sind kein gemeinsames Objekt .so aber statisch .a, so dass es nicht funktioniert ... Könnte mir jemand dabei helfen? :)
LÖSUNG: Ich habe nur die 32-Bit-Version der Bibliotheksdateien ".so". Also, was ich getan habe, ist, wie @Prateek gesagt hat, diese Dateien in die Unterordner "armeabi", "armeabi-v7a", "mips" und "x86" des Ordners "JNILibs" zu legen. Dann erzwang ich die Verwendung der 32-Bit-Dateien durch Hinzufügen der ndk Spezifikation in der "build.graddle" App-Datei wie folgt.
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"
}
}
}
Hoffe, es kann hilft jemand :)
Ich habe es gerade versucht und jetzt der Fehler geändert, heißt es "verursacht durch: java.lang.UnsatisfiedLinkError: dlopen gescheitert:" /data/app/com.sogeti.innovation.obcapture-1/lib/arm64/libjniopencv_core. Also "ist 32-Bit statt 64-Bit" " Ich denke, das" Basis "-Paket, das ich hinzugefügt habe, ist 64 Bit, aber meine .so ist 32 Bits oder so ... –
Hey @Prateek, ich glaube, ich habe verstanden Das Problem mit dem Versions-Problem, aber jetzt gibt es ein weiteres Problem, können Sie einen Blick auf meine Antwort? Danke :) –
Share-Code von android.mk Datei, wenn Sie diese Dateien selbst erstellt haben. –