【问题标题】:How does gradle handle multi modules with different support library v4 revisions?gradle 如何处理具有不同支持库 v4 版本的多个模块?
【发布时间】:2015-01-25 02:00:05
【问题描述】:

我有一个 Android 项目,它依赖于不同的模块,每个模块都依赖于 android support-v4 库的不同版本

1) 我的应用还依赖于最新的 android support-v4 库(修订版 21),所以在这个 build.gralde 中我写了这样一行:

dependencies {
            compile 'com.android.support:support-v4:21.0.0'
        }

2) Facebook SDK (v.3.15) 模块也依赖于 android 支持库 v4,但修订版 13 及其 build.gradle 文件显示:

dependencies {
        compile 'com.android.support:support-v4:13.0.+'
        compile files('../libs/bolts.jar')
    }

3) 以及另外一个模块,在这种情况下我们可以调用 Module3,它也依赖于 support-v4,但与其他模块的修订版不同,如下所示:

dependencies {
        compile 'com.android.support:support-v4:19.0.+'
        compile files('../libs/bolts.jar')
    }

问题:

1) gradle 如何处理不同的 support-v4 库版本?

2) 它到底是做什么的?

3) 就 apk 大小而言是什么意思?

【问题讨论】:

  • "gradle 如何处理不同的 support-v4 库版本?" -- 根据build.gradle compile 设置,它要么使用匹配所有内容的设置,要么构建失败。应用程序中的任何给定依赖项只能有一个副本,否则会在类名上发生冲突。
  • 您能否为这个例子更好地解释一下,好吗?这是否意味着 gradle 使用这个示例的最新版本?
  • 我的直觉是它会导致构建失败,因为该库没有同时具有三个不同版本的版本。但是,我没有玩过这个场景。如果你已经设置好了,运行一个 Gradle 依赖关系报告来看看它到底会使用什么:gradle.org/docs/current/userguide/…(参见“列出项目依赖关系”)
  • 我没有带我的笔记本电脑,我可以试试看它是否失败。无论如何,我的意图是强制每个模块使用最新版本。但我害怕破坏这些模块中的某些东西。你有什么建议?
  • “无论如何,我的意图是强制每个模块使用最新版本”——有办法做到这一点,使用exclude 选项表示你想要一个依赖项(例如,Facebook SDK)但是要排除某些传递依赖项,您将在其他地方感到满意。 “你有什么建议?” ——大量的测试。 :-)

标签: android gradle android-gradle-plugin android-support-library


【解决方案1】:

在这种情况下,Gradle 将无法构建(在我的皮肤上测试,我没有找到其他解决方案) “不幸的是”您必须在任何模块上使用相同版本的支持。

来自docs.gradle.com

Gradle 提供以下冲突解决策略:

  • 最新:使用最新版本的依赖项。这是 Gradle 的默认策略,只要版本向后兼容,这通常是一个合适的选择。

  • 失败:版本冲突导致构建失败。此策略要求在构建脚本中明确解决所有版本冲突。有关如何明确选择特定版本的详细信息,请参阅 ResolutionStrategy。

虽然上面介绍的策略通常足以解决大多数冲突,但 Gradle 提供了更细粒度的机制来解决版本冲突:

  • 将第一级依赖配置为强制。如果冲突中的依赖已经是第一级依赖,这种方法很有用。请参阅 DependencyHandler 中的示例。

  • 将任何依赖项(传递或非传递)配置为强制。如果冲突中的依赖是传递依赖,这种方法很有用。它也可以用来强制第一级依赖的版本。请参阅 ResolutionStrategy

  • 中的示例
  • 依赖解析规则是 Gradle 1.4 中引入的一项孵化功能,可让您对为特定依赖选择的版本进行细粒度控制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多