Duplicate entry: com/google/firebase/FirebaseApiNo

2019-02-06 18:19发布

问题:

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.

回答1:

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.



回答2:

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
}


回答3:

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.



回答4:

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