1

I'm using Paho MQTT library in my AndroidX application. I'm getting exception NoClassDefFoundError for Landroid/support/v4/content/LocalBroadcastManager. I found that library uses depricated import:

import android.support.v4.content.LocalBroadcastManager;

Function that rises exception:

private void registerReceiver(BroadcastReceiver receiver) {
    IntentFilter filter = new IntentFilter();
            filter.addAction(MqttServiceConstants.CALLBACK_TO_ACTIVITY);
            LocalBroadcastManager.getInstance(myContext).registerReceiver(receiver, filter);
            receiverRegistered = true;
}

How to solve this problem? Should I download source and recompile library? Why it is not already done in latest release?

Whole exception:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.eurbon.pahomqttclientexample, PID: 17368
    java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v4/content/LocalBroadcastManager;
        at org.eclipse.paho.android.service.MqttAndroidClient.registerReceiver(MqttAndroidClient.java:450)
        at org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:428)
        at org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:334)
        at paho.android.mqtt_example.MainActivity.MqttConnect(MainActivity.java:121)
        at paho.android.mqtt_example.MainActivity.onCreate(MainActivity.java:63)
        at android.app.Activity.performCreate(Activity.java:6679)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.LocalBroadcastManager" on path: DexPathList[[zip file "/data/app/com.eurbon.pahomqttclientexample-1/base.apk"],nativeLibraryDirectories=[/data/app/com.eurbon.pahomqttclientexample-1/lib/x86, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at org.eclipse.paho.android.service.MqttAndroidClient.registerReceiver(MqttAndroidClient.java:450) 
        at org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:428) 
        at org.eclipse.paho.android.service.MqttAndroidClient.connect(MqttAndroidClient.java:334) 
        at paho.android.mqtt_example.MainActivity.MqttConnect(MainActivity.java:121) 
        at paho.android.mqtt_example.MainActivity.onCreate(MainActivity.java:63) 
        at android.app.Activity.performCreate(Activity.java:6679) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
vico
  • 17,051
  • 45
  • 159
  • 315

1 Answers1

1

After migrating a project to AndroidX, I don't think you can use android.support.v* anymore. What if you try and use the content support library from androidx.core and not android.support.v4; I think that will resolve the issue for you.

import androidx.core.content.LocalBroadcastManager;

If you're using Android Studio the intellisense should be pretty helpful in resolving other dependency issues and/or other errors/warnings due to the AndroidX migration and the suggested change to support library providers.