包含 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

Android gradle:版本周围的方括号是什么意思?

无法使用 Facebook Android SDK 和 Facebook Audience Network SDK 编译

Android Facebook SDK 登录

无法导入 facebook-sdk 4.0.1

在Android工作室使用facebook sdk