2012-07-17 3 views
2

Je travaille sur un projet Android basé sur Javacv. J'ai suivi les instructions qui ont été données dans les fichiers Readme.txt du projet. Placé tous les fichiers .so dans le dossier libs/armeabi. et ont utilisé les lignes suivantes pour convertir les images en film. Mais j'ai reçu le journal suivant.Fichiers Android Jni .so ExceptionInInitializerError et UnsatisfiedLinkError: Bibliothèque jniopencv_core non trouvé

* Logcat *

07-16 16:38:32.790: D/dalvikvm(27175): No JNI_OnLoad found in /data/data/com.javacv.ffmpeg/lib/libavutil.so 0x44e8db60, skipping init 
07-16 16:38:32.800: W/dalvikvm(27175): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lcom/googlecode/javacv/cpp/avutil;.<clinit> 
07-16 16:38:32.800: W/dalvikvm(27175): Exception Ljava/lang/ExceptionInInitializerError; thrown during Lcom/googlecode/javacv/cpp/avcodec;.<clinit> 
07-16 16:38:32.800: W/dalvikvm(27175): Exception Ljava/lang/ExceptionInInitializerError; thrown during Lcom/googlecode/javacv/cpp/avformat;.<clinit> 
07-16 16:38:33.160: D/dalvikvm(27175): Trying to load lib /data/data/com.javacv.ffmpeg/lib/libopencv_core.so 0x44e8db60 
07-16 16:38:33.160: I/dalvikvm(27175): Unable to dlopen(/data/data/com.javacv.ffmpeg/lib/libopencv_core.so): Cannot load library: get_lib_extents[759]: 1196 - /data/data/com.javacv.ffmpeg/lib/libopencv_core.so is not a valid ELF object 
07-16 16:38:33.170: W/dalvikvm(27175): Exception Ljava/lang/UnsatisfiedLinkError; thrown during Lcom/googlecode/javacv/cpp/opencv_core;.<clinit> 
07-16 16:38:33.170: W/dalvikvm(27175): Exception Ljava/lang/ExceptionInInitializerError; thrown during Lcom/googlecode/javacv/cpp/opencv_imgproc;.<clinit> 
07-16 16:38:33.170: W/dalvikvm(27175): Exception Ljava/lang/ExceptionInInitializerError; thrown during Lcom/googlecode/javacv/cpp/opencv_highgui;.<clinit> 
07-16 16:38:33.170: D/AndroidRuntime(27175): Shutting down VM 
07-16 16:38:33.170: W/dalvikvm(27175): threadid=1: thread exiting with uncaught exception (group=0x400207c8) 
07-16 16:38:33.190: E/AndroidRuntime(27175): FATAL EXCEPTION: main 
07-16 16:38:33.190: E/AndroidRuntime(27175): java.lang.ExceptionInInitializerError 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.javacv.ffmpeg.ZT_FFMPEG_JAVACVActivity.onCreate(ZT_FFMPEG_JAVACVActivity.java:19) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.os.Looper.loop(Looper.java:123) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.reflect.Method.invokeNative(Native Method) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.reflect.Method.invoke(Method.java:521) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at dalvik.system.NativeStart.main(Native Method) 
07-16 16:38:33.190: E/AndroidRuntime(27175): Caused by: java.lang.ExceptionInInitializerError 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.Class.classForName(Native Method) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.Class.forName(Class.java:235) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacpp.Loader.load(Loader.java:334) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:91) 
07-16 16:38:33.190: E/AndroidRuntime(27175): ... 14 more 
07-16 16:38:33.190: E/AndroidRuntime(27175): Caused by: java.lang.ExceptionInInitializerError 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.Class.classForName(Native Method) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.Class.forName(Class.java:235) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacpp.Loader.load(Loader.java:334) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:96) 
07-16 16:38:33.190: E/AndroidRuntime(27175): ... 18 more 
07-16 16:38:33.190: E/AndroidRuntime(27175): Caused by: java.lang.UnsatisfiedLinkError: Library jniopencv_core not found 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.Runtime.loadLibrary(Runtime.java:461) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at java.lang.System.loadLibrary(System.java:557) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:444) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacpp.Loader.load(Loader.java:368) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacpp.Loader.load(Loader.java:315) 
07-16 16:38:33.190: E/AndroidRuntime(27175): at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:131) 
07-16 16:38:33.190: E/AndroidRuntime(27175): ... 22 more 

Mon code source

package com.javacv.ffmpeg; 
import static com.googlecode.javacv.cpp.opencv_highgui.cvLoadImage; 
import java.io.File; 
import java.util.ArrayList; 
import static com.googlecode.javacv.cpp.opencv_highgui.CvVideoWriter; 
import android.annotation.SuppressLint; 
import android.app.Activity; 
import android.os.Bundle; 
import android.provider.MediaStore.Images; 
import android.util.Log; 
import com.googlecode.javacpp.annotation.ByPtrPtr; 
import com.googlecode.javacpp.annotation.ByVal; 
import com.googlecode.javacv.cpp.opencv_core; 
import com.googlecode.javacv.cpp.opencv_core.IplImage; 
public class ZT_FFMPEG_JAVACVActivity extends Activity { 

    com.googlecode.javacv.FFmpegFrameRecorder recorder ; 
    private String TAG="kljadf"; 
    private IplImage colorImage; 
    private IplImage image_small; 
    private File[] file; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


    //========== have used previously to convert the single image to movie ========= 
     /*opencv_core.IplImage image = cvLoadImage("/mnt/sdcard/image.jpg"); 


     com.googlecode.javacv.FFmpegFrameRecorder recorder = new com.googlecode.javacv.FFmpegFrameRecorder("/mnt/sdcard/test.3gp",256,256); 
     try { 
      recorder.setCodecID(5); 
      recorder.setFormat("3gp"); 
      recorder.setPixelFormat(0); 
      recorder.start(); 
      for (int i=0;i<10;i++) 
       { 
       recorder.record(image); 
       } 
      recorder.stop(); 
      } 
     catch (Exception e){ 
      e.printStackTrace(); 
      }*/ 

// ========== ont utilisé précédemment pour convertir l'image unique film =========

 ArrayList<File>iamges=new ArrayList<File>(); 

     iamges.add(new File("mnt/sdcard/image")); 
     iamges.add(new File("mnt/sdcard/image.png")); 

     File[] file=iamges.toArray(new File[iamges.size()]); 
     file=iamges.toArray(new File[iamges.size()]); 
     writeMovie(file,"Rajesh.mp4"); 
    } 

@Suppress Lint ("ParserError") writeMovie public void (fichier [] fichiers, String name) {

 double fps = 30;    
     int sas =com.googlecode.javacv.cpp.opencv_highgui.CV_FOURCC('U', '2', '6', '3'); 

     CvVideoWriter writer = com.googlecode.javacv.cpp.opencv_highgui.cvCreateVideoWriter(name,sas, fps, new com.googlecode.javacv.cpp.opencv_core.CvSize(640,480), -1); //CV_LOAD_IMAGE_UNCHANGED values is -1 
     if (writer == null) { 
       Log.e(TAG, "Can not create Writer!"); 
     } 
     for (File list:files) { 
      colorImage = cvLoadImage(list.toString(), 1); //CV_LOAD_IMAGE_COLOR =value for this=1 sp replaced by 1 
      if (colorImage == null) { 
        Log.e(TAG, "Color Image is NULL!"); 
      } 
      image_small = opencv_core.cvCreateImage(opencv_core.cvSize(640, 480), colorImage.depth(), 4); //colorImage.nChannels()=4 as per jar file 

      //or whatever color depth/channel number you need... 
      if (image_small == null) { 
        Log.e(TAG, "Image Small is NULL!"); 
      } 
      com.googlecode.javacv.cpp.opencv_imgproc.cvResize(colorImage, image_small, 1); //CV_INTER_LINEAR==1 
      if (writer != null) { 
        cvWriteFrame(writer, image_small); 
      } else { 
        Log.e(TAG, "Can not write frame, No writer!"); 
      } 
      opencv_core.cvReleaseImage(colorImage); 
      opencv_core.cvReleaseImage(image_small); 
     } 
     cvReleaseVideoWriter(writer); 
     finish(); 
} 

    public static native void cvReleaseVideoWriter(@ByPtrPtr CvVideoWriter paramCvVideoWriter); 
    public static native int cvWriteFrame(CvVideoWriter paramCvVideoWriter, opencv_core.IplImage paramIplImage); 
    public static native CvVideoWriter cvCreateVideoWriter(String paramString, int paramInt1, double paramDouble, @ByVal opencv_core.CvSize paramCvSize, int paramInt2); 

**

Placé tous les fichiers .so dans les deux libs/armeabi et libs/dossier armeabi_v7. S'il vous plaît aidez-moi à résoudre ce problème.

Merci.

+0

Salut les gars j'ai résolu ce problème merci. – itsrajesh4uguys

+0

Comment avez-vous résolu le problème? – Pete

Répondre

0

Avez-vous dans votre classe qui veut utiliser la bibliothèque:

static { 
    System.loadLibrary("yourlibname") 
} 

Ce nom est censé être sans le préfixe lib et sans l'extension .so

+0

Je n'ai aucun code jni dans mon projet. Mais ont ajouté les fichiers javacpp.jar et javacv.jar .. pour cela aussi je dois ajouter system.loadlibrary? – itsrajesh4uguys

+0

@Rajesh, oui vous devez ajouter l'appel System.loadLibrary. Voir l'exemple hello-jni dans le NDK Android –

+0

Celui qui downvoted s'il vous plaît expliquer non? –

0

Vous avez une erreur qui est une marque (dans mon oppinion)

07-16 16:38:33.190: E/AndroidRuntime(27175): java.lang.ExceptionInInitializerError 

si vous ne l'avez pas chargé le lib vous auriez vu une erreur de liaison non satisfaite, mais lorsque le ExceptionInInitializerError est indiqué, cela signifie généralement que la version de NDK qui a été utilisée pour créer la bibliothèque n'est pas compatible avec le périphérique.

essayer de: 1. Vérifiez la version NDK vs la version de l'émulateur/périphériques que vous utilisez 2. Si vous n'utilisez pas le contrôle officiel NDK si la version NDK vous est compatible avec la version vous utilisez 3. tester avec le dernier SDK pour voir si elle fonctionne (dans le cas où le problème est l'un des ci-dessus)

En outre, le cas 2 est que vous avez une dépendance de bibliothèque, comme par exemple lors du chargement de cusombuilt Ouvrez SSL afin de charger la libssl.so vous devez d'abord charger libcrypto.so puisque la lib ssl est liée à la librairie crypto.

Vous devez connaître les dépendances internes de la bibliothèque.

Questions connexes