Fatal exception: ScioFrontendApi when upgrading google play services with firebase for android app

2.2k Views Asked by At

I have downloaded fresh google-services.json from my firebase account and placed it properly. This was needed as a part of FirebaseInstallations migration process: https://github.com/firebase/firebase-android-sdk/blob/master/firebase-installations/REQUIRED_FIREBASE_OPTIONS_ANDROID.md#what-do-i-need-to-do

2021-04-24 17:34:21.486 9619-9642/in.mycompany.myapp E/AndroidRuntime: FATAL EXCEPTION: ScionFrontendApi
    Process: in.mycompany.myapp, PID: 9619
    java.lang.VerifyError: Verifier rejected class com.google.android.gms.measurement.internal.zzfp: void com.google.android.gms.measurement.internal.zzfp.zzN(java.lang.String, int, java.lang.Throwable, byte[], java.util.Map) failed to verify: void com.google.android.gms.measurement.internal.zzfp.zzN(java.lang.String, int, java.lang.Throwable, byte[], java.util.Map): [0x37] 'this' arg must be initialized (declaration of 'com.google.android.gms.measurement.internal.zzfp' appears in /data/app/in.mycompany.myapp-zfkLQ-CtTDdM7bRGUt2Hog==/base.apk)
        at com.google.android.gms.measurement.internal.zzfp.zzC(Unknown Source:0)
        at com.google.android.gms.measurement.internal.AppMeasurementDynamiteService.initialize(com.google.android.gms:play-services-measurement-sdk@@18.0.3:2)
        at com.google.android.gms.internal.measurement.zzal.zza(com.google.android.gms:play-services-measurement-sdk-api@@18.0.3:12)
        at com.google.android.gms.internal.measurement.zzbh.run(com.google.android.gms:play-services-measurement-sdk-api@@18.0.3:2)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)

My app dependencies (app/build.gradle) look like follows:

implementation project(':react-native-gesture-handler')
implementation project(':react-native-fs')
implementation project(':react-native-video')
implementation project(':react-native-branch')
implementation jscFlavor
implementation project(':react-native-image-picker')
implementation project(':react-native-scan-barcode')
implementation project(':react-native-bluetooth-escpos-printer')
implementation project(':react-native-image-to-base64')
implementation project(':react-native-mp-android-chart')
implementation project(':react-native-doc-viewer')
implementation project(':react-native-fetch-blob')
implementation project(':react-native-shimmer')
implementation(project(':react-native-device-info'))
implementation project(':react-native-code-push')
implementation project(':react-native-linear-gradient')
implementation project(':react-native-webview')
implementation fileTree(include: ['*.jar'], dir: 'libs')
// From node_modules
implementation project(':react-native-file-chooser')
implementation('com.google.android.material:material:1.0.0') {
    force = true;
}
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
  exclude group:'com.facebook.fbjni'
}
debugImplementation("com.facebook.flipper:flipper-network-plugin:${FLIPPER_VERSION}") {
    exclude group:'com.facebook.flipper'
    exclude group:'com.squareup.okhttp3', module:'okhttp'
}
debugImplementation("com.facebook.flipper:flipper-fresco-plugin:${FLIPPER_VERSION}") {
    exclude group:'com.facebook.flipper'
}
implementation 'androidx.multidex:multidex:2.0.1'
implementation platform('com.google.firebase:firebase-bom:27.0.0')
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-core'
implementation 'com.google.firebase:firebase-config'
implementation 'com.google.firebase:firebase-analytics'


implementation 'com.google.code.gson:gson:2.7'
implementation 'com.squareup.retrofit2:converter-gson:2.1.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation ('com.squareup.okhttp3:okhttp:3.11.0'){
    force = true;
}
implementation 'com.google.android.gms:play-services-tagmanager:17.0.0'
implementation project(':react-native-android-circles')
implementation 'com.facebook.fresco:fresco:1.13.0'
implementation 'com.facebook.fresco:animated-gif:1.13.0'
implementation(project(':react-native-maps'))
implementation('com.google.android.gms:play-services-base:17.6.0')
implementation('com.google.android.gms:play-services-maps:17.0.0')
implementation 'com.newrelic.agent.android:android-agent:5.19.1'

implementation 'com.facebook.stetho:stetho:1.5.1'
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.1'
implementation 'com.facebook.stetho:stetho-js-rhino:1.5.1'
androidTestImplementation('com.wix:detox:+')

And my root application build.gradle looks like follows:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
        classpath 'com.google.gms:google-services:4.3.5'
        classpath "com.newrelic.agent.android:agent-gradle-plugin:5.19.1"
        classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                buildToolsVersion '29.0.3'
                defaultConfig {
                    minSdkVersion 18
                    targetSdkVersion 29
                }
            }
        }
    }
}

allprojects {
    repositories {
        google()
        maven { url "https://www.jitpack.io" }
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        maven {
            url("$rootDir/../node_modules/jsc-android/dist")
        }
        jcenter()
        maven { url 'https://www.jitpack.io' }
        maven {
            // All of Detox' artifacts are provided via the npm module
            url "$rootDir/../node_modules/detox/Detox-android"
        }
    }
}
1

There are 1 best solutions below

0
On

So apparently the version ranges for firebase and google play services are different.

firebase bom 27 & 26 were pulling in firebase-analytics-18.0.3 which were pulling in com.google.android.gms:play-services-measurement:18.0.3, but my gms dependencies like com.google.android.gms:play-services-tagmanager:17.0.0 would have wanted to use measurement dependency in the 17 range.

Hence decreasing the firebase bom version to 25 worked out for me.

Debugging was done via ./gradlew :app:dependencies --configuration productionReleaseRuntimeClasspath