2017-05-16 7 views
0

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 :)

Antwort

0

Haben Sie libjniopencv_core.so Datei in JNI Ordner abgelegt?

+0

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 ... –

+0

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 :) –

+0

Share-Code von android.mk Datei, wenn Sie diese Dateien selbst erstellt haben. –

Verwandte Themen