【问题标题】:In an Android Gradle build, how to exclude dependencies from an included jar file?在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?
【发布时间】:2016-07-06 07:47:13
【问题描述】:

在我的 Android 项目中,我使用了一个 jar 库。 我将它包含在依赖项部分中,如下所示:

dependencies {
    ...

    compile files('libs/thethirdpartylibrary.jar')
    ...
}

我还想使用 okhttp 库,我将其包括在内:

compile ('com.squareup.okhttp:okhttp:2.7.5')

(这个特定版本的 okhttp 依赖于 okio 1.6.0。)

问题是第三方jar库依赖于okio v0.9.0,更糟糕的是,捆绑了它。

因此,我在构建时遇到 dex 冲突错误。

我可以通过从 jar 文件中手动删除 okio 来解决此问题,这似乎可行。但我想知道是否有办法在 gradle 中做到这一点。

我的问题:我可以在构建时使用 gradle 从包含的 jar 中删除捆绑的、传递的(

【问题讨论】:

  • 您为什么不能简单地重新创建第三方 jar 以删除其中不想要的类?我不认为 gradle 将允许您选择特定的类以排除文件依赖项。
  • 事实上,这就是我现在正在做的事情。我只是想知道是否有一种(简单的)方法可以使用 gradle 执行此操作,这样我就不必在每次供应商库更改时手动执行此操作。
  • 您好,您解决了吗?你能分享你的解决方案吗?

标签: android gradle jar android-gradle-plugin


【解决方案1】:

使用以下行排除依赖项中的组。

1.

configurations {
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

2.

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile ("com.xxx:xxx-commons:1.+") {
        exclude group: 'junit', module: 'junit'
    }
}

3.

configurations {
    runtime.exclude group: "org.slf4j", module: "slf4j-log4j12"
}

试试这个。

For more detail

【讨论】:

  • 2.此语法不适用于基于文件的 jar 文件(AFAIK...)
  • 3.我不认为我想这样做,因为我确实想包含一个版本的库——我只是不想使用 JAR 中的那个
  • 排除依赖共有三个选项,
  • 它并没有真正回答核心问题,即:如何从 JAR 中排除依赖项。
  • 但它似乎从所有东西中删除它,所以不幸的是这对我没有帮助;-|谢谢你的努力,顺便说一句!
【解决方案2】:

根据https://groups.google.com/forum/#!topic/adt-dev/g1AiJM7PeVs 此处的讨论,您想要做的事情是不可能的。

其他答案中建议的语法适用于“正常”的 Maven 依赖项。

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 2016-01-28
    • 1970-01-01
    • 2015-08-27
    • 2020-08-27
    • 2019-09-25
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    相关资源
    最近更新 更多