如何解决与SKMaps.jar和番石榴的冲突依赖性

时间:2015-03-20 16:39:47

标签: java jar skmaps

我正在开发一个由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中排除番石榴依赖?

是否可以通过两个罐子来避免冲突?

由于

1 个答案:

答案 0 :(得分:4)

有两个选项,第一个比第二个更容易:

  1. 从已编译的' SKMaps.jar'中删除Google软件包。档案

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

    • 不同之处在于此选项不会修改原始SKMaps.jar,而是在没有重复包的情况下复制它

    应用这两种方法,项目将编译没有任何问题。