我的gradle文件中有两个库需要slf4j。Pusher和Gimbal。这两个罐子里都装着slf4j。因此,即使我告诉gradle忽略它们(multiDexEnabled为true),我仍然会收到一个名称空间错误。
有人知道怎么解决这个问题吗?
com.android.dex.DexException: Multiple dex files define Lorg/slf4j/impl/StaticLoggerBinder;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
Error:Execution failed for task ':app:dexDebug'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
我收到的错误(multiDexEnabled true):
Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
>java.util.zip.ZipException: duplicate entry: org/slf4j/helpers/BasicMarker.class
Multidex解决了一个与您描述的问题截然不同的问题。Multidex解决了每个dex文件只能使用65000个方法的问题。您可以在此处找到multidex的文档。
相反,你想做的是从你的一个库中排除sl4j,这里有一个例子,根据导致问题的依赖关系,它可能是什么样子的:
compile ('com.example.library:library-with-sl4j:1.0') {
exclude group: 'org.sl4j', module: 'sl4j-simple'
}
您必须确定是哪个库导致了问题,以及需要排除哪个sl4j模块。
理想情况下,您应该通知使用旧版本的库作者,他们应该更新,以便您的所有依赖项都使用相同的(最新)版本。