如何在子项目中使用相同的依赖项而不重复自己?

时间:2018-05-04 16:40:57

标签: android android-studio gradle

我有一个Android项目,使用gradle设置,包括:

1。)两个子项目(Android Studio模块构建略有不同的应用程序),带有自己的build.gradle文件。

2。)一个"图书馆项目"共享,通用代码。

目前,"依赖"这两个子项目的build.gradle文件的块有一堆相同的行(违反了#34;不要重复自己"原则。):

dependencies {
    ....
    implementation rootProject.ext.timber
    implementation rootProject.ext.glide
    ....
}

这些行引用文件中的定义" dependencies.gradle"在项目设置的根目录中。

ext {
    timber = 'com.jakewharton.timber:timber:4.7.0'
    glide = 'com.github.bumptech.glide:glide:4.6.1'
    ....
}

("实现foo"行的列表比这个例子中的长得多。)

现在我的问题: 在一个地方定义这些依赖项的最佳方法是什么?或者,避免在整个地方重复这些操作的最佳方法是什么(例如,如果我有两个以上的模块共享一些相同的依赖项)。

2 个答案:

答案 0 :(得分:1)

我有点理解你在问什么,但是......如果你不分享,那么“共同的共享代码”有什么意义,例如,Glide? :) 事实上,如果您使用的是Gradle 3. +那么您必须使用implementation更改api

所以,在你的公共库/代码中:

dependencies {
    ....
    api rootProject.ext.timber
    api rootProject.ext.glide
    ....
}

如果您想了解更多相关信息,请查看the official docs以了解草图迁移(他们介绍了所有这些新内容)。

你会发现:

  1. implementation 'example.dependency:1.0.0’ - >仅在此模块中使用。
  2. api 'example.dependency:1.0.0’ - >也适用于任何依赖于模块的构建版本。

答案 1 :(得分:1)

您可以通过让根构建将常用步骤应用于不同的项目来共享项目配置。

使用:

allprojects {
    // Shared config for ALL projects goes here
}

或与:

subprojects {
    // Shared config for ALL child projects
}

所以在你的情况下,你会有:

subprojects {
    dependencies {
        ....
        implementation rootProject.ext.timber
        implementation rootProject.ext.glide
        ....
    }
}

除了这些方法之外,您还可以使用configure()方法,该方法将项目列表作为参数,并仅配置这些方法。您可以使用任何您喜欢的过滤系统来获取项目列表。

有关详细信息,请参阅documentation on authoring multi project builds