【问题标题】:Using different versions of same library - More than one file was found with OS independent path 'builddef.lst'使用同一个库的不同版本 - 发现多个文件具有独立于操作系统的路径“builddef.lst”
【发布时间】:2020-01-04 18:57:54
【问题描述】:

问题

我正在尝试使用两个库来修剪和压缩视频:Silicompressork4l-video-trimmer。 问题是两个库都使用mp4parser,但它的版本不同。 k4l-video-trimmer 使用版本 1.1.20 作为 build.gradle 的依赖项,而 Silicompressor 使用版本 1.0.6 作为 jar 文件。 现在项目构建良好,但是当我尝试运行它时,我得到了错误:

发现多个文件具有独立于操作系统的路径“builddef.lst”

我已经尝试过的事情

在打包选项中排除 builddef.lst

我在应用级 build.gradle 中添加了这些行:

android {
    packagingOptions {
        exclude 'builddef.lst'
        exclude 'version.txt'
        exclude 'isoparser-default.properties'
    }
}

然后我又遇到了一个我无法解决的错误:

程序类型已经存在:com.coremedia.iso.BoxParser Message{kind=ERROR, text=程序类型已存在: com.coremedia.iso.BoxParser,sources=[未知源文件],工具 name=Optional.of(D8)}

从 k4l-video-trimmer 中排除 mp4parser

我用过

implementation ('life.knowledge4:k4l-video-trimmer:1.0') {
    exclude group: 'com.googlecode.mp4parser'
}

而不是

implementation 'life.knowledge4:k4l-video-trimmer:1.0'

现在,当我尝试修剪视频时,项目运行并崩溃。

java.lang.NoClassDefFoundError:解析失败:Lcom/googlecode/mp4parser/FileDataSourceViaHeapImpl; 在 life.knowledge4.videotrimmer.utils.TrimVideoUtils.genVideoUsingMp4Parser(TrimVideoUtils.java:72) 在 life.knowledge4.videotrimmer.utils.TrimVideoUtils.startTrim(TrimVideoUtils.java:65) 在 life.knowledge4.videotrimmer.K4LVideoTrimmer$5.execute(K4LVideoTrimmer.java:354) 在 life.knowledge4.videotrimmer.utils.BackgroundExecutor$Task.run(BackgroundExecutor.java:212) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 在 java.util.concurrent.FutureTask.run(FutureTask.java:237) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 在 java.lang.Thread.run(Thread.java:761)

从 Silicompressor 中排除 mp4parser

我导入了 Silicompressor 的模块而不是使用依赖行并删除了 mp4parser 的 jar 文件以强制库使用 1.1.20 版本。现在应用程序再次运行,但压缩视频没有音频!

使用两个版本的 mp4parser

我使用 jarjar 将 Silicompressor 使用的 jar 文件从 com.googlecode.mp4parser 重新打包到 org.repackage.com.googlecode.mp4parser。仍然有同样的问题。

构建.gradle

这是我的应用级 build.gradle 文件:

apply plugin: 'com.android.application'

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"
    defaultConfig {
        applicationId "---"
        minSdkVersion 16
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    repositories {
        google()
        jcenter({url "http://jcenter.bintray.com/"})
        mavenLocal()
        jcenter()
        maven { url "http://jzaccone.github.io/SlidingMenu-aar" }
        maven { url "https://jitpack.io" }
        maven { url 'https://maven.google.com' }
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
    }

    /*packagingOptions {
        exclude 'builddef.lst'
        exclude 'version.txt'
        exclude 'isoparser-default.properties'
    }*/
}

dependencies {
    ...
    implementation ('life.knowledge4:k4l-video-trimmer:1.0') {
        exclude group: 'com.googlecode.mp4parser'
    }
    implementation 'com.iceteck.silicompressorr:silicompressor:2.1'
}

感谢您的宝贵时间!

【问题讨论】:

  • 不知道?我还是想不通...
  • 兄弟我也在使用这些库,但有同样的问题....我知道是什么问题,但我不知道如何解决这个....这是因为他们在库中使用的 isoparser ....
  • 我下载了 sillicompressork4l trimmer 的库文件 .....然后我看到他们使用不同的 isoparser .... ...**sillicompressor** 使用自定义 isoparser ...但 k4l-trimmer 使用 GitHub sannies.mp4parser [github.com/sannies/mp4parser] ..**请在看到此内容后回复我** ....
  • @MilanPansuriya 我确实做到了。我现在不记得细节了,但据我所知,我只使用了 1.0.6 版本,并且我浏览了 k4l-video-trimmer 的代码,那里发生了一个简单的异常。我刚刚删除了它,一切正常。几天后我会发布一个详细的答案。
  • @ShubhendraSingh 我创建了将 lib 与 kl-trimmer 和 Silicompressor 结合起来,并将该项目作为 lib 包含并在我的 lib 中添加 jar 文件

标签: android gradle mp4parser


【解决方案1】:

@MilanPansuriya 的帮助下,我终于能够解决这个问题。请按照以下步骤解决上述问题:-

  1. 创建一个结合两个库(kl-trimmer 和 Silicompressor)的新库。就我而言,它是(kl-trimmer 和 VideoCompressor (https://github.com/fishwjy/VideoCompressor/))。
  2. 在您的库中使用 isoparser-1.0.6.jar。
  3. 现在,在构建新库后,您会在库 kl-trimmer 的 TrimVideoUtils 类中遇到错误。
  4. 错误将是找不到 FileDataSourceViaHeapImpl。实际上,特定类在更高版本的 isoparser 中可用。将其更改为 FileDataSourceImpl
  5. 现在库将在您的项目中正常构建。

注意:- 这两个库现在都可以正常工作,但是由于我们已将 FileDataSourceViaHeapImpl 更改为 FileDataSourceImpl,因此有时我会出现内存不足,而修剪一些大尺寸的视频(这显然应该发生并且也被旧版本的 kl-trimmer 用户报告)。

到目前为止,这是我能够得到的唯一解决方案。如果有人有更好的解决方案,请也更新我们。谢谢。

【讨论】:

  • @ Shubhendra Singh - 我发现 Siliprocessor 比 fishwjy 更好。我需要为我的项目整合修剪视频并同时压缩它们的功能。尽管有独立的库可用,因此没有找到一个可以在同一实例中同时执行这两种操作的库,因此需要付出这种努力。 github.com/Indark-a-bit/pick-trim-compress-mp4-videos 将文件解压缩到一个文件夹中,一切就绪!希望有人觉得它有用。干杯!
  • @Indark 感谢您的更新。这肯定会在将来对某人有所帮助。
【解决方案2】:

我能够通过执行上述答案所说的(结合两个库)来解决这个问题,但就我而言,我使用的是SiliCompressorAndroidDeveloperLB/VideoTrimmer,我还为遇到此问题并希望快速修复的任何人创建了一个库:) https://github.com/tobioyelekan/VideoTrimmerCompressor

【讨论】:

    猜你喜欢
    • 2018-11-03
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多