【发布时间】:2020-01-04 18:57:54
【问题描述】:
问题
我正在尝试使用两个库来修剪和压缩视频:Silicompressor 和 k4l-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 ....
-
我下载了 sillicompressor 和 k4l 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 文件