我正在开发一个由Skobbler使用OSM的项目。我的项目需要使用名为guava的Google库。我将SKMaps.jar放在libs / SKMaps.jar上,也是另一个罐子。另一方面,我得到了一些依赖:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.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.android.ide.common.internal.LoggedErrorException:无法运行命令: /home/opt/android-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 错误代码: 2 输出: 意外的顶级例外情况: com.android.dex.DexException:多个dex文件定义Lcom / google / common / annotations / Beta; 在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) 在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 在com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) 在com.android.dx.command.dexer.Main.runMonoDex(Main.java:302) 在com.android.dx.command.dexer.Main.run(Main.java:245) 在com.android.dx.command.dexer.Main.main(Main.java:214) 在com.android.dx.command.Main.main(Main.java:106)
正如我们在这里看到的那样,冲突的产生是因为SKMaps依赖于
Lcom/google/common/annotations/Beta;
我说SKMaps是因为我在侧面项目上做了一些测试来检测哪些罐子有冲突,而SKMaps.jar和番石榴组合有这种冲突。现在这是我的问题:
如何从SKMaps.jar中排除番石榴依赖?
或
是否可以通过两个罐子来避免冲突?
由于
答案 0 :(得分:4)
有两个选项,第一个比第二个更容易:
从已编译的' SKMaps.jar'中删除Google软件包。档案
编写一个反编译SKMaps.jar的gradle脚本,并在排除com / google /文件夹的情况下重新编译它(这与第一个选项基本相同)并在构建过程中包含新jar
应用这两种方法,项目将编译没有任何问题。