EventSource.restart() throws java.lang.NoClassDefFoundError
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.
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
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