从 Sonatype 下载我的库时出现多个 dex 文件错误
Multiple dex files error when downloading my library from Sonatype
我开发了一个已经存在了几个月的库,但我在从 Sonatype 存储库下载它时遇到了问题(上传它工作正常)。
我的库是MaterialList,可以通过
导入
将此行添加到您的 build.gradle 文件
compile 'com.github.dexafree.materiallist:2.1.0'
克隆项目并手动将库添加为模块
为了测试,您可以克隆 repo 并尝试两个选项,将 app/build.gradle 行从 compile project() 更改为第一个选项
当您通过设置 compile project
选项编译和 运行 时,它工作得很好。
但是当它从 Sonatype 下载时,它抱怨多个 dex 文件在我的库中需要的库上定义 class。
完整的跟踪如下:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/[sdk-path]/android/sdk/build-tools/21.1.2/dx --dex --no-optimize --output /[project-path]/MaterialList/app/build/intermediates/dex/debug --input-list=/[project-path]/MaterialList/app/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/nhaarman/listviewanimations/util/Swappable;
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:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
关于如何让它不发生的任何建议?
提前致谢
lib-manipulation
和 lib-core-slh
都依赖于 lib-core
自己。由于我在您的库中没有看到对任何 StickyListHeaders 内容的引用,因此我认为您不需要 lib-core-slh
依赖项。您还应该能够删除 lib-core
依赖项,因为 lib-manipulation
为您包含了它。
您也可以尝试直接包含依赖项,不带 @aar
后缀。也许这会把事情搞砸。
compile 'com.nhaarman.listviewanimations:lib-core:3.1.0'
compile 'com.nhaarman.listviewanimations:lib-manipulation:3.1.0'
compile 'com.nhaarman.listviewanimations:lib-core-slh:3.1.0'
虽然这可能是我的错误。让我知道这些解决方案是否适合您。
我开发了一个已经存在了几个月的库,但我在从 Sonatype 存储库下载它时遇到了问题(上传它工作正常)。
我的库是MaterialList,可以通过
导入将此行添加到您的 build.gradle 文件
compile 'com.github.dexafree.materiallist:2.1.0'
克隆项目并手动将库添加为模块
为了测试,您可以克隆 repo 并尝试两个选项,将 app/build.gradle 行从 compile project() 更改为第一个选项
当您通过设置 compile project
选项编译和 运行 时,它工作得很好。
但是当它从 Sonatype 下载时,它抱怨多个 dex 文件在我的库中需要的库上定义 class。
完整的跟踪如下:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
/[sdk-path]/android/sdk/build-tools/21.1.2/dx --dex --no-optimize --output /[project-path]/MaterialList/app/build/intermediates/dex/debug --input-list=/[project-path]/MaterialList/app/build/intermediates/tmp/dex/debug/inputList.txt
Error Code:
2
Output:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/nhaarman/listviewanimations/util/Swappable;
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:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
关于如何让它不发生的任何建议?
提前致谢
lib-manipulation
和 lib-core-slh
都依赖于 lib-core
自己。由于我在您的库中没有看到对任何 StickyListHeaders 内容的引用,因此我认为您不需要 lib-core-slh
依赖项。您还应该能够删除 lib-core
依赖项,因为 lib-manipulation
为您包含了它。
您也可以尝试直接包含依赖项,不带 @aar
后缀。也许这会把事情搞砸。
compile 'com.nhaarman.listviewanimations:lib-core:3.1.0'
compile 'com.nhaarman.listviewanimations:lib-manipulation:3.1.0'
compile 'com.nhaarman.listviewanimations:lib-core-slh:3.1.0'
虽然这可能是我的错误。让我知道这些解决方案是否适合您。