Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
karthick-rapido opened this issue Jan 12, 2023 · 8 comments · Fixed by #384

Comments

@karthick-rapido
Copy link

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

@karthick-rapido
Copy link
Author

karthick-rapido commented Jan 12, 2023

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

@piyush-kukadiya
Copy link
Contributor

@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.

@karthick-rapido
Copy link
Author

@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 .

@piyush-kukadiya
Copy link
Contributor

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

@karthick-rapido
Copy link
Author

@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 ?

@piyush-kukadiya
Copy link
Contributor

@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.

@piyush-kukadiya
Copy link
Contributor

@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.

@karthick-rapido
Copy link
Author

@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 ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants