Android Gradle在另一个模块中包含模块依赖项

Євг*_*вич 5 dependencies android android-gradle-plugin

我正在使用最新的Android Studio 3.0.0-beta6来构建我的Android项目,并且存在此依赖项问题。 Gradle鼓励我compile'simplementation's。这是我的项目结构:

项目:

  • 模块1

    • 模块2

Module1取决于某些库,module2取决于module1。但是,来自module1的库在module2中不可见。我不想复制粘贴依赖项,而是只将库依赖项声明一次。有一个简单的解决方案吗?谢谢。

module1的构建包:

dependencies {
    ....
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    ...
}
Run Code Online (Sandbox Code Playgroud)

module2的构建包:

implementation project(':module1')
Run Code Online (Sandbox Code Playgroud)

mat*_*rix 5

在您的Root Project-> build.gradle中,您应该具有以下内容:

allprojects {
    repositories {
        jcenter()
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里添加依赖项!!

更新

如果您不希望所有模块都具有公共依赖性,而只希望特定模块,则可以执行以下操作:

  1. 在您的Root Project / gradleScript中创建一个文件夹
  2. 在此文件夹中创建一个.gradle文件(例如gradleScript / dependencies.gradle),如下所示:

    ext {
    
    //Version
    
    supportLibrary = '22.2.1'
    
    //Support Libraries dependencies
    supportDependencies = [
            design           :         "com.android.support:design:${supportLibrary}",
            recyclerView     :         "com.android.support:recyclerview-v7:${supportLibrary}",
            cardView         :         "com.android.support:cardview-v7:${supportLibrary}",
            appCompat        :         "com.android.support:appcompat-v7:${supportLibrary}",
            supportAnnotation:         "com.android.support:support-annotations:${supportLibrary}",
    ]
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您的根项目build.gradle中添加以下行:

    buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.2.3'
    }
    }
    
    // Load dependencies
    apply from: 'gradleScript/dependencies.gradle'
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在模块中相应地添加以下内容:

    // Module build file
    
    dependencies {
        //......
        compile supportDependencies.appCompat
        compile supportDependencies.design
    }
    
    Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!!!


JHH*_*JHH 5

老问题,但在我看来,您所追求的只是在您的 gradle 文件中使用api而不是使用implementation

如果模块 X 声明了一个api依赖项,它可以传递给依赖于 X 的任何其他模块。但是implementation,如果它声明了一个依赖项,则该依赖项中的类将放在模块 X 的类路径上,但不适用于任何模块依次依赖在模块 X 上。

从 Gradle 的文档

api 配置中出现的依赖项将传递给库的使用者,因此将出现在使用者的编译类路径上。另一方面,在实现配置中发现的依赖项不会暴露给消费者,因此不会泄漏到消费者的编译类路径中。

所以具体来说:

模块一:

dependencies {
    ....
    api 'io.reactivex.rxjava2:rxandroid:2.0.1'
    api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    ...
}
Run Code Online (Sandbox Code Playgroud)

模块二:

implementation project(':module1')
Run Code Online (Sandbox Code Playgroud)

这不是您想要做的最简单的解决方案吗?