我正在使用最新的Android Studio 3.0.0-beta6来构建我的Android项目,并且存在这种依赖性问题。
Gradle
鼓励我将所有compile's
替换为implementation's
。这是我的项目结构:
项目:
模块1
Module1依赖于某些库,module2依赖于module1。但是,module1中的库在module2中不可见。我不想复制粘贴依赖项,而是希望只声明一次库依赖项。有一个简单的解决方案吗?谢谢。
module1的构建gradle:
dependencies {
....
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
...
}
module2的构建gradle:
implementation project(':module1')
答案 0 :(得分:5)
在根项目中 - > build.gradle你应该有类似的东西:
allprojects {
repositories {
jcenter()
}
}
在那里添加依赖项!!
<强>更新强>
如果您不希望所有模块都具有公共依赖关系,而只希望具有特定模块,请执行以下操作:
在此文件夹中创建.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}",
]
}
在根项目build.gradle中添加以下行:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.2.3'
}
}
// Load dependencies
apply from: 'gradleScript/dependencies.gradle'
在您的模块中相应地添加:
// Module build file
dependencies {
//......
compile supportDependencies.appCompat
compile supportDependencies.design
}
希望这有帮助!!!
答案 1 :(得分:1)
一个老问题,但是在我看来,您追求的只是在gradle文件中使用api
而不是implementation
?
如果模块X声明了api
依赖关系,则该依赖项可传递给依赖X的任何其他模块。但是,如果它声明了implementation
依赖关系,则该依赖关系中的类将放在该类上模块X的路径,但不会依次依赖于模块X的任何模块。
来自Gradle的documentation:
出现在api配置中的依赖项将传递给库的使用者,并因此出现在使用者的编译类路径上。另一方面,在实现配置中发现的依赖关系不会暴露给使用者,因此不会泄漏到使用者的编译类路径中。
具体来说:
模块1:
dependencies {
....
api 'io.reactivex.rxjava2:rxandroid:2.0.1'
api 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
...
}
模块2:
implementation project(':module1')
这不是您要尝试做的最简单的解决方案吗?