在模块之间共享编译依赖关系

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

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

这个页面描述了一种方法,在这个方法中,在一个单独的文件中声明依赖关系,并将其包含在根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. 

有谁知道任何其他方式,我可以在一个中央的地方声明依赖?

最简单的事情是在你的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 ,然后在插件依赖项中使用它。

然后,在主应用程序模块中:

 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方式。 在build脚本中定义一个可以在其他地方使用。