使用JavaCV Android的UnsatisfiedLinkError

时间:2013-02-01 20:14:53

标签: android eclipse javacv

我正在尝试让JavaCV为Android工作以获得FFMPEG库的使用。我正在遵循我在下面复制的JavaCV website中安装Android的设置说明:

  

Eclipse(Android 2.2或更新版本):   按照此页面上的说明操作:http://developer.android.com/training/basics/firstapp/   转到文件>新>单击文件夹,将项目选择为父文件夹,键入“libs / armeabi”作为文件夹名称,然后单击完成。   将javacpp.jar和javacv.jar复制到新创建的“libs”文件夹中。   将所有* .so文件从javacv-android-arm.jar,opencv-2.4.3-android-arm.zip和ffmpeg-1.0-android-arm.zip直接提取到新创建的“libs / armeabi”文件夹中,没有创建任何新的子目录。   导航到项目>属性> Java构建路径>库,然后单击“添加JAR ...”。   从新创建的“libs”文件夹中选择javacpp.jar和javacv.jar。

我正在尝试在我的代码中使用FFmpegFrameGrabber类。当我运行时,我从logcat得到了这个错误:

  

02-01 14:40:35.550:W / dalvikvm(11583):异常Ljava / lang / UnsatisfiedLinkError;在初始化Lcom / googlecode / javacv / cpp / avutil;

时抛出      

02-01 14:40:35.550:W / dalvikvm(11583):异常Ljava / lang / ExceptionInInitializerError;在初始化Lcom / googlecode / javacv / cpp / avcodec;

时抛出      

02-01 14:40:35.550:D / AndroidRuntime(11583):关闭虚拟机

     

02-01 14:40:35.550:W / dalvikvm(11583):threadid = 1:线程退出,未捕获异常(组= 0x40015560)

这让我相信我的Android应用程序找不到avutil.so和avcodec.so,我把它放在了libs / armeabi文件夹中。但是,当我解压缩生成的APK eclipse时,两个文件都存在。

关于这个问题的原因的任何想法?

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人,我已设置Gist提供有关如何在Android Studio 2.1.1上设置JavaCV 1.1的分步说明。

这个tut将使用JavaCV 1.1,版本1.2目前有SIGSEGV issue。 JavaCV 1.1附带FFmpeg 2.8.1。

  1. 获取prebulit二进制文件here
  2. 提取并复制这些文件:
    • javacpp.jar 必要)。
    • javacv.jar 必要)。
    • ffmpeg.jar 必须使用FFmpeg )。
    • ffmpeg-android-arm.jar (针对arm CPU)。
    • ffmpeg-android-x86.jar (x86 CPU可选)。 进入项目的libs文件夹(在我的情况下为app/libs)。
  3. 点击app - > F4 - > Dependencies - > + - > File dependencies - >选择以前的所有 .jar
  4. 暂时,由于this issue,我们需要设置targetSdkVersion 22应用的build.gradle
  5. 可能需要在packagingOptions
  6. 中设置这些build.gradle

    android {     compileSdkVersion 23     buildToolsVersion“23.0.3”

    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
        exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'
    
        //might need these if you use openCV
        //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
        //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
    }
    

    }