12

在下面的 build.gradle 中,我添加了配置部分以避免双重包含支持库。支持库用于主项目和依赖项目,如 facebook sdk。如果没有配置部分,我会得到“UNEXPECTED TOP-LEVEL EXCEPTION”。添加该配置会使错误消失,应用程序一切正常。

现在,我正在尝试将 RecyclerView 添加到我的应用程序中,并且在为 recyclerview 充气时找不到 RecyclerView 类(尽管它可以构建)。如果我删除 facebook SDK 和配置部分,recyclerview 工作得很好。

问题:我可以对 build.gradle 进行哪些更改以使 facebook SDK 和 RecyclerView 正常工作?换句话说,为什么只应该排除 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'
}
4

3 回答 3

13

如果您与 v4 支持库有依赖冲突,您可以通过 gradle 脚本将其从库之一中排除:

compile ('com.android.support:recyclerview-v7:+') {
    exclude module: 'support-v4'
}
于 2014-08-26T20:26:43.777 回答
4

找到了解决方案:

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

  2. 事实证明,.aar文件基本上是一个 zip,因此从依赖项 .aar 库中删除了 support-v4 jar(使用 7-zip)。现在,我没有得到顶级异常,同时能够使用recyclerview-v7.

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

gradle 构建工具不应该足够智能以排除重复的包,而不是让用户经历这种变通方法和头痛吗?

于 2014-08-26T20:18:38.380 回答
4

我修复了添加:

compile ('com.facebook.android:facebook-android-sdk:3.22.0@aar'){
    exclude module: 'support-v4'
}
于 2015-04-23T17:54:12.037 回答