[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:
- Integrate RenderMax SDK
- Assemble a Minifed (r8 enabled) version of the Integrated APK
- Trigger Any Push Notification (Need Not Be CleverTap PN)
- 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
Is there something we need to do to enable it ?