安卓中的Gradle依赖错误

12
在下面的build.gradle中,我添加了configuration部分以避免重复包含support libraries。支持库被用于主项目和类似Facebook SDK这样的依赖项目中。如果没有configuration部分,就会出现"UNEXPECTED TOP-LEVEL EXCEPTION"错误。添加该配置后,错误消失并且应用程序正常工作。
现在,我正在尝试将RecyclerView添加到我的应用程序中,在填充recyclerview时却显示找不到RecyclerView类(虽然它可以编译)。如果我删除Facebook SDK和configuration部分,则recyclerview可以正常工作。
问题:我应该如何修改build.gradle以使Facebook SDK和RecyclerView正常工作?换句话说,为什么config部分在仅需要排除v4的情况下也会排除v7?
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:+'
    compile 'com.android.support:support-v13:+'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
    compile 'com.google.android.gms:play-services:4.4.52'
    compile project(':facebook-3.15')
    compile project(':parse-1.5.1')
    compile project(':viewpagerindicator-2.4.1')
}

configurations {
    // to avoid double inclusion of support libraries
    all*.exclude group: 'com.android.support', module: 'support-v4'
}
3个回答

13

如果您在使用v4支持库时遇到依赖冲突,您可以通过gradle脚本从其中一个库中排除它:

compile ('com.android.support:recyclerview-v7:+') {
    exclude module: 'support-v4'
}

我尝试过了,但无法同时让Facebook SDK和RecyclerView正常工作。 - nomongo
你尝试过从Facebook SDK的依赖中排除support-v4吗?他们可能包含了不同版本的支持库。 - Kevin Coppock
我在我的项目中使用了facebook.aar文件作为facebook库,所以只需从facebook.aar存档中删除support-v4 jar文件即可。 - nomongo

4
我添加了以下内容来修复问题:

compile ('com.facebook.android:facebook-android-sdk:3.22.0@aar'){
    exclude module: 'support-v4'
}

那么为什么当我运行 gradle app:dependencies 时,我仍然看到:com.google.android.gms:play-services-gcm:9.4.0 | +--- com.google.android.gms:play-services-base:9.4.0 | | +--- com.google.android.gms:play-services-basement:9.4.0 | | | \--- com.android.support:support-v4:23.0.0 - IgorGanapolsky
1
也许是另一个库提供了支持,尝试移除所有其他库,只保留要排除的应用兼容库,并检查发生了什么。 - Ultimo_m

4

我找到了解决方案:

  1. 移除 build.gradle 中的配置部分,该部分排除了 support-v4

  2. 结果发现 .aar 文件基本上是一个 zip 文件,因此使用 7-zip 从依赖的 .aar 库中删除了支持库 support-v4 jar 。现在,我不再遇到顶级异常,同时可以使用 recyclerview-v7

如果您正在使用依赖项目而不是 .aar 文件,请尝试在编译之前删除依赖项目中的 support-v4.jar 文件。

Gradle 构建工具难道不能智能地排除重复的包,而不是让用户进行这种变通和头痛吗?


嘿,我这里也遇到了同样的错误,但即使有你的帮助还是没有解决。你能再具体说明一下吗? - Braian Mellor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接