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.
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
来源:https://stackoverflow.com/questions/38595171/duplicate-entry-com-google-firebase-firebaseapinotavailableexception-class