android - JavaCV和FFmpegMediaMetadataRetriever:DuplicateFileException

标签 android gradle android-gradle-plugin javacv

在我的Android项目中,我使用JavaCV,并且还需要FFmpegMediaMetadataRetriever来检索给定位置的帧:

dependencies {
    ...
    compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.3.3'
    compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-arm'
    compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-x86'
    compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'
    compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-x86'
    compile 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'
    ...
}

在gradle编译中,它失败,并出现DuplicateFileException错误:
Error:Execution failed for task ':app:transformNativeLibsWithMergeJniLibsForDebug'.
> com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK lib/x86/libavcodec.so
    File1: C:\Users\pingu\.gradle\caches\modules-2\files-2.1\org.bytedeco.javacpp-presets\ffmpeg\3.2.1-1.3\65a0880fd927fe901cead47b9c4be9ae76a28764\ffmpeg-3.2.1-1.3-android-x86.jar
    File2: C:\Users\pingu\.android\build-cache\957befefe8a63ddc13213dcddf7f709338e00edc\output\jni

有没有办法在我的Android应用程序中都拥有这个库?提前致谢

最佳答案

以下程序对我有用。

首先将这些行添加到 build.gradle 文件中:

packagingOptions {
    pickFirst 'lib/x86/libavcodec.so'
    pickFirst 'lib/x86/libavformat.so'
    pickFirst 'lib/x86/libavutil.so'
    pickFirst 'lib/x86/libswscale.so'
    pickFirst 'lib/armeabi/libavcodec.so'
    pickFirst 'lib/armeabi/libavformat.so'
    pickFirst 'lib/armeabi/libavutil.so'
    pickFirst 'lib/armeabi/libswscale.so'
    ...
}

然后编译似乎可以,但是在运行时出现错误:
java.lang.UnsatisfiedLinkError: [...] couldn't find "libjniopencv_core.so"

要解决这个问题 :
  • 创建文件夹 app / src / main / jniLibs / {arm,armeabi,armeabi-v7a,x86}
  • opencv-3.2.0-1.3-android-x86.jar 提取 * .so 文件到 app / src / main / jniLibs / x86
  • opencv-3.2.0-1.3-android-arm.jar 中提取 * .so 文件到 app / src / main / jniLibs / {arm,armeabi,armeabi-v7a}

  • 然后重建项目

    关于android - JavaCV和FFmpegMediaMetadataRetriever:DuplicateFileException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45462553/

    相关文章:

    java - 解析和操作字符串的有效方法

    java - 让 Android Studio 使用 Java 而不是 Kotlin?

    android - Gradle 无法在新的 Android Studio 2.0 中同步我的项目

    android - 将特定风格的依赖关系与维度联系起来

    gradle - 从gradle的子项目中引用外部项目

    java - executeWithListener 中的 NullPointerException

    android - 我如何在我的钛项目中使用本地镜像

    gradle - 当buildFeature.compose = true时如何添加gradle依赖?

    gradle - 在Jhipster中,我通过命令删除了文件,并在运行 “gradlew liquibaseDiffChangelog ”命令后删除了该错误

    android - 错误 ':android:transformKotlinClassesWithJillForDebug' 。在构建用 Kotlin + LibGDX 编写的 Android 应用程序时