如何避免多个模块android应用程序中的重复依赖项

时间:2019-08-21 06:16:53

标签: android android-gradle-plugin android-module

我的Android应用程序中有2个模块。核心模块和一个功能模块。目前,我对这2个模块共有3个依赖关系,并将其添加到两个模块gradle文件中(这会导致更大的应用程序大小和冗余)。如何与android中的多个模块共享这些依赖项。

核心模块依赖性

   dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    api 'com.github.bumptech.glide:glide:4.9.0'
}

功能模块依赖项

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    //implementation project(':testmodule')
    api project(path:':coreModule',configuration: 'default')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
}

已在核心模块中使用api,并在api project(path:':coreModule',configuration: 'default')中用于功能模块

2 个答案:

答案 0 :(得分:1)

如果您正在写作

implementation 'com.xxx.android.x:1.2342'

表示当前模块需要此依赖项才能工作。在那里,您需要在两个模块中明确声明它

一个核心

另一个模块中的一个

您可以使用删除这些冗余的重复依赖项 api以外的implementation 因为api用于在一个模块中与其他模块共享依赖项。 因此,对于重复的依赖项,将impementation替换为api

例如:图书馆使用androidx.core:core-ktx:1.0.2 然后在库build.gradle中添加

api 'androidx.core:core-ktx:1.0.2'

在这里,您无需在应用模块中再次定义它。

答案 1 :(得分:0)

Android Studio总是警告有关重复的依赖项,这些重复的依赖项在构建release-apk文件时会花费大量时间。

您可以首先使用以下命令来识别重复的依赖项:

gradle -q dependencies yourProject:dependencies --configuration compile

命令结果将显示人类可读的所有依赖关系的树层次结构,如下所述。

compile - Classpath for compiling the main sources.
...
+--- project :yourProject
|    +--- com.loopj.android:android-async-http:1.4.6
|    +--- org.apache.httpcomponents:httpmime:4.2.5
|    |    \--- org.apache.httpcomponents:httpcore:4.2.4
|    \--- com.google.code.gson:gson:2.3.1
...

一旦确定了重复的依赖项,就可以使用build.gradle文件中的以下语法将它们从指定的库中排除。

//OneSignal
api ('com.onesignal:OneSignal:[3.6.2, 3.99.99]') {
    exclude group: 'android.arch.lifecycle', module: 'extensions'
    exclude group: 'com.android.support', module: 'design'
}

我希望这会有所帮助。