okhttp-eventsource icon indicating copy to clipboard operation
okhttp-eventsource copied to clipboard

EventSource.restart() throws java.lang.NoClassDefFoundError

Open masarykadam opened this issue 5 years ago • 2 comments

Hello. I am using Android 4.4.2 and library version 1.11.1. When I attempt to call method restart() exception is thrown:

08-15 17:49:35.302 7823-7823/com.test.apk E/com.test.apk.App:lambda$onCreate$0: java.lang.NoClassDefFoundError: com.launchdarkly.eventsource.EventSource$3
        at com.launchdarkly.eventsource.EventSource.restart(EventSource.java:173)
        at com.test.apk.service.PushService$1.onReceive(PushService.java:40)
        at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:313)
        at androidx.localbroadcastmanager.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:121)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5341)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1259)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
        at dalvik.system.NativeStart.main(Native Method)
08-15 17:49:35.302 7823-7823/com.test.apk E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.test.apk, PID: 7823
    java.lang.NoClassDefFoundError: com.launchdarkly.eventsource.EventSource$3
        at com.launchdarkly.eventsource.EventSource.restart(EventSource.java:173)
        at com.test.apk.service.PushService$1.onReceive(PushService.java:40)
        at androidx.localbroadcastmanager.content.LocalBroadcastManager.executePendingBroadcasts(LocalBroadcastManager.java:313)
        at androidx.localbroadcastmanager.content.LocalBroadcastManager$1.handleMessage(LocalBroadcastManager.java:121)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5341)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1259)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
        at dalvik.system.NativeStart.main(Native Method)

The case when I am restarting is when broadcast is received and URL is changed like this:

private EventSource eventSource;
private final BroadcastReceiver pushServerChanged = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        eventSource.setHttpUrl(HttpUrl.get(Config.getInstance().getPushServer()));
        eventSource.restart();
    }
};

During APP initialization I can see this error in the logcat, which I think is related E/dalvikvm: Could not find class 'com.launchdarkly.eventsource.EventSource$3', referenced from method com.launchdarkly.eventsource.EventSource.restart

Am I doing something wrong? Thanks.

masarykadam avatar Aug 15 '20 15:08 masarykadam

Hi @R3nd0gg,

It's normally pretty odd for a class to be found but not one of its inner classes. I would suspect either something relating to code minification (Proguard or R8), or as in this stackoverflow answer some sort of issue with multidex configuration. Could you take a look at those and let us know if you find an issue? To assist you more, we'd probably need to see your build.gradle file to find build related issues.

Thanks, @gwhelanLD

gwhelanLD avatar Aug 20 '20 17:08 gwhelanLD

Hi, first of all I am sorry for responding so late but I forgot about this issue because I resolved issue other way - I am now closing and recreating client manually. However just to help with resolving:

  • proguard has just one line: -dontobfuscate
  • my build.gradle:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.example.app"
        minSdkVersion 19
        targetSdkVersion 29
        versionName "1.40"
        versionCode 140
    }
    signingConfigs {
        release {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
    }
    buildTypes {
        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        release {
            minifyEnabled true
            shrinkResources true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
}

dependencies {
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.5'
//    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.github.bumptech.glide:glide:4.11.0'
    implementation 'com.google.android.exoplayer:exoplayer:2.12.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.media:media:1.2.0'
    implementation "androidx.recyclerview:recyclerview:1.1.0"
    implementation "androidx.cardview:cardview:1.0.0"
    implementation 'com.google.code.gson:gson:2.8.6'
    implementation "com.andkulikov:transitionseverywhere:2.1.0"
    implementation 'com.squareup.okhttp3:okhttp:3.12.12'
    implementation 'com.launchdarkly:okhttp-eventsource:1.11.2'
}

But my specific issue is resolved so this issue can be closed if you want. Thanks

masarykadam avatar Oct 29 '20 13:10 masarykadam