使用同一库的不同版本-使用与操作系统无关的路径“ builddef.lst”

时间:2018-07-14 08:20:18

标签: android gradle mp4parser

问题

我正在尝试使用以下两个库来修剪和压缩视频: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   消息{种类=错误,文本=程序类型已存在:   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。仍然有同样的问题。

Build.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'
}

感谢您的光临!

2 个答案:

答案 0 :(得分:2)

@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的用户也报告过这种情况)。

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

答案 1 :(得分:0)

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