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.0
、com.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'
}
而且效果非常好!
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.0
、com.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'
}
而且效果非常好!