Firebase android performance NoClassDefFoundError -> FirebasePerfUrlConnection
Asked Answered
D

4

7

Does anyone face the same problem? After adding firebase performance to project error occurs immediately after starting the application. It is crashing only in debug build, in release build everything works as expected. Maybe someone has real answer because all I found in similar questions was juggling library versions by trial and error method. Multidex is turned ON.

Error:

E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-2
Process: {PROJECT PACKAGE}, PID: 9872
io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/perf/network/FirebasePerfUrlConnection;
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:69)
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
    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)
 Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/perf/network/FirebasePerfUrlConnection;
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy.createHttpUrlConnection(WalledGardenInternetObservingStrategy.java:124)
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy.isConnected(WalledGardenInternetObservingStrategy.java:107)
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy$1.apply(WalledGardenInternetObservingStrategy.java:66)
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy$1.apply(WalledGardenInternetObservingStrategy.java:64)
    at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:57)
    at io.reactivex.internal.operators.observable.ObservableInterval$IntervalObserver.run(ObservableInterval.java:82)
    at io.reactivex.Scheduler$PeriodicDirectTask.run(Scheduler.java:532)
    at io.reactivex.Scheduler$Worker$PeriodicTask.run(Scheduler.java:479)
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) 
    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) 
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.perf.network.FirebasePerfUrlConnection" on path: DexPathList[[zip file "/data/app/{PROJECT PACKAGE}--VDzbFrnWyQza3gXDNMSSA==/base.apk"],nativeLibraryDirectories=[/data/app/{PROJECT PACKAGE}--VDzbFrnWyQza3gXDNMSSA==/lib/x86_64, /data/app/{PROJECT PACKAGE}--VDzbFrnWyQza3gXDNMSSA==/base.apk!/lib/x86_64, /system/lib64, /system/product/lib64]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy.createHttpUrlConnection(WalledGardenInternetObservingStrategy.java:124) 
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy.isConnected(WalledGardenInternetObservingStrategy.java:107) 
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy$1.apply(WalledGardenInternetObservingStrategy.java:66) 
    at com.github.pwittchen.reactivenetwork.library.rx2.internet.observing.strategy.WalledGardenInternetObservingStrategy$1.apply(WalledGardenInternetObservingStrategy.java:64) 
    at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(ObservableMap.java:57) 
    at io.reactivex.internal.operators.observable.ObservableInterval$IntervalObserver.run(ObservableInterval.java:82) 
    at io.reactivex.Scheduler$PeriodicDirectTask.run(Scheduler.java:532) 
    at io.reactivex.Scheduler$Worker$PeriodicTask.run(Scheduler.java:479) 
    at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) 
    at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) 
    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) 

Buildscript:

buildscript {
    ext {
        commonVariables = [
                applicationVersionName: "{APP VERSION}",
                applicationVersionCode: {APP VERSION CODE},
                compileSdkVersion     : 29,
                minSdkVersion         : 21,
                targetSdkVersion      : 29,
                buildToolsVersion     : "29.0.2"
        ]

        kotlin_version = "1.3.72"
        rx_binding_version = "3.1.0"
        koin_version = "2.1.5"
        moshi_version = "1.9.2"
        lifecycle_version = "2.2.0"
        paging_version = "2.1.2"
        flipper_version = "0.44.0"
        nav_version = "2.2.2"
        room_version = "2.2.5"
        realm_version = "6.1.0"

        commonDependencies = [
            kotlinLib               : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version",
            appCompat               : "androidx.appcompat:appcompat:1.1.0",
            rxJava                  : "io.reactivex.rxjava2:rxjava:2.2.19",
            rxAndroid               : "io.reactivex.rxjava2:rxandroid:2.1.1",
            rxKotlin                : "io.reactivex.rxjava2:rxkotlin:2.4.0",
            coreKtx                 : "androidx.core:core-ktx:1.2.0",
            activity                : "androidx.activity:activity-ktx:1.1.0",
            fragment                : "androidx.fragment:fragment-ktx:1.2.4",
            recyclerView            : "androidx.recyclerview:recyclerview:1.1.0",
            swipeRefreshLayout      : "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0",
            materialComponents      : "com.google.android.material:material:1.2.0-alpha06",
            constraintLayout        : "androidx.constraintlayout:constraintlayout:1.1.3",
            jodaTime                : 'joda-time:joda-time:2.10.6',
            rxPermissions           : "com.github.tbruyelle:rxpermissions:0.10.2",
            rxBindingsCore          : "com.jakewharton.rxbinding3:rxbinding-core:$rx_binding_version",
            rxBindingsAppCompat     : "com.jakewharton.rxbinding3:rxbinding-appcompat:$rx_binding_version",
            rxBindingsMaterial      : "com.jakewharton.rxbinding3:rxbinding-material:$rx_binding_version",
            rxBindingsRecyclerView  : "com.jakewharton.rxbinding3:rxbinding-recyclerview:$rx_binding_version",
            koin                    : "org.koin:koin-core:$koin_version",
            koinExperimental        : "org.koin:koin-core-ext:$koin_version",
            koinAndroidX            : "org.koin:koin-android:$koin_version",
            koinAndroidXScope       : "org.koin:koin-androidx-scope:$koin_version",
            koinAndroidXViewModel   : "org.koin:koin-androidx-viewmodel:$koin_version",
            koinAndroidXFragment    : "org.koin:koin-androidx-fragment:$koin_version",
            koinAndroidXExperimental: "org.koin:koin-androidx-ext:$koin_version",
            moshi                   : "com.squareup.moshi:moshi-kotlin:$moshi_version",
            moshiKapt               : "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version",
            moshiAdapters           : "com.squareup.moshi:moshi-adapters:$moshi_version",
            lifecycleRuntime        : "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version",
            lifecycleExtensions     : "androidx.lifecycle:lifecycle-extensions:$lifecycle_version",
            pagingCommon            : "androidx.paging:paging-common-ktx:$paging_version",
            pagingRuntime           : "androidx.paging:paging-runtime-ktx:$paging_version",
            pagingRxJava            : "androidx.paging:paging-rxjava2-ktx:$paging_version",
            flipper                 : "com.facebook.flipper:flipper:$flipper_version",
            flipperNetworkPlugin    : "com.facebook.flipper:flipper-network-plugin:$flipper_version",
            soloader                : "com.facebook.soloader:soloader:0.5.1",
            navigationRuntime       : "androidx.navigation:navigation-runtime-ktx:$nav_version",
            navigationUI            : "androidx.navigation:navigation-fragment-ktx:$nav_version",
            navigationFragment      : "androidx.navigation:navigation-ui-ktx:$nav_version",
            room                    : "androidx.room:room-runtime:$room_version",
            roomKtx                 : "androidx.room:room-ktx:$room_version",
            rxRoom                  : "androidx.room:room-rxjava2:$room_version",
            roomAnnotation          : "androidx.room:room-compiler:$room_version"
        ]
    }

    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.0.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.google.gms:google-services:4.3.3"
        classpath "com.google.firebase:firebase-crashlytics-gradle:2.1.1"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
        classpath "io.realm:realm-gradle-plugin:$realm_version"
        classpath 'com.google.firebase:perf-plugin:1.3.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

App gradle:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: "androidx.navigation.safeargs.kotlin"
apply plugin: 'realm-android'
apply plugin: 'com.google.firebase.firebase-perf'

android {
    ...

    defaultConfig {
        ...
        multiDexEnabled true
        ...
    }
}

dependencies {
    ...
    implementation 'com.android.support:multidex:1.0.3'

    releaseImplementation 'com.google.firebase:firebase-analytics:17.4.2'
    releaseImplementation 'com.google.firebase:firebase-crashlytics:17.0.0'
    releaseImplementation 'com.google.firebase:firebase-perf:19.0.7'

    implementation 'com.google.firebase:firebase-messaging:20.2.0'
    implementation 'com.google.firebase:firebase-ml-vision:24.0.3'
    implementation 'com.google.firebase:firebase-ml-vision-barcode-model:16.1.1'
    ...
}
Disconnection answered 29/5, 2020 at 11:47 Comment(0)
D
0

Newest version of firebase works perfect. Here is sample:

Dependencies:

implementation platform('com.google.firebase:firebase-bom:28.2.1')
releaseImplementation 'com.google.firebase:firebase-analytics-ktx'
releaseImplementation 'com.google.firebase:firebase-crashlytics-ktx'
releaseImplementation 'com.google.firebase:firebase-perf-ktx'
Disconnection answered 11/8, 2021 at 15:17 Comment(0)
A
10

Either include all or remove all of these

Build Gradle (AppName)

dependencies {
    classpath 'com.google.firebase:perf-plugin:1.3.4'
}

Build Gradle (:app)

At top of page

apply plugin: 'com.google.firebase.firebase-perf'

Then

dependencies {
    implementation 'com.google.firebase:firebase-perf:19.1.0'
}
Airtoair answered 21/1, 2021 at 10:4 Comment(1)
I think "implementation 'com.google.firebase:firebase-perf:19.1.0'" is not necessary. It will autolink.Arachnid
A
2

Changing

releaseImplementation 'com.google.firebase:firebase-analytics:17.4.2'
releaseImplementation 'com.google.firebase:firebase-crashlytics:17.0.0'
releaseImplementation 'com.google.firebase:firebase-perf:19.0.7'

To

implementation 'com.google.firebase:firebase-analytics:17.4.2'
implementation 'com.google.firebase:firebase-crashlytics:17.0.0'
implementation 'com.google.firebase:firebase-perf:19.0.7'

Should solve the issue as those dependencies are currently defined only for release buildType

Anemometer answered 5/7, 2020 at 14:4 Comment(2)
This is intended, because these tools are not needed on debug.Disconnection
I see... But this will cause ClassNotFoundException as the FirebasePerfUrlConnection in the mentioned dependencies. One way to get over this while having releaseImplementation is to: Make sure all the classes related to these dependencies are only used in release source set and no any existence in main as they won't be shipped in the debug apkAnemometer
W
0

The line:

apply plugin: 'com.google.firebase.firebase-perf'

Is adding the dependencies that are causing your app to crash in debug mode. You either need to figure out a way to do that only to your release build (there are some workarounds available), or just include Firebase Performance as part of your debug build.

Wham answered 23/7, 2020 at 23:6 Comment(0)
D
0

Newest version of firebase works perfect. Here is sample:

Dependencies:

implementation platform('com.google.firebase:firebase-bom:28.2.1')
releaseImplementation 'com.google.firebase:firebase-analytics-ktx'
releaseImplementation 'com.google.firebase:firebase-crashlytics-ktx'
releaseImplementation 'com.google.firebase:firebase-perf-ktx'
Disconnection answered 11/8, 2021 at 15:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.