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

Noo*_*les 6 android gradle android-support-library android-gradle-plugin

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

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

dependencies {
            compile 'com.android.support:support-v4:21.0.0'
        }
Run Code Online (Sandbox Code Playgroud)

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')
    }
Run Code Online (Sandbox Code Playgroud)

3)还有一个模块,在这种情况下我们可以调用Module3,也取决于support-v4但是与其他模块的修订版本不同,例如:

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

问题:

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

2)它究竟做了什么?

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

Gio*_*oft 3

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

来自docs.gradle.com

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

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

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

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

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

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

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