java如何使用SKMaps解决冲突依赖。广口番石榴
我正在从事一个使用Skobbler的OSM的项目。我的项目需要使用一个叫做guava的谷歌图书馆。我有地图。放置在libs/SKMaps上的jar。罐子,还有另一个罐子。另一方面,我得到了一些依赖项,如:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.安卓.support:support-v4:19.1.+'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'
compile group: 'com.google.guava', name: 'guava', version: '18.0'
}
这会在构建项目时导致冲突,如下所示
Error:Execution failed for task ':app:dexPlatoDebug'.
com.安卓.ide.common.internal.LoggedErrorException: Failed to run command: /home/opt/安卓-studio/sdk/build-tools/21.1.0/dx --dex --no-optimize --output /home/alex/Android/proy/app/build/intermediates/dex/plato/debug --input-list=/home/alex/Android/proy/app/build/intermediates/tmp/dex/plato/debug/inputList.txt Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.安卓.dex.DexException: Multiple dex files define Lcom/google/common/annotations/Beta; at com.安卓.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) at com.安卓.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) at com.安卓.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) at com.安卓.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) at com.安卓.dx.merge.DexMerger.merge(DexMerger.java:189) at com.安卓.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.安卓.dx.command.dexer.Main.runMonoDex(Main.java:302) at com.安卓.dx.command.dexer.Main.run(Main.java:245) at com.安卓.dx.command.dexer.Main.main(Main.java:214) at com.安卓.dx.command.Main.main(Main.java:106)
正如我们在这里看到的,冲突的产生是因为SKMaps依赖于
Lcom/google/common/annotations/Beta;
我之所以说SKMaps,是因为我在一个辅助项目上做了一些测试,以检测哪些JAR存在冲突,以及SKMaps。罐子和番石榴的组合有这种冲突。现在我的问题是:
如何从SKMaps中排除番石榴依赖性。罐子强>
或
是否可以将两个罐子放在过道上以避免冲突强>
谢谢
# 1 楼答案
有两个选项,第一个比第二个简单:
正在从已编译的“SKMaps”中删除Google包。jar文件
编写一个gradle脚本来反编译SKMaps。jar并在排除com/google/folder的情况下重新编译它(这与第一个选项基本相同),并在构建过程中包括新的jar
应用任何一种方法,项目都将毫无问题地编译