繁体   English   中英

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

[英]Android Gradle include module dependencies in another module

我正在使用最新的 Android Studio 3.0.0-beta6 来构建我的 Android 项目,但存在此依赖性问题。 Gradle鼓励我更换所有compile's使用implementation's 这是我的项目结构:

项目:

  • 模块1

    • 模块2

Module1 依赖于一些库,module2 依赖于 module1。 但是,模块 1 中的库在模块 2 中不可见。 我不想复制粘贴依赖项,而是希望库依赖项只声明一次。 有没有简单的解决方案? 谢谢。

module1 的构建等级:

dependencies {
    ....
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
    ...
}

module2 的构建等级:

implementation project(':module1')

在你的 Root Project -> build.gradle 你应该有这样的东西:

allprojects {
    repositories {
        jcenter()
    }
}

在那里添加依赖项!!

更新

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

  1. 在您的根项目/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}", ] }
  3. 在您的根项目 build.gradle 中添加以下行:

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

     // Module build file dependencies { //...... compile supportDependencies.appCompat compile supportDependencies.design }

希望这有帮助!!!

老问题,但在我看来,您所追求的只是在您的 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'
    ...
}

模块二:

implementation project(':module1')

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM