tapsellorg / TapsellPlusSDK-FlutterPlugin

Other
6 stars 2 forks source link

Bug: NoClassDefFoundError with OKHttp classpath #8

Closed javaherisaber closed 2 years ago

javaherisaber commented 2 years ago

I have a crash report due to the initialization process of Tapsell. I added okhttp3 to progaurd rules to keep class and its members, but it's not solving the issue.

Fatal Exception: java.lang.NoClassDefFoundError: h.c
       at okhttp3.ResponseBody.create(ResponseBody.java)
       at okhttp3.internal.Util.<clinit>(Util.java)
       at okhttp3.OkHttpClient.<clinit>(OkHttpClient.java)
       at okhttp3.OkHttpClient$Builder.<init>(OkHttpClient.java)
       at ir.tapsell.plus.m.b.<clinit>(b.java)
       at ir.tapsell.plus.d.a(d.java)
       at ir.tapsell.plus.d.b(d.java)
       at ir.tapsell.plus.l.b.a(b.java)
       at ir.tapsell.plus.TapsellPlusManager.<init>(TapsellPlusManager.java)
       at ir.tapsell.plus.TapsellPlusManager.a(TapsellPlusManager.java)
       at ir.tapsell.plus.flutter.TapsellPlus.initialize(TapsellPlus.java)
       at ir.tapsell.plus.flutter.TapsellMethodCallHandler.initialize(TapsellMethodCallHandler.java)
       at ir.tapsell.plus.flutter.TapsellMethodCallHandler.onMethodCall(TapsellMethodCallHandler.java)
       at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java)
       at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java)
       at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java)
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:138)
       at android.os.Looper.loop(Looper.java:123)
       at android.app.ActivityThread.main(ActivityThread.java:5590)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
       at dalvik.system.NativeStart.main(NativeStart.java)
javaherisaber commented 2 years ago

Here is another Crash reported:

Fatal Exception: java.lang.NoClassDefFoundError: ir.tapsell.plus.r$b
       at ir.tapsell.plus.d.a(d.java)
       at ir.tapsell.plus.d.b(d.java)
       at ir.tapsell.plus.l.b.a(b.java)
       at ir.tapsell.plus.TapsellPlusManager.<init>(TapsellPlusManager.java)
       at ir.tapsell.plus.TapsellPlusManager.a(TapsellPlusManager.java)
       at ir.tapsell.plus.flutter.TapsellPlus.initialize(TapsellPlus.java)
       at ir.tapsell.plus.flutter.TapsellMethodCallHandler.initialize(TapsellMethodCallHandler.java)
       at ir.tapsell.plus.flutter.TapsellMethodCallHandler.onMethodCall(TapsellMethodCallHandler.java)
       at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java)
       at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java)
       at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java)
       at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
       at android.os.MessageQueue.next(MessageQueue.java:138)
       at android.os.Looper.loop(Looper.java:123)
       at android.app.ActivityThread.main(ActivityThread.java:5271)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:515)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:851)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:667)
       at dalvik.system.NativeStart.main(NativeStart.java)
mahdi-malv commented 2 years ago

Hi

Thanks for reporting this. Was it tested on release variant?

Any other suggestions for me so I can reproduce it on my machine as well?

javaherisaber commented 2 years ago

@mahdi-malv Yes, this crash is happening on the production (release variant). Here are the data dump of Crashlytics:

Device
Brand:samsung
Model:Galaxy Note4
Orientation: Portrait
RAM free: 354.31 MB
Disk free: 13.23 GB
Operating System
Version:Android 4.4.4
Orientation: Portrait
Rooted:Yes
Crash
Date:Dec 23, 2021, 1:33:56 PM
App version:6.0.11-GP (804)
Device
Brand:HUAWEI
Model:MediaPad
Orientation: Portrait
RAM free: 233.41 MB
Disk free: 638.32 MB
Operating System
Version:Android 4.4.2
Orientation: Portrait
Rooted:No
Crash
Date:Dec 16, 2021, 7:21:12 PM
App version:6.0.8-GP (608)

Seems like all of them are Android 4 users

javaherisaber commented 2 years ago

@mahdi-malv Any updates on this issue?

mahdi-malv commented 2 years ago

Oh hey. Sorry for the delay.

I'm afraid I couldn't find ir.tapsell.plus.r$b artifact in our proguard mapping file to deobfuscate and find the root cause. Can you check app/build/outputs/mapping/release/mapping.txt file and look for this? I want to know if ir.tapsell.plus.r$b is obfuscated by your minify tasks our TapsellPlus's minification.

Also h.c is most likely related to your proguard process. Need to know what that actually is when not obfuscated.

In 2.1.6 of TapsellPlus an issue similar to the first crash was fixed (Related to OKHttp). However I'm not sure whether this is the one or not.

Though, 2.1.6 is not out for Flutter yet. It'll be out soon.

javaherisaber commented 2 years ago

@mahdi-malv Following is my proguard rules for OkHttp:

# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-keepnames class okhttp3.** { *; }

# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*

# OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform

I didn't keep mapping files for previous versions on my app. I'm going to release another version today and save the mapping files to check the issue.

I'll keep you posted.

mahdi-malv commented 2 years ago

The mapping would actually help more. So I'll leave this open until the mapping. BTW, if you feel the mapping is private (since it might be), please consider submitting a ticket and mention this issue.

mahdi-malv commented 2 years ago

Closing. Feel free to re-open if the issue still occurs