hivemq / hivemq-mqtt-client

HiveMQ MQTT Client is an MQTT 5.0 and MQTT 3.1.1 compatible and feature-rich high-performance Java client library with different API flavours and backpressure support
https://hivemq.github.io/hivemq-mqtt-client/
Apache License 2.0
832 stars 153 forks source link

app crash on app start while installing from play store on local debugging doesn't showing any error #572

Closed mani-ghotra closed 1 year ago

mani-ghotra commented 1 year ago
Exception java.lang.ExceptionInInitializerError:
  at com.hivemq.client.internal.mqtt.codec.encoder.MqttPingReqEncoder.<clinit> (MqttPingReqEncoder.java)
  at com.hivemq.client.internal.mqtt.codec.encoder.MqttPingReqEncoder_Factory.newInstance (MqttPingReqEncoder_Factory.java)
  at com.hivemq.client.internal.mqtt.codec.encoder.MqttPingReqEncoder_Factory.get (MqttPingReqEncoder_Factory.java)
  at com.hivemq.client.internal.mqtt.codec.encoder.MqttPingReqEncoder_Factory.get (MqttPingReqEncoder_Factory.java)
  at dagger.internal.DoubleCheck.get (DoubleCheck.java:14)
  at com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3ClientMessageEncoders_Factory.get (Mqtt3ClientMessageEncoders_Factory.java:75)
  at com.hivemq.client.internal.mqtt.codec.encoder.mqtt3.Mqtt3ClientMessageEncoders_Factory.get (Mqtt3ClientMessageEncoders_Factory.java:75)
  at dagger.internal.DoubleCheck.get (DoubleCheck.java:14)
  at com.hivemq.client.internal.mqtt.codec.MqttCodecModule.provideMessageEncoders (MqttCodecModule.java:51)
  at com.hivemq.client.internal.mqtt.codec.MqttCodecModule_ProvideMessageEncodersFactory.provideMessageEncoders (MqttCodecModule_ProvideMessageEncodersFactory.java:51)
  at com.hivemq.client.internal.mqtt.codec.MqttCodecModule_ProvideMessageEncodersFactory.get (MqttCodecModule_ProvideMessageEncodersFactory.java:51)
  at com.hivemq.client.internal.mqtt.codec.MqttCodecModule_ProvideMessageEncodersFactory.get (MqttCodecModule_ProvideMessageEncodersFactory.java:51)
  at dagger.internal.DoubleCheck.get (DoubleCheck.java:14)
  at com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoder_Factory.get (MqttEncoder_Factory.java:9)
  at com.hivemq.client.internal.mqtt.codec.encoder.MqttEncoder_Factory.get (MqttEncoder_Factory.java:9)
  at dagger.internal.DoubleCheck.get (DoubleCheck.java:14)
  at com.hivemq.client.internal.mqtt.handler.MqttChannelInitializer_Factory.get (MqttChannelInitializer_Factory.java:30)
  at com.hivemq.client.internal.mqtt.handler.MqttChannelInitializer_Factory.get (MqttChannelInitializer_Factory.java:30)
  at dagger.internal.DoubleCheck.get (DoubleCheck.java:14)
  at com.hivemq.client.internal.mqtt.ioc.DaggerSingletonComponent$ClientComponentImpl$ConnectionComponentImpl.bootstrap (DaggerSingletonComponent.java:176)
  at com.hivemq.client.internal.mqtt.handler.connect.MqttConnAckSingle.connect (MqttConnAckSingle.java:176)
  at com.hivemq.client.internal.mqtt.handler.connect.MqttConnAckSingle.subscribeActual (MqttConnAckSingle.java:58)
  at android.support.v4.media.MediaBrowserCompat$CustomActionCallback.F (MediaBrowserCompat.java:3)
  at io.reactivex.internal.operators.single.SingleObserveOn.subscribeActual (SingleObserveOn.java)
  at android.support.v4.media.MediaBrowserCompat$CustomActionCallback.F (MediaBrowserCompat.java:3)
  at com.hivemq.client.internal.rx.RxFutureConverter$RxSingleFuture.<init> (RxFutureConverter.java)
  at com.hivemq.client.internal.rx.RxFutureConverter.toFuture (RxFutureConverter.java:52)
  at com.hivemq.client.internal.mqtt.MqttAsyncClient.connect (MqttAsyncClient.java:52)
  at com.hivemq.client.internal.mqtt.mqtt3.Mqtt3AsyncClientView.connect (Mqtt3AsyncClientView.java:52)
  at com.hivemq.client.internal.mqtt.mqtt3.Mqtt3AsyncClientView.connect (Mqtt3AsyncClientView.java:52)
  at com.manpreet.digitalsignagehall.MqttHandler.createObj (MqttHandler.java:314)
  at com.manpreet.digitalsignagehall.MainActivity.connectToMqtt (MainActivity.java:314)
  at com.manpreet.digitalsignagehall.MainActivity.onCreate (MainActivity.java:314)
  at android.app.Activity.performCreate (Activity.java:7994)
  at android.app.Activity.performCreate (Activity.java:7978)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1309)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3404)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3595)
  at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:85)
  at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:135)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:95)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2066)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loop (Looper.java:223)
  at android.app.ActivityThread.main (ActivityThread.java:7664)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:947)
Caused by java.lang.IllegalArgumentException: Can't find '[toLeakAwareBuffer]' in g9.b
  at io.netty.util.ResourceLeakDetector.addExclusions (ResourceLeakDetector.java)
  at io.netty.buffer.AbstractByteBufAllocator.<clinit> (AbstractByteBufAllocator.java)

my connection code on android is

 try {
            val clientBuilder: Mqtt3ClientBuilder =
                Mqtt3Client.builder().identifier(UUID.randomUUID().toString())
                    .addConnectedListener(this)
                    .automaticReconnectWithDefaultConfig()
                    .serverHost(ip)
                    .serverPort(port)

            val client = clientBuilder
                .addDisconnectedListener {
                    print(it)
                }.addConnectedListener {
                    print(it)
                }
                .buildAsync()

            client.toAsync().connect()

            client.subscribeWith()
                .addSubscription().topicFilter("#").qos(MqttQos.AT_MOST_ONCE).applySubscription()
                .callback {
                    val common = try {
                        String(it.payloadAsBytes)
                    } catch (e: Exception) {
                        Log.d("TAG", "messageArrived: ${it.topic}" + e.message)
                        "0"
                    }
                    Log.d("TAG COMMON", "messageArrived: ${it.topic}" + common)

                }
                .send().whenCompleteAsync { mqtt3SubAck, throwable ->
                    print(mqtt3SubAck)
                    print(throwable)
                }
        } catch (e: Exception) {
            print(e)
        }

and this is my gradle file

 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
    buildFeatures {
        viewBinding true
    }
    packagingOptions {
        exclude "DebugProbesKt.bin"
        exclude "META-INF/INDEX.LIST"
        exclude "META-INF/io.netty.versions.properties"
    }
}

dependencies {

    implementation 'androidx.core:core-ktx:1.10.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.leanback:leanback:1.0.0'
    implementation 'com.github.bumptech.glide:glide:4.15.0'
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
    implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
    implementation 'com.intuit.sdp:sdp-android:1.1.0'
    implementation 'com.intuit.ssp:ssp-android:1.1.0'

    //Exo Player
    implementation 'com.google.android.exoplayer:exoplayer:2.18.6'

    //Vimeo Extractor
    implementation 'com.github.ed-george:AndroidVimeoExtractor:1.2.1'

    //Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.google.code.gson:gson:2.10.1'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    // ViewModel
    implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

    // okhttp
    implementation "com.squareup.okhttp3:okhttp:4.10.0"
    implementation "com.squareup.okhttp3:logging-interceptor:4.9.0"

    //Live Data
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1"

    // Coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'

    //dagger hilt
    implementation("com.google.dagger:hilt-android:2.44")
    kapt("com.google.dagger:hilt-android-compiler:2.44")

    implementation 'androidx.hilt:hilt-navigation-fragment:1.0.0'

    implementation "androidx.fragment:fragment-ktx:1.5.7"

    //Mqtt
    implementation("com.hivemq:hivemq-mqtt-client:1.3.0")

    //file Save
    api group: 'commons-io', name: 'commons-io', version: '2.6'
SgtSilvio commented 1 year ago

This looks like a proguard issue. Please share your proguard-riles.pro. Did you follow the steps in the documentation (https://hivemq.github.io/hivemq-mqtt-client/docs/installation/android/)?

pglombardo commented 1 year ago

Hi @mani-ghotra - have you made any progress on this issue? If not, we'd be happy to help.

mani-ghotra commented 1 year ago

This looks like a proguard issue. Please share your proguard-riles.pro. Did you follow the steps in the documentation (https://hivemq.github.io/hivemq-mqtt-client/docs/installation/android/)?

My bad i missed editing proguard file