库迁移到AndroidX

时间:2020-01-02 18:37:20

标签: mqtt androidx paho

我在AndroidX应用程序中使用Paho MQTT库。我收到NoClassDefFoundError的异常Landroid/support/v4/content/LocalBroadcastManager。我发现该库使用了分散导入:

import android.support.v4.content.LocalBroadcastManager;

引发异常的功能:

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

如何解决这个问题?我应该下载源代码并重新编译库吗?为什么最新版本尚未完成?

整个异常:

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) 

1 个答案:

答案 0 :(得分:1)

将项目迁移到AndroidX后,我认为您无法再使用android.support.v*。如果您尝试使用androidx.core而非android.support.v4的内容支持库怎么办;我认为这将为您解决问题。

import androidx.core.content.LocalBroadcastManager;

如果您使用的是Android Studio,智能感知在解决由于AndroidX迁移以及建议的更改以支持库提供程序而引起的其他依赖关系问题和/或其他错误/警告方面应该会非常有帮助。

相关问题