有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    有两个选项,第一个比第二个简单:

    1. 正在从已编译的“SKMaps”中删除Google包。jar文件

      • 对SKMaps进行备份。jar文件
      • 打开门。带有存档读取器的jar文件,例如7zip
      • 从3个文件夹中,输入'com'->;然后选择google文件夹&;删除它
      • 关闭存档并自动保存,之后不会出现错误
      • *但是您必须确保Guava库和SKMaps的可用性。项目中的jar(将其包含在lib文件夹中)
    2. 编写一个gradle脚本来反编译SKMaps。jar并在排除com/google/folder的情况下重新编译它(这与第一个选项基本相同),并在构建过程中包括新的jar

      • 不同之处在于,此选项不会修改原始SKMAP。jar,但复制一个没有复制包的jar

    应用任何一种方法,项目都将毫无问题地编译