首页 文章

gradle - 库在依赖项中重复

提问于
浏览
46

我有一个带gradle的Android项目 . 问题是:在 project 视图中,我看到 support-v4 库的几个版本,例如 support-v4-21.0.3support-v4-22.2.0 .

But in build.gradle I don't have support-v4 at all.

但我在 build.gradle 中有~10个其他依赖项 . 例如 appcompat-v7:22.2.0 . 我可以建议 appcompat-v7:22.2.0 在maven依赖项中依赖于 support-v4-22.2.0 并隐式地将它拉出来 . 但是我没有想法会拉扯 support-v4-21.0.3 .

据我所知,所有这些libs将包装在我的APK中并增加APK的重量 .

所以我有下一个问题:

  • 如何避免库重复?

  • 如何在Android Studio中查看maven依赖项?

  • 如何检测哪个库需要此库?例如哪个库在我的项目中需要 support-v4-21.0.3

1 回答

  • 82

    To find duplicate dependencies or its required dependencies ,您可以在树中可视化库依赖项 . 执行gradle命令如下 .

    gradle -q dependencies yourProject:dependencies --configuration compile
    

    请注意,在Windows中运行 gradlew ,如下所示 .

    gradlew -q dependencies yourProject:dependencies --configuration compile
    

    命令结果将显示所有依赖项的人类可读树层次结构,如下所示 .

    compile - Classpath for compiling the main sources.
    +--- org.androidannotations:androidannotations-api:3.2
    +--- com.android.support:support-annotations:22.1.1
    +--- com.squareup:otto:1.3.6
    +--- in.srain.cube:grid-view-with-header-footer:1.0.10
    +--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
    +--- com.github.chrisbanes.photoview:library:1.2.3
    +--- org.simpleframework:simple-xml:2.7.1
    +--- com.google.android.gms:play-services-base:6.5.+ -> 6.5.87
    +--- 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
    +--- project :facebook
    |    \--- com.android.support:appcompat-v7:22.1.1
    |         \--- com.android.support:support-v4:22.1.1
    |              \--- com.android.support:support-annotations:22.1.1 -> 22.2.0
    

    您可以看到覆盖依赖关系,并考虑应该避免哪些依赖关系 . 在上面的示例中,最后一行 com.android.support:support-annotations 在内部从 22.1.1 覆盖到 22.2.0 .

    To avoid duplicates ,您可以在每个项目 build.gradle 文件中添加 exclude 子句 .

    compile('com.github.chrisbanes.photoview:library:1.2.3') {
        exclude group: 'com.android.support'
    }
    compile('org.simpleframework:simple-xml:2.7.1') {
        exclude module: 'stax'
        exclude module: 'stax-api'
        exclude module: 'xpp3'
    }
    compile('com.google.android.gms:play-services-base:6.5.+')
            {
                exclude module: 'support-v4'
            }
    

    有关更多信息,请参阅https://docs.gradle.org/current/userguide/userguide_single.html#sec:listing_dependencies上的教程

相关问题