CleverTap / clevertap-android-sdk

CleverTap Android SDK

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[RenderMax][Proguard] Unable to Load Classes related to RenderMax library in minified Versions

karthick-rapido opened this issue · comments

Describe the bug
ClassNotFound Exception for Few of the Already Obfuscated Classes in RenderMax Library (In Minifed Versions of App)

To Reproduce
Steps to reproduce the behavior:

  1. Integrate RenderMax SDK
  2. Assemble a Minifed (r8 enabled) version of the Integrated APK
  3. Trigger Any Push Notification (Need Not Be CleverTap PN)
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots/Logs

01-13 03:51:40.235  9792  9792 E AndroidRuntime: FATAL EXCEPTION: main
01-13 03:51:40.235  9792  9792 E AndroidRuntime: Process: com.rapido.rider.staging, PID: 9792
01-13 03:51:40.235  9792  9792 E AndroidRuntime: java.lang.RuntimeException: Unable to start receiver e.c.b.b.openContextMenu: java.lang.ClassNotFoundException: Didn't find class "e.a.d.registerForContextMenu" on path: DexPathList[[zip file "/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk"],nativeLibraryDirectories=[/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/lib/arm64, /data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4770)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.access$1700(ActivityThread.java:310)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:226)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:313)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8663)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "e.a.d.registerForContextMenu" on path: DexPathList[[zip file "/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk"],nativeLibraryDirectories=[/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/lib/arm64, /data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.unregisterForContextMenu$$.setContentView(:1100)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.registerForContextMenu.<clinit>(:2446)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.registerForContextMenu.openContextMenu(Unknown Source:0)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.openContextMenu.onReceive(Unknown Source:1410)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4761)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	... 9 more

Environment (please complete the following information):

  • Device: Any
  • OS: Any
  • CleverTap SDK Version 4.7.0
  • Android Studio Version 2021.3.1 Patch 1
  • RenderMax Version 1.0.1

Additional context
NA

01-13 03:51:40.235  9792  9792 E AndroidRuntime: FATAL EXCEPTION: main
01-13 03:51:40.235  9792  9792 E AndroidRuntime: Process: com.rapido.rider.staging, PID: 9792
01-13 03:51:40.235  9792  9792 E AndroidRuntime: java.lang.RuntimeException: Unable to start receiver e.c.b.b.openContextMenu: java.lang.ClassNotFoundException: Didn't find class "e.a.d.registerForContextMenu" on path: DexPathList[[zip file "/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk"],nativeLibraryDirectories=[/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/lib/arm64, /data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4770)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.access$1700(ActivityThread.java:310)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:226)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:313)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8663)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "e.a.d.registerForContextMenu" on path: DexPathList[[zip file "/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk"],nativeLibraryDirectories=[/data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/lib/arm64, /data/app/~~xc0SSGRHfK8DW5k8qxa4rQ==/com.rapido.rider.staging-2RCsQVGUqm9RPNWM1lsDvA==/base.apk!/lib/arm64-v8a, /system/lib64, /system/system_ext/lib64]]
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.unregisterForContextMenu$$.setContentView(:1100)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.registerForContextMenu.<clinit>(:2446)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.registerForContextMenu.openContextMenu(Unknown Source:0)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at e.c.b.b.openContextMenu.onReceive(Unknown Source:1410)
01-13 03:51:40.235  9792  9792 E AndroidRuntime: 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4761)

Another StackTrace where I tried to not apply any sort of keep rules in pro guard

@karthick-rapido Can you try keeping below entries in proguard

-keep class e.c.b.b.** { *; }
-keep class e.a.d.** { *; }

We will add above entries and other related proguard rules in our documentation soon.

@piyush-kukadiya I already did and it worked.
But doesn't look good to do this on application side on a pre-obfuscated SDK .
For now, we will add this on application side but requesting to add this in RenderMax consumer pro guards itself .

@karthick-rapido yes, we will be doing the same.

@piyush-kukadiya We are also facing one more issue now when we apply more aggressive rules .

01-18 18:42:42.828 14754 14754 E AndroidRuntime: java.lang.RuntimeException: Unable to start receiver e.c.b.b.openContextMenu: java.lang.ClassNotFoundException: com.clevertap.android.sdk.Logger
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4637)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.app.ActivityThread.access$1900(ActivityThread.java:284)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2295)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:233)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:334)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8399)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: com.clevertap.android.sdk.Logger
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at java.lang.Class.classForName(Native Method)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at java.lang.Class.forName(Class.java:454)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at java.lang.Class.forName(Class.java:379)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at e.c.b.b.openContextMenu.onReceive(Unknown Source:1163)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	at android.app.ActivityThread.handleReceiver(ActivityThread.java:4628)
01-18 18:42:42.828 14754 14754 E AndroidRuntime: 	... 9 more

Can you guys check once please ?

@karthick-rapido We have added all rules in consumer file. Expect the release by next week. Meanwhile you can try adding below rules in your proguard file.


# keep firebase
-keep class com.google.firebase.messaging.RemoteMessage{*;}

# keep CleverTap Android SDK
-keep class com.clevertap.android.sdk.Utils{*;}
-keep class com.clevertap.android.sdk.pushnotification.PushNotificationUtil{*;}
-keep class com.clevertap.android.sdk.Logger{*;}
-keep class com.clevertap.android.sdk.pushnotification.NotificationInfo{*;}
-keep interface com.clevertap.android.sdk.Constants{*;}
-keep interface com.clevertap.android.sdk.pushnotification.INotificationRenderer{*;}
-keep interface com.clevertap.android.sdk.interfaces.NotificationRenderedListener{*;}
-keep class com.clevertap.android.sdk.CleverTapInstanceConfig{*;}
-keep class com.clevertap.android.sdk.ManifestInfo{*;}
-keep class com.clevertap.android.sdk.pushnotification.LaunchPendingIntentFactory{*;}
-keep class com.clevertap.android.sdk.pushnotification.CTNotificationIntentService{*;}
-keep class com.clevertap.android.sdk.pushnotification.PushNotificationHandler{*;}
-keep class com.clevertap.android.sdk.CleverTapAPI{
public <methods>;
}
# keep androidX
-keep class androidx.core.app.NotificationCompat{*;}
-keep class androidx.core.app.NotificationCompat$*{*;}

Let us know if you face any other issues.

@karthick-rapido v1.0.2 is live now. Please remove all rules mentioned earlier on this thread to avoid inconsistency. New version has all required rules in consumer-rules.pro file which will get merged to your final build.

@piyush-kukadiya We don't see RenderMax option in our CleverTap Dashboard

Screenshot 2023-01-23 at 5 40 43 PM

Is there something we need to do to enable it ?