haiyangwu / mediasoup-client-android

mediasoup android client side library https://mediasoup.org
MIT License
179 stars 107 forks source link

JNI creation of MediasoupException isn't working #30

Closed rawnsley closed 4 years ago

rawnsley commented 4 years ago

Native errors are thrown back to the JVM using MediasoupException. The helper macro that does this uses JniEnv->ThrowNew, but this fails because it is expecting to find a constructor that takes a String (explained here). Instead you get something like this logcat error:

E/art: No <init>(Ljava/lang/String;)V in java.lang.Class<org.mediasoup.droid.MediasoupException>
E/AndroidRuntime: FATAL EXCEPTION: worker
    Process: org.mediasoup.droid.demo, PID: 2965
    java.lang.NoSuchMethodError: no non-static method "Lorg/mediasoup/droid/MediasoupException;.<init>(Ljava/lang/String;)V"
        at org.mediasoup.droid.Device.nativeLoad(Native Method)
        at org.mediasoup.droid.Device.load(Device.java:19)
        at org.mediasoup.droid.lib.RoomClient.joinImpl(RoomClient.java:669)
        at org.mediasoup.droid.lib.RoomClient.access$500(RoomClient.java:38)
        at org.mediasoup.droid.lib.RoomClient$2.lambda$onOpen$0$RoomClient$2(RoomClient.java:574)
        at org.mediasoup.droid.lib.-$$Lambda$RoomClient$2$1yrKTPoWaRxWuD7Kk1QcDNV7v7Y.run(lambda)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.os.HandlerThread.run(HandlerThread.java:61)

This could be fixed by either creating an instance of the exception and throwing that or by adding the missing constructor to the Java class.