无法从Android项目的Gradle中删除传递依赖项

She*_*lji 5 android gradle android-studio build.gradle gradle-dependencies

我试图从我的Android项目中删除传递性依赖项,由于某些原因,exclude当我尝试从特定依赖项中删除依赖项时,它无法正常工作。

例如,我想support-annotations从我的项目中删除

如果我用

configurations {
    all*.exclude group: 'com.android.support', module:'support-annotations'
}
Run Code Online (Sandbox Code Playgroud)

依赖关系将从依赖关系树中排除。我可以通过使用./gradlew app:dependencies查看依赖树在此处输入图片说明

但是如果我用

 compile('com.android.support:support-v4:23.4.0')
            {
                exclude group: 'com.android.support', module:'support-annotations'
            }
Run Code Online (Sandbox Code Playgroud)

然后我仍然在依赖关系树中看到依赖关系。在此处输入图片说明

所以我的问题是,当我尝试从特定依赖项中删除依赖项时,为什么它不起作用?

更新1:

还有谁能告诉我star树中依赖项旁边的(*)符号代表什么?

更新2

我也在用壁画,我尝试过用壁画做同样的事情,但exclude 规则似乎适用

壁画的依赖树 在此处输入图片说明

当我imagepipeline-base在壁画中排除时的依赖树

compile("com.facebook.fresco:fresco:0.9.0")
            {
                exclude group: 'com.facebook.fresco', module: 'imagepipeline-base'
            }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

如您所见,imagepipeline-base依赖关系被排除在外。所以我不知道为什么这不适用于Android支持批注传递依赖项

She*_*lji 5

因此,我已经在一位朋友的帮助下解决了这个问题。我之所以无法删除,support-annotation是因为其他大多数依赖项都被support-v4用作传递性依赖项,而这些依赖项support-v4也有自己的副本support-annotation

现在有两种解决方案

解决方案1:

support-annotation从包含support-v4为传递性依赖项的所有依赖项中排除。

解决方案2:

support-annotation仅从我的support-v4依赖项中排除,并support-v4从具有support-v4传递性依赖项的所有其他依赖项中删除依赖项。

注意:使用上述方法之一,我能够解决我的问题,并弄清楚当从多个依赖项中引用传递依赖项时,如何删除传递依赖项。

对于(*)符号,这意味着已经显示了该依赖项的依赖关系树。gradle不再显示这些依赖关系的整个树,而是显示(*)符号。

样本build.gradle文件在这里