Duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class

I have an Android project built with React-Native and employing Google Play Services (analytics, cloud messaging, ads). I'm not explicitly using Firebase anywhere.

Tried upgrading the Play Services from 8.4.0 => 9.2.0. Also upgraded the GPS classpath.

buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:3.0.0'

...

dependencies {
    compile 'com.google.android.gms:play-services-analytics:9.2.1'
    compile 'com.google.android.gms:play-services-ads:9.2.1'
    compile 'com.google.android.gms:play-services-base:9.2.1'
    compile 'com.google.android.gms:play-services-gcm:9.2.1'

Notice that I'm not explicitly depending on Firebase anywhere.

Ever since the upgrade I'm getting the following Gradle build error:

com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class

I know that Firebase comes bundled within the Google Play Services (since 9.0), so I figured something else is compiling and linking with an older version. So looking at the dependency insight (gradle -q dependencyInsight --configuration compile --dependency firebase) I've noticed that firebase-common 9.0.0 is being added on top of 9.2.1:

But I can't for the life of me find out what causes this.

Answers


Well - the culprit is React-Native.

The hint was this obscure line that appears on the Gradle console:

google-services plugin could not detect any version for com.google.android.gms or com.google.firebase, default version: 9.0.0 will be used.

The fix? Force the RN library project to link with the correct Firebase version, by adding the following line to its build.gradle:

compile 'com.google.firebase:firebase-core:9.2.1'

And thus:

As a side-note, this issue has triggered me to look deeper into gradle dependency management. I've written an extensive post about resolving common dependency issues.


The problem is that you use both the plugins in the build.gradle file so remove the one Google Play Services plugin, like

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

and

compile 'com.google.android.gms:play-services:11.0.2'

So remove both of one library and then add

packagingOptions {
    exclude 'META-INF/NOTICE' // It is not include NOTICE file
    exclude 'META-INF/LICENSE' // It is not include LICENSE file
}

In my case, I was using this in app/build.gradle:

compile 'com.google.android.gms:play-services-location:9.8.0'
compile 'com.google.android.gms:play-services-maps:9.8.0'

The error when I was trying to generate a Signed APK was:

Error:Execution failed for task ':app:transformClassesWithJarMergingForRelease'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/firebase/FirebaseApiNotAvailableException.class

I modified app/build.gradle by removing the two lines I mentioned above and using this instead:

compile 'com.google.android.gms:play-services:9.8.0'

Of course "play-services" is the full bundle and not an optimized way to do this. It would be best to specify the specific services that are required (read Does "play-services:9.8.0" include "play-services-location:9.8.0"?), but for now it fixes the error in my case.


java.util.zip.ZipException: duplicate entry: com/google/firebase/iid/zzb.class

follow this its work .remove your current google play service dependency and go to file in android Studio select module setting and the select dependency tab now click on + icon and select lib dependency after that search your play service in studio and add it


Need Your Help

reduceByKey method not being found in Scala Spark

scala apache-spark rdd

Attempting to run http://spark.apache.org/docs/latest/quick-start.html#a-standalone-app-in-scala from source.

How to detect an audio has finished playing in a web page?

javascript jquery jquery-plugins audio

In my project, I need to embed audio (ex: mp3, etc) into a web page. When user visits the page, the audio will begin playing. When the audio ends, the questionnaire (form fields) will appear for th...