gpt4 book ai didi

java - SKMaps.jar与guava冲突依赖如何解决

转载 作者:行者123 更新时间:2023-11-30 07:02:19 26 4
gpt4 key购买 nike

我正在开发一个使用 Skobbler 的 OSM 的项目。我的项目需要使用一个名为 guava 的 Google 库。我将 SKMaps.jar 放在 libs/SKMaps.jar 上,还有另一个 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: Failed to run command: /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 Error Code: 2 Output: UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Lcom/google/common/annotations/Beta; at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) at com.android.dx.command.dexer.Main.runMonoDex(Main.java:302) at com.android.dx.command.dexer.Main.run(Main.java:245) at com.android.dx.command.dexer.Main.main(Main.java:214) at com.android.dx.command.Main.main(Main.java:106)

正如我们在这里看到的,冲突的产生是因为 SKMaps 依赖于

Lcom/google/common/annotations/Beta;

我说 SKMaps 是因为我一直在一个副项目上做一些测试来检测哪些 jar 有冲突,而 SKMaps.jar 和 Guava 组合有这种冲突。现在这是我的问题:

如何从 SKMaps.jar 中排除 Guava 依赖?

是否可以将两个 jar 放在一起而不引起冲突?

谢谢

最佳答案

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

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

    • 备份 SKMaps.jar 文件
    • 使用存档阅读器打开 .jar 文件,例如。 7zip
    • 从 3 个文件夹中,输入“com”-> 然后选择 google 文件夹并将其删除
    • 关闭存档自动保存,此后不会出错
    • *但是您必须确保项目中 Guava 库和 SKMaps.jar 的可用性(将其包含在 lib 文件夹中)
    • 区别是这个选项不会修改原来的SKMaps.jar,而是在没有重复包的情况下复制它

无论采用哪种方法,项目都可以毫无问题地编译。

关于java - SKMaps.jar与guava冲突依赖如何解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171620/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com