最近在使用gradle的过程中遇到了这么一个报错:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
at com.android.dx.command.dexer.Main.run(Main.java:232)
at com.android.dx.command.dexer.Main.main(Main.java:174)
at com.android.dx.command.Main.main(Main.java:91)
其实我只是引用了一下recycleview,结果就死活编译不过去了。一番折腾加Google之后终于解决。
问题根本原因:
库与库之间存在交叉编译,一个class被编译了两次,所以报错。
查看交叉依赖的方法:
使用gralde命令:./gradlew.bat -q dependencies,然后就可以看到项目与项目之间的依赖关系,不过这招对我的问题完全没用。
问题解决:
这个项目我是后来接手的,原来是基于eclipse编译,后面是我手动加入的gralde编译并加了一些新功能,结果没曾想,老项目的libs
目录下面居然有个support-v4的jar包!!上面的交叉命令是看不到本地libs下面的jar包依赖的(本地也没依赖。。。),删掉libs下面多余的
v4包,搞定。