在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?

Posted

技术标签:

【中文标题】在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?【英文标题】:In an Android Gradle build, how to exclude dependencies from an included jar file? 【发布时间】: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 执行此操作,这样我就不必在每次供应商库更改时手动执行此操作。 您好,您解决了吗?你能分享你的解决方案吗? 【参考方案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 依赖项。

【讨论】:

以上是关于在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 gradle 多项目构建中包含 Android 项目?

如何在 gradle kts 中排除(忽略)android 构建变体

如何在 Android Studio 项目中将库添加到 Gradle 构建?

如何使用 Gradle 构建系统让 PhoneGap 项目在 Android Studio 中运行

如何使用 Android Studio 和 gradle 构建一个 android 库?

在 Android Gradle 构建中,如何从包含的 jar 文件中排除依赖项?