gradle如何处理具有不同支持库v4版本的多个模块?

时间:2014-11-26 16:31:39

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

我有一个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尺寸而言,这是什么意思?

1 个答案:

答案 0 :(得分:1)

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

来自docs.gradle.com

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

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

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

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

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

  • 中的示例
  • 将任何依赖项(传递或不传递)配置为强制。如果冲突中的依赖性是传递依赖性,则此方法很有用。它还可用于强制第一级依赖项的版本。请参阅 ResolutionStrategy

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