nexmo-community / client-sdk-tutorials

MIT License
5 stars 10 forks source link

Proguard rules for Nexmo client sdk Android? #22

Open iori57 opened 2 years ago

iori57 commented 2 years ago

We're currently building in app messaging feature using Nexmo client SDK for Android.

When we set minifyEnabled=true for Android release build, the app crashes constantly when calling one of the SDK methods.

2022-04-27 13:45:00.772 22774-22774/? E/rdiancorp.snap: Failed to register native method com.nexmo.minirtcsdk.MRTCMediaNative.nativeEnableMedia(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;J)V in /data/app/~~VQkgDwZFg9wL-mZaKiBtgw==/au.com.guardiancorp.snapp-zJygkDUCHoHg_Uvbe_DR4A==/base.apk
2022-04-27 13:45:00.772 22774-22774/? A/rdiancorp.snap: thread.cc:2365] No pending exception expected: java.lang.NoSuchMethodError: no static or non-static method "Lcom/nexmo/minirtcsdk/MRTCMediaNative;.nativeEnableMedia(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IILjava/lang/String;Ljava/lang/String;J)V"
    thread.cc:2365]   at java.lang.Object com.nexmo.minirtcsdk.MRTCMedia.nativeCreateRTCMedia(int, long, java.lang.String[], boolean, boolean) (MRTCMedia.java:-2)
    thread.cc:2365]   at void com.nexmo.minirtcsdk.MRTCMedia.<init>(cd.d, int, long, java.lang.String[], boolean, boolean) (MRTCMedia.java:8)
    thread.cc:2365]   at void hc.d.<init>(android.content.Context, fc.k$d, hc.l, hc.s) (CoreConversationClient.java:36)
    thread.cc:2365]   at void fc.k.<init>(fc.k$d, android.content.Context) (NexmoClient.java:11)
    thread.cc:2365]   at fc.k fc.k.a(fc.k$d, android.content.Context) (NexmoClient.java:4)
    thread.cc:2365]   at void hb.l.b(java.lang.Object) (NexmoChatService.kt:21)
    thread.cc:2365]   at void sa.e.b(java.lang.Object) (LifestreamSDK.kt:2)
    thread.cc:2365]   at void va.a.a(en.b, en.z) (BaseService.kt:26)
    thread.cc:2365]   at void en.h.run() (R8$$SyntheticClass:3)
    thread.cc:2365]   at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:938)
    thread.cc:2365]   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:99)
    thread.cc:2365]   at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:201)
    thread.cc:2365]   at void android.os.Looper.loop() (Looper.java:288)
    thread.cc:2365]   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:7839)
    thread.cc:2365]   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
    thread.cc:2365]   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:548)
    thread.cc:2365]   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1003)
    thread.cc:2365] 

My question is, if there an official proguard rules section for Nexmo client sdk?

I added some wildcard proguard rules below that basically disables obfuscation of nexmo totally, and it solved the issue, but just wondering if this is the right way to do it:

-keep class com.nexmo.** { *; }
-keepclassmembers class com.nexmo.** { *; }
-dontwarn com.nexmo.**

Thanks, Bruce