如何解决集成Firebase和Facebook Ad包冲突的问题

手头开发的APP集成了Facebook Ad jar 包AudienceNetwork.jar,打算更新到其最新版本4.14.1。

删除本地lib库里的老的AudienceNetwork.jar,在app的build.gradle的dependencies里添加

compile (‘com.facebook.android:audience-network-sdk:4.14.1‘)

编译报错如下信息:

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ‘:transformClassesWithJarMergingForDebug‘.

> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/android/gms/internal/zzaa.class

* Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

从duplicate entry看是有重复的类被打包导致Excepion,查阅Gradle文档,可以排除重复文件打包,接下来的问题是排查下是哪个文件有问题,从上述信息看,应该是从com.google.android.gms下的某个类,考虑到之前使用facebook jar单独打包并没有发生此问题,那么就应该是编译依赖的4.14.1导致的。

到依赖仓库jcenter的老家Jfrog bintray逛逛,搜索facebook,找到audience-network-sdk:4.14.1的对应文件,有2个分别是aar和pom后缀的文件,我们只看配置文件就好,如下:

<?xml version="1.0" encoding="UTF-8"?>

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<modelVersion>4.0.0</modelVersion>

<groupId>com.facebook.android</groupId>

<artifactId>audience-network-sdk</artifactId>

<version>4.14.1</version>

<packaging>aar</packaging>

<name>Audience-Network-SDK</name>

<description>Facebook Audience Network SDK for Android</description>

<url>https://developers.facebook.com/products/app-monetization/audience-network/</url>

<licenses>

<license>

<name>Facebook Platform License</name>

<url>https://github.com/facebook/facebook-android-sdk/blob/master/LICENSE.txt</url>

<distribution>repo</distribution>

</license>

<license>

<name>Apache License Version 2.0</name>

<url>http://www.apache.org/licenses/LICENSE-2.0</url>

<distribution>repo</distribution>

</license>

</licenses>

<developers>

<developer>

<id>facebook</id>

<name>Facebook</name>

</developer>

</developers>

<scm>

<url>https://developers.facebook.com/docs/android/downloads</url>

</scm>

<dependencies>

<dependency>

<groupId>com.google.android.gms</groupId>

<artifactId>play-services-ads</artifactId>

<version>8.4.0</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>com.android.support</groupId>

<artifactId>appcompat-v7</artifactId>

<version>23.1.0</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>com.android.support</groupId>

<artifactId>recyclerview-v7</artifactId>

<version>23.1.0</version>

<scope>compile</scope>

</dependency>

</dependencies>

</project>

显然,报错就是在打包play-services-ads时产生的,因为需要集成Firebase,在build.gradle中添加了

apply plugin: ‘com.google.gms.google-services‘

导致把google服务的全家桶都加了进来,自然也会有广告服务,冲突由此产生。

找到原因就很好解决了,在编译时把重复的去除就可以了。

原build.gradle里依赖部分:

dependencies {
    compile fileTree(: , : [])
    compile compile compile compile compile 

}

apply :

更新后:

dependencies {
    compile fileTree(: , : [])
    compile compile compile compile compile () {
        exclude : exclude : exclude : }
}

apply :

再次编译,成功!

时间: 2024-10-08 09:25:43

如何解决集成Firebase和Facebook Ad包冲突的问题的相关文章

websphere找不到类或jar包冲突

Jar包冲突问题是在大型Java软件开发中经常遇到的问题,系统开发人员经常会为解决类似的问题耗费大量的时间进行调试和测试,本文根据各种际情况,结合WebSphere中类加载器,讨论了几种解决jar包冲突问题的办法,并给出了具体实现的步骤及源代码.读者定位为具有Java和WebSphere开发经验的开发人员.读者可以学习到在WebSphere中类加载器的定义以及解决jar包冲突问题的几种办法,并可以直接使用文章中提供的Java代码,从而节省他们的开发和调试时间,提高效率. 大型的基于WebSphe

weblogic、hibernate 包冲突

解决办法: 在weblogic 配置  [paths]项中 添加antlr-2.7.7.jar,该jar包应该位于引用weblogic.jar之前,使启动时不再加载weblogic中的低版本的antlr 此外:直接在weblogic部署发布时 1.将antlr-2.7.6.jar复制到weblogic目录%DOMAIN_HOME%/lib下 2.根据操作系统类型选择修改%DOMAIN_HOME%/bin/startWebLogic.sh或%DOMAIN_HOME%/bin/startWebLog

Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程

Firebase Admob Unity3d插件是一个Unity用户更方便使用Firebase 统计和Firebase admob广告的插件,接口非常的简洁简单,使用c#,无需另外编写java和oc代码一.2种方式安装Firebase Admob Unity3d插件1.直接下载https://github.com/unity-plugins/Firebase-Admob-Unity/ ,然后把Plugins文件夹复制到你Unity3d项目的Plugins目录中2.下载Firebase Admob

YARN环境中应用程序JAR包冲突问题的分析及解决

Hadoop框架自身集成了很多第三方的JAR包库.Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包.这样的话,当用户的应用程序使用的第三方库已经存在于Hadoop框架的预置目录,但是两者的版本不同时,Hadoop会优先为应用程序加载Hadoop自身预置的JAR包,这种情况的结果是往往会导致应用程序无法正常运行. 下面从我们在实践中遇到的一个实际问题出发,剖析Hadoop on YARN 环境下,MapReduce程序运行时JAR包查找的

解决集成jpa时报错无法创建少导入entityManagerFactory的问题

解决集成jpa时报错无法创建少导入entityManagerFactory的问题 最近将IDEA 2018.1版本更新到了2018.2版本,更新好后跑了一下之前的项目,结果就报错了,这个项目集成了spring data jpa.由于该错误有多种原因导致,在解决该错误的时候也花了一些时间,所以特别记录一下.关键的报错信息如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name

解决myeclipse中struts2 bug问题包的替换问题

因为struts2的bug问题,手工替换还是比较麻烦,但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,终于找到了解决办法.以下就解决方法与大家分享一下. 1.在perferences中找到 Myeclipse->Project Libraries,右边找到 struts2.1 Libraries,点击 Enable advanced configiguration,去掉以下文件前面的对勾,然后点击 Add custom Jars 2.在弹出的对话框中选择 A

Maven类包冲突终极三大解决技巧 mvn dependency:tree

Maven对于新手来说是<步步惊心>,因为它包罗万象,博大精深,因为当你初来乍到时,你就像一个进入森林的陌生访客一样迷茫. Maven对于老手来说是<真爱配方>,因为它无所不能,利如刀锋,使用Maven做开发,如饮美酒如悦美人. Maven对于新手来说,最痛苦的一件事莫过于包之间的冲突,由于Maven的依赖传递性,当你引入一个依赖类时,其身后的依赖类也一起如过江之鲫纷至沓来了. 举例 A依赖于B及C,而B又依赖于X.Y,而C依赖于X.M,则A除引B及C的依赖包下,还会引入X,Y,M

Jar包冲突解决方法

前言 对于Jar包冲突问题,我们开发人员经常都会有碰到,当我们使用一些jar包中的类.方法等,或者有时遇到一些日志系统的问题(参考另一篇文章Jar包冲突导致的日志问题),我们会遇到ClassNotFoundException,NoSuchFieldException,NoSuchMethodException 之类的运行时异常,从经验上我们就会判断,Jar包冲突了.解决Jar包冲突问题,每个人都有每个人的方法,这里我介绍一下我的方法,供大家参考. 处理方法 当遇到jar包冲突时,我们首先确定是哪

Maven 解决JAR包冲突

在JAR 冲突的情况下, 利用Eclipse方式解决JAR包冲突时比较方便简洁的,步骤如下 1. 在Eclipse 中打开pom.xml , 选择  “Dependency  Hierarchy” 2, 在Filter 输入框中,输入冲突的jar,  比如: slf4j 3. 右边会显示所有依赖此包的JAR包 4.  如果你需要排除 冲突, 可以右键单击: 选择  exclude Maven artifact... 进行以上操作后, MAVEN 的依赖关系如下(举列如下:) 排除前: <depe