我有一个Android
项目,我希望将特定函数重构为一个module
。我的app结构如下所示:
MyApp
|--app
|----build.gradle
|--myNewModule
|----build.gradle
|build.gradle (MyApp Project)
|settings.gradle
在项目中,我有一些只在myNewModule中需要的依赖项,以及整个项目所需的一些依赖项,例如: okHttpClient
。
目前,我的gradle文件如下所示:
build.gradle(Project MyApp)
定义用于在整个项目中设置相同库版本的变量。
...
ext {
butterknifeVersion = "7.0.1"
daggerVersion = "2.6"
moshiVersion = "1.1.0"
okhttpVersion = "3.4.1"
...
}
...
build.gradle(MyNewModule) 定义此模块所需的依赖关系
...
dependencies {
compile ("com.squareup.retrofit2:converter-simplexml:$retrofitVersion") {
exclude group: 'stax', module: 'stax-api'
exclude group: 'stax', module: 'stax'
exclude group: 'xpp3', module: 'xpp3'
}
compile "com.squareup.okhttp3:okhttp-urlconnection:$project.okHttpVersion"
compile "com.squareup.okhttp3:okhttp:$project.okHttpVersion"
compile "com.squareup.okhttp3:logging-interceptor:$project.okHttpVersion"
....
}
...
build.gradle(app) 定义其他依赖项,可以与MyNewModule中的依赖项重叠吗?
...
dependencies {
compile "com.jakewharton:butterknife:$project.butterknifeVersion"
compile "com.jakewharton.timber:timber:$project.timberVersion"
compile "com.jakewharton.threetenabp:threetenabp:$project.threetenabpVersion"
compile "com.squareup.okhttp3:okhttp-urlconnection:$project.okHttpVersion"
compile "com.squareup.okhttp3:okhttp:$project.okHttpVersion"
compile "com.squareup.okhttp3:logging-interceptor:$project.okHttpVersion"
...
}
...
build.gradle(Project MyApp)
在这里添加整个项目的所有依赖项?
...
dependencies {
compile "com.jakewharton:butterknife:$project.butterknifeVersion"
compile "com.jakewharton.timber:timber:$project.timberVersion"
compile "com.jakewharton.threetenabp:threetenabp:$project.threetenabpVersion"
compile "com.squareup.okhttp3:okhttp-urlconnection:$project.okHttpVersion"
compile "com.squareup.okhttp3:okhttp:$project.okHttpVersion"
compile "com.squareup.okhttp3:logging-interceptor:$project.okHttpVersion"
...
}
...
我只是想遵循良好的设计模式,并且不会增加项目的dexcount,因为它使用了很多库,并且接近多dex,我想避免使用。
编辑:我改变了第二个问题的措辞,因为它有误导性。 我只是想在两个模块中添加一些相同的依赖项,因为我可能会从myNewModule中创建一个单独的库,然后它仍然需要例如一个okHttpClient,不能再依赖主项目中的依赖。
答案 0 :(得分:1)
如果我在不同的模块中对同一个库有依赖关系,那么Android会将其识别为一个依赖关系,还是会将apk的dexcount加倍?
Gradle自动处理它 如果要在库中以及使用库的模块中添加相同的依赖项,gradle将仅添加一次。
这是定义依赖关系的好方法吗?在我的例子中,myNewModule将包含仅在其中需要的依赖项,以及应用程序模块中所需的依赖项。
不在我看来。
您的图书馆应包含仅包含所需的依赖项
没有理由包含将使用它的模块将使用的依赖项。
否则,我是否可以将公共依赖项直接放入项目的build.gradle文件中?
问题不是那么清楚 每个模块都应该具有依赖关系,但您可以按照问题中描述的方式集中它们。