3

我的 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')

4

2 回答 2

4

如果你正在写作

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

这意味着当前模块需要此依赖项才能工作。您需要在这两个模块中显式声明它

一个核心

另一个模块中的一个

您可以通过使用其他方式删除这些冗余的重复依赖项, api而不是implementation 因为api用于与其他模块共享一个模块中的依赖项。所以替换impementationapi重复的依赖项。

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

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

在这里,您不需要在 app 模块中再次定义它。

于 2019-08-21T06:22:35.347 回答
1

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'
}

我希望这有帮助。

于 2019-08-21T06:35:14.650 回答