Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

enter image description here

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

like image 651
Vaiden Avatar asked Jul 26 '16 16:07

Vaiden


2 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:

enter image description here

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.

like image 147
Vaiden Avatar answered Nov 15 '22 18:11

Vaiden


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
}
like image 23
ֆɦɛӄɦǟʀ ֆʊʍǟռ Avatar answered Nov 15 '22 18:11

ֆɦɛӄɦǟʀ ֆʊʍǟռ