共享模块之间的编译依赖项

时间:2016-03-23 02:52:41

标签: android gradle

我有一个带有两个模块的android项目。这两个模块都依赖于android支持库。目前,支持库依赖项已添加到两个模块的gradle脚本中。

当我升级支持库版本时,我必须升级两个gradle文件中的版本。我有时可能忘记在两个文件中都这样做。所以我需要一种方法来在一个共同的位置声明支持版本。

This页面描述了一种方法,您可以在单独的文件中声明依赖项并将其包含在根gradle文件中。

这种方法对我有用,但也存在一些局限性。举个例子,如果有一个新的支持库,在之前的方法中,android studio给了我一个检查警告,说明有更新版本可用。使用新方法,android studio不再那样做了。此外,每当您在gradle文件中进行更改时,android studio都会要求重新同步项目。但是,如果我对分离的gradle依赖文件进行了更改,android studio不会要求我重新同步。

我试图直接将支持依赖项添加到根gradle文件的依赖项部分,如下所示,但android studio给了我一个警告。

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        compile "com.android.support:appcompat-v7:23.2.1"
    }
}

警告:

Fix plugin version and sync project.

有没有人知道我可以在中心位置声明依赖关系的其他方式?

1 个答案:

答案 0 :(得分:2)

最简单的方法是在您的buildscript块中声明一个管理整个构建的扩展变量。让我们来看一个Kotlin项目,例如,kotlin的版本必须在所有构建组件之间保持一致。这是一个定义buildscript的顶级build.gradle:

buildscript {
    ext.kotlin_version = '1.0.1'
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

请注意,它定义了ext.kotlin_version,然后在插件依赖项中使用它。

然后,在主app模块中:

dependencies {
    compile 'com.android.support:appcompat-v7:23.2.1'
    compile 'com.android.support:design:23.2.1'
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

我可以再次使用该变量来使用相同版本的kotlin stdlib编译依赖项。但我只需要在一个地方定义版本字符串。 ext是一种特殊的gradle方式,用于声明gradle域对象的额外属性。在buildscript中定义一个使其在其他地方可见以供使用。