包含 facebook sdk 后的 Gradle 错误
Posted
技术标签:
【中文标题】包含 facebook sdk 后的 Gradle 错误【英文标题】:Gradle error after including facebook sdk 【发布时间】:2016-02-12 03:32:15 【问题描述】:在我的 gradle 文件中添加 facebook-audience-network-sdk 后,我立即开始收到错误,第一个我修复了添加 multiDexEnabled true,之后我一直收到此错误
任务“:app:transformClassesWithJarMergingForDebug”执行失败。
com.android.build.api.transform.TransformException:java.util.zip.ZipException:重复条目:com/google/android/gms/internal/zzqa.class
这是我在 build.gradle 中的依赖项列表
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.mcxiaoke.volley:library:1.0.17'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.google.android.gms:play-services-auth:8.4.0'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile 'com.facebook.android:facebook-android-sdk:4.10.0'
compile 'com.facebook.android:audience-network-sdk:4.10.0'
compile 'joda-time:joda-time:2.7'
使用 -q 依赖项运行 gradle 后,这是我的屏幕截图,我认为问题与 google play 服务库有关,看到 facebook.android:audience-network-sdk 依赖于分析 7.8.0,而我已包含最新的 8.4 .0 已经在我的依赖项中,我不确定。 我怎样才能解决这个问题?
【问题讨论】:
play-services-base:7.8.0 和 8.4.0 可能有冲突 另外,4.10.0
是两个 facebook sdks 的 latest versions。 (如果你想要它们)
@cricket_007 我已经更新到最新的sdk,我看到它仍然依赖于google play services 8.1.0,而我在8.4.0上编译。仍然是同样的错误,仍在尝试解决问题。
只是谷歌搜索“ZipException:重复条目”会出现几个点击,但它基本上归结为从 gradle 中排除一个库的部分
【参考方案1】:
我终于摆脱了错误。所以问题出在 com.google.android.gms:play-services-ads-8.1.0 上。从图中可以看出是8.1.0,其他播放依赖是8.4.0。
所以这两种方法都奏效了。一种是将依赖项更改为
compile ('com.facebook.android:facebook-android-sdk:4.10.0')
exclude group:"com.google.android.gms"
但问题在于,这可能是个问题,因为在我的其他依赖项中我没有 play-services-ads:8.4.0'
所以我解决这个问题的方法就是添加一行
compile 'com.google.android.gms:play-services-ads:8.4.0'
这样一切都完美无缺,因为当 gradle 编译时它会自动将 8.1.0 替换为 8.4.0
这是我的最终依赖项列表
dependencies
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.mcxiaoke.volley:library:1.0.17'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.google.android.gms:play-services-gcm:8.4.0'
compile 'com.google.android.gms:play-services-auth:8.4.0'
compile 'com.google.android.gms:play-services-analytics:8.4.0'
compile 'com.google.android.gms:play-services-ads:8.4.0'
compile 'com.facebook.android:facebook-android-sdk:4.10.0'
compile 'com.facebook.android:audience-network-sdk:4.10.0'
compile 'joda-time:joda-time:2.7'
【讨论】:
只要 play-services-ads api 从版本 8.1.0 到 8.4.0 没有任何会破坏 facebook sdk 的更改,这应该可以工作。 当然!它工作正常,广告出现,点击次数被计算在内。我想这是重要的部分 @Rohan 这是您在屏幕截图中看到的预期行为,无论如何,Gradle 总是用较新的版本替换旧的依赖项。以上是关于包含 facebook sdk 后的 Gradle 错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 FBWebDialogs (Facebook SDK 3.5) 成功发布后的 nil resultURL
无法使用 Facebook Android SDK 和 Facebook Audience Network SDK 编译