包含Facebook SDK后的Gradle错误

7

在我的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 dependencies的gradle后,这是我的屏幕截图,我认为问题与谷歌播放服务库有关,因为facebook.android:audience-network-sdk依赖于分析7.8.0,而我已经在我的依赖项中包含了最新的8.4.0,但我不确定。如何解决这个问题? 在此输入图片描述


play-services-base:7.8.0和8.4.0可能存在冲突。 - OneCricketeer
此外,4.10.0是Facebook SDK的最新版本。如果您需要它们,请下载安装。 - OneCricketeer
@cricket_007 我已经更新到最新的SDK,但我发现它仍然依赖于Google Play服务8.1.0,而我正在使用8.4.0进行编译。错误仍然存在,我正在努力解决这个问题。 - user3564573
只需在 Google 上搜索“ZipException:duplicate entry”,就会出现几个结果,但基本上可以通过从 Gradle 中排除一个库的某些部分来解决它。 - OneCricketeer
1个回答

13

我最终解决了这个错误。问题出在com.google.android.gms:play-services-ads-8.1.0上。从图中可以看到,它是8.1.0,而其他play依赖项是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'

}


只要从版本8.1.0到8.4.0的play-services-ads API没有更改,这应该是有效的,不会破坏Facebook SDK。 - Rohan
当然!它运行良好,广告显示正常,点击次数也被计算。我想这就是最重要的部分。 - user3564573
@Rohan,这是预期的行为,正如您在截图中所看到的那样。无论如何,Gradle始终会用新版本替换旧的依赖项。 - Pedro Hidalgo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接