Android Studio - Gradle 依赖项 - 如何从 `facebook` 中排除 `bolts`?

Android Studio - Gradle dependencies - How to Exclude `bolts` from `facebook`?

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: bolts/AggregateException.class

这就是错误的样子。我知道 bolts 在我的 3 个依赖项中使用,com.facebook.fresco:fresco:0.10.0com.parse:parse-android:1.13.1 和一个 jar ePOS2.jar.

我尝试了多种解决方案,从

开始
 compile('com.facebook.fresco:fresco:0.10.0') {
         exclude group: 'com.parse.bolts', module: 'bolts-android'
     }

但我仍然得到错误。我也尝试从 com.parse:parse-android1.13.1 中排除某些部分,如图 in this post 但随后我得到了丢失的 classes 错误。

我也启用了multidex,如this post所示,但错误仍然存​​在。

我尝试排除 com/parse/bolts/AggregateException.class,如图 in this post,仍然出现错误。

最奇怪的是,如果我启用 InstantRun,我可以 运行 应用程序,但当它使用来自 jar 的某个 class 时崩溃。

java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader

所以,我想是否可以从 jar 或 com.parse:parse-android:1.13.1 中排除某些 class AggregateException.class

编辑

compile('com.facebook.fresco:fresco:0.10.0') { exclude module: 'bolts-android' }

compile('com.facebook.fresco:fresco:0.10.0') { exclude group: 'com.parse.bolts', module: 'bolts-android' }

我试图从 com.facebook.fresco:fresco:0.10.0 中排除 bolts 但无论我做什么它们仍然出现:

    +--- com.android.support:multidex:1.0.1                                  
+--- com.android.support:design:23.3.0
|    +--- com.android.support:appcompat-v7:23.3.0
|    |    +--- com.android.support:support-vector-drawable:23.3.0
|    |    |    \--- com.android.support:support-v4:23.3.0
|    |    |         \--- com.android.support:support-annotations:23.3.0
|    |    +--- com.android.support:animated-vector-drawable:23.3.0
|    |    |    \--- com.android.support:support-vector-drawable:23.3.0 (*)
|    |    \--- com.android.support:support-v4:23.3.0 (*)
|    +--- com.android.support:support-v4:23.3.0 (*)
|    \--- com.android.support:recyclerview-v7:23.3.0
|         +--- com.android.support:support-v4:23.3.0 (*)
|         \--- com.android.support:support-annotations:23.3.0
+--- com.makeramen:roundedimageview:2.2.1
+--- com.facebook.fresco:fresco:0.10.0
|    +--- com.facebook.fresco:drawee:0.10.0
|    |    +--- com.android.support:support-v4:23.1.1 -> 23.3.0 (*)
|    |    \--- com.facebook.fresco:fbcore:0.10.0
|    +--- com.facebook.fresco:fbcore:0.10.0
|    \--- com.facebook.fresco:imagepipeline:0.10.0
|         +--- com.android.support:support-v4:23.1.1 -> 23.3.0 (*)
|         +--- com.nineoldandroids:library:2.4.0
|         +--- com.facebook.fresco:fbcore:0.10.0
|         +--- com.facebook.fresco:imagepipeline-base:0.10.0
|         |    +--- com.android.support:support-v4:23.1.1 -> 23.3.0 (*)
|         |    +--- com.nineoldandroids:library:2.4.0
|         |    +--- com.facebook.fresco:fbcore:0.10.0
|         |    \--- com.parse.bolts:bolts-android:1.1.4 !!! HERE
|         \--- com.parse.bolts:bolts-android:1.1.4  !!! HERE
+--- com.facebook.fresco:imagepipeline-okhttp:0.7.0
|    +--- com.squareup.okhttp:okhttp:2.3.0
|    |    \--- com.squareup.okio:okio:1.3.0
|    +--- com.facebook.fresco:imagepipeline:0.7.0 -> 0.10.0 (*)
|    \--- com.facebook.fresco:fbcore:0.7.0 -> 0.10.0
+--- com.parse:parse-android:1.13.1
|    \--- com.parse.bolts:bolts-tasks:1.4.0
\--- uk.co.chrisjenx:calligraphy:2.2.0
     \--- com.android.support:appcompat-v7:23.1.1 -> 23.3.0 (*)

duplicate entry 错误通常源于打包程序试图打包同一个 class 的多个不同版本。

您似乎只排除了螺栓库的特定部分。这会导致您的构建混合库其余部分的 2 个不同版本,这些部分可能仍然有一些重叠 classes。

在我的项目中,我从每个模块中排除了整个库,然后强制使用统一的螺栓版本来管理它们。

在我的 gradle 构建中,我从所有依赖螺栓的模块中排除了螺栓,如下所示:

compile('com.facebook.android:facebook-android-sdk:4.14.1') {
    exclude group: 'com.parse.bolts'
}

然后强制所有模块使用最新的螺栓:

compile 'com.parse.bolts:bolts-android:1.+'

我在生成 APK 时遇到问题,我正在使用:

    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile ('com.sromku:simple-fb:4.1.1')      

然后我修改为:

    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile ('com.sromku:simple-fb:4.1.1'){
        exclude group: 'com.parse.bolts'
    }

而且效果非常好!