Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Paho MQTT v1.2.1 occur crash on Android #630

Open
1 task done
kami4ka opened this issue Feb 22, 2019 · 8 comments
Open
1 task done

Paho MQTT v1.2.1 occur crash on Android #630

kami4ka opened this issue Feb 22, 2019 · 8 comments

Comments

@kami4ka
Copy link

kami4ka commented Feb 22, 2019

Please fill out the form below before submitting, thank you!

  • Bug exists Release Version 1.2.1 ( Master Branch)
  • [?] Bug exists in MQTTv3 Client on Snapshot Version 1.2.1-SNAPSHOT (Develop Branch)
  • [?] Bug exists in MQTTv5 Client on Snapshot Version 1.2.1-SNAPSHOT (Develop Branch)

If this is a bug regarding the Android Service, please raise the bug here instead: https://github.com/eclipse/paho.mqtt.android/issues/new

I've updated the Paho MQTT version from 1.2.0 to 1.2.1 in my Android project (with 1.1.1 of paho android service) to prevent the application crashes and bugs (to have bug-free version of the library) and it crashes with the following reason:

Caused by: java.lang.ClassNotFoundException: Didn't find class "org.eclipse.paho.client.mqttv3.internal.TCPNetworkModuleFactory"

Have someone faced the same problem?

@icraggs
Copy link
Collaborator

icraggs commented Feb 26, 2019

I'm not sure why this should be a problem on Android. If you have any more information that might help?

@kami4ka
Copy link
Author

kami4ka commented Feb 28, 2019

I'm following the next steps:

  1. Runs the application with 1.2.0 version oh Paho MQTT - everything works fine.
  2. Change version of org.eclipse.paho:org.eclipse.paho.client.mqttv3 to 1.2.1 in the Gradle file
  3. Trying to run the application again (after Android Studio restart and cache invalidate. Also project clean and rebuild)
  4. Application crashes with the following stacktrace:
 java.util.ServiceConfigurationError: org.eclipse.paho.client.mqttv3.spi.NetworkModuleFactory: Provider org.eclipse.paho.client.mqttv3.internal.TCPNetworkModuleFactory not found
        at java.util.ServiceLoader.fail(ServiceLoader.java:225)
        at java.util.ServiceLoader.-wrap1(ServiceLoader.java)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:366)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:448)
        at org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI(NetworkModuleService.java:64)
        at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:454)
        at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:320)
        at org.eclipse.paho.android.service.MqttConnection.connect(MqttConnection.java:289)
        at org.eclipse.paho.android.service.MqttService.connect(MqttService.java:329)
        at org.eclipse.paho.android.service.MqttAndroidClient.doConnect(MqttAndroidClient.java:467)
        at org.eclipse.paho.android.service.MqttAndroidClient.access$200(MqttAndroidClient.java:76)
        at org.eclipse.paho.android.service.MqttAndroidClient$MyServiceConnection.onServiceConnected(MqttAndroidClient.java:115)
        at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1516)
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1544)
        at android.os.Handler.handleCallback(Handler.java:751)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6780)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1500)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1390)
     Caused by: java.lang.ClassNotFoundException: org.eclipse.paho.client.mqttv3.internal.TCPNetworkModuleFactory
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:400)
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:364)
        at java.util.ServiceLoader$1.next(ServiceLoader.java:448) 
        at org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI(NetworkModuleService.java:64) 
        at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:454) 
        at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:320) 
        at org.eclipse.paho.android.service.MqttConnection.connect(MqttConnection.java:289) 
        at org.eclipse.paho.android.service.MqttService.connect(MqttService.java:329) 
        at org.eclipse.paho.android.service.MqttAndroidClient.doConnect(MqttAndroidClient.java:467) 
        at org.eclipse.paho.android.service.MqttAndroidClient.access$200(MqttAndroidClient.java:76) 
        at org.eclipse.paho.android.service.MqttAndroidClient$MyServiceConnection.onServiceConnected(MqttAndroidClient.java:115) 
        at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1516) 
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1544) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6780) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1500) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1390) 
     Caused by: java.lang.ClassNotFoundException: Didn't find class "org.eclipse.paho.client.mqttv3.internal.TCPNetworkModuleFactory" on path: DexPathList[[zip file "/system/framework/android.test.runner.jar", zip file "/data/app/com.my.cool.app.dev-2/base.apk"],nativeLibraryDirectories=[/data/app/com.my.cool.app.dev-2/lib/arm64, /system/lib64, /vendor/lib64]]
        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 java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:400) 
        at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:364) 
        at java.util.ServiceLoader$1.next(ServiceLoader.java:448) 
        at org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI(NetworkModuleService.java:64) 
        at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:454) 
        at org.eclipse.paho.client.mqttv3.MqttAsyncClient.<init>(MqttAsyncClient.java:320) 
        at org.eclipse.paho.android.service.MqttConnection.connect(MqttConnection.java:289) 
        at org.eclipse.paho.android.service.MqttService.connect(MqttService.java:329) 
        at org.eclipse.paho.android.service.MqttAndroidClient.doConnect(MqttAndroidClient.java:467) 
        at org.eclipse.paho.android.service.MqttAndroidClient.access$200(MqttAndroidClient.java:76) 
        at org.eclipse.paho.android.service.MqttAndroidClient$MyServiceConnection.onServiceConnected(MqttAndroidClient.java:115) 
        at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1516) 
        at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1544) 
        at android.os.Handler.handleCallback(Handler.java:751) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6780) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1500) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1390) 

I'd like to help with all possible clue, so feel free to request anything that might be helpful.

@gaborauth
Copy link

Here is my stacktrace, same issue after 1.2.0 -> 1.2.1.

Caused by java.lang.ClassNotFoundException org.eclipse.paho.client.mqttv3.internal.TCPNetworkModuleFactory

java.lang.Class.classForName (Class.java)
java.lang.Class.forName (Class.java:400)
java.util.ServiceLoader$LazyIterator.next (ServiceLoader.java:364)
java.util.ServiceLoader$1.next (ServiceLoader.java:448)
org.eclipse.paho.client.mqttv3.internal.NetworkModuleService.validateURI (NetworkModuleService.java:64)
org.eclipse.paho.client.mqttv3.MqttAsyncClient. (MqttAsyncClient.java:454)
org.eclipse.paho.client.mqttv3.MqttAsyncClient. (MqttAsyncClient.java:320)
org.eclipse.paho.client.mqttv3.MqttAsyncClient. (MqttAsyncClient.java:315)
live.iotguru.plugin.dashboard.ui.DashboardPresenter.mqttConnection (DashboardPresenter.kt:60)
live.iotguru.plugin.dashboard.ui.DashboardFragment.onViewCreated (DashboardFragment.kt:108)

@Y-Datsenko
Copy link

Hello, I have the same issue after upgrade from 1.2.0 to 1.2.1.

@nekontachik
Copy link

Hi, I will be grateful if you look, because I have the same issue

@icraggs
Copy link
Collaborator

icraggs commented Mar 12, 2019

I can't promise anything quick - I've not run an Android development environment for a while.

gaborauth referenced this issue Mar 13, 2019
The explicit classloader is necessary for Android to be able to find and
load the declared NetworkModuleFactories

Signed-off-by: Maik Scheibler <eclipse@scheibler-family.de>
@bwt
Copy link

bwt commented Apr 18, 2019

adding

-keep class * implements org.eclipse.paho.client.mqttv3.spi.NetworkModuleFactory

to the proguard / R8 config (proguard-rules.pro) solved the issue for me. The resulting APK is about 10k bigger

@accursoft
Copy link

I've got this after upgrading from 1.2.0 to 1.2.2 on desktop. Gradle shadowJar isn't including TCPNetworkModuleFactory .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants