在 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 中运行