crisp-im / crisp-sdk-android

:package: Crisp Android SDK, add a chat in any Android app and communicate with your users.
https://docs.crisp.chat/guides/chatbox-sdks/android-sdk/
Other
56 stars 17 forks source link

Unable to instantiate fragment im.crisp.client.internal.ui.a.a.c: could not find Fragment constructor #109

Closed kakarrot closed 2 years ago

kakarrot commented 2 years ago

Caused by androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment im.crisp.client.internal.ui.a.a.c: could not find Fragment constructor at androidx.fragment.app.Fragment.instantiate(Fragment.java:66) at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java) at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:17) at androidx.fragment.app.FragmentStateManager.(FragmentStateManager.java:15) at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:108) at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:8) at androidx.fragment.app.FragmentActivity$2.onContextAvailable(FragmentActivity.java:30) at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:20) at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:7) at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java) at org.junit.Assert.fail(Assert.java) at android.app.Activity.performCreate(Activity.java:8108) at android.app.Activity.performCreate(Activity.java:8092) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3501) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703) at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5589) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5488) at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58) at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5541) at android.app.ActivityThread.access$3500(ActivityThread.java:252) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2162) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:250) at android.app.ActivityThread.main(ActivityThread.java:7886) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

Caused by java.lang.NoSuchMethodException: im.crisp.client.internal.ui.a.a.c. [] at java.lang.Class.getConstructor0(Class.java:2332) at java.lang.Class.getConstructor(Class.java:1728) at androidx.fragment.app.Fragment.instantiate(Fragment.java:15) at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java) at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:17) at androidx.fragment.app.FragmentStateManager.(FragmentStateManager.java:15) at androidx.fragment.app.FragmentManager.restoreSaveState(FragmentManager.java:108) at androidx.fragment.app.FragmentController.restoreSaveState(FragmentController.java:8) at androidx.fragment.app.FragmentActivity$2.onContextAvailable(FragmentActivity.java:30) at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:20) at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:7) at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java) at org.junit.Assert.fail(Assert.java) at android.app.Activity.performCreate(Activity.java:8108) at android.app.Activity.performCreate(Activity.java:8092) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3501) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3703) at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:5589) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:5488) at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:69) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:58) at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:5541) at android.app.ActivityThread.access$3500(ActivityThread.java:252) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2162) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:250) at android.app.ActivityThread.main(ActivityThread.java:7886) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

Doc1faux commented 2 years ago

Hi @kakarrot and thank you for your feedback.

Could you please specify the SDK version? I suppose it is the latest 1.0.11? Could your provide me also the Android version on which the app was running, maybe the specific device and also what is the context of the crash?

Thanks in advance :)

Doc1faux commented 2 years ago

This is strange because in the latest 1.0.11, there is no im.crisp.client.internal.ui package at all, it is obfuscated by R8. Moreover, there is no direct usage in layouts of fragments that could cause a fragment instantiation from the inflater.

Are you trying to include directly the fragment instead of the activity? This feature is coming in a future release as described in #70 ;)

kakarrot commented 2 years ago

No, I'm using 1.0.9, not trying to directly the fragment instead of the activity, just like the sample code, which init code in appliction,start ChatActvity in somewhere.

Doc1faux commented 2 years ago

Strange... I tried 1.0.9 but got no error about im.crisp.client.internal.ui.a.a.c fragment instantiation which is the error dialog on chat activity starting if any error occured during connection... I checked the .aar package and needed methods (included the constructor) exist... However, if I enable R8 full mode (add android.enableR8.fullMode=true in gradle.properties), I got a crash but about generic classes which has been fixed in 1.0.10 with #96. I don't know where this crash could come from :/

Doc1faux commented 2 years ago

Moved from @StevenWatremez post in #115

Context

Same as the previous one we have an other crash that occurs 2 times for 2 users.

Crash log

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{fr.leocare.app/im.crisp.client.ChatActivity}: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment im.crisp.client.internal.ui.a.a.c: could not find Fragment constructor
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4037)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4203)
       at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:6340)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:6205)
       at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:71)
       at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:65)
       at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:6294)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2450)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8641)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)

Caused by androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment im.crisp.client.internal.ui.a.a.c: could not find Fragment constructor
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:630)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$2.instantiate(FragmentManager.java:448)
       at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:81)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2410)
       at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:2584)
       at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:116)
       at androidx.fragment.app.FragmentActivity.lambda$init$1$androidx-fragment-app-FragmentActivity(FragmentActivity.java:128)
       at androidx.fragment.app.FragmentActivity$$ExternalSyntheticLambda0.onContextAvailable(:2)
       at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:99)
       at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:320)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:249)
       at im.crisp.client.ChatActivity.onCreate()
       at android.app.Activity.performCreate(Activity.java:8282)
       at android.app.Activity.performCreate(Activity.java:8262)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4011)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4203)
       at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:6340)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:6205)
       at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:71)
       at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:65)
       at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:6294)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2450)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8641)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)

Caused by java.lang.NoSuchMethodException: im.crisp.client.internal.ui.a.a.c.<init> []
       at java.lang.Class.getConstructor0(Class.java:2363)
       at java.lang.Class.getConstructor(Class.java:1759)
       at androidx.fragment.app.Fragment.instantiate(Fragment.java:615)
       at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
       at androidx.fragment.app.FragmentManager$2.instantiate(FragmentManager.java:448)
       at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:81)
       at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
       at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2410)
       at androidx.fragment.app.FragmentManager.attachController(FragmentManager.java:2584)
       at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:116)
       at androidx.fragment.app.FragmentActivity.lambda$init$1$androidx-fragment-app-FragmentActivity(FragmentActivity.java:128)
       at androidx.fragment.app.FragmentActivity$$ExternalSyntheticLambda0.onContextAvailable(:2)
       at androidx.activity.contextaware.ContextAwareHelper.dispatchOnContextAvailable(ContextAwareHelper.java:99)
       at androidx.activity.ComponentActivity.onCreate(ComponentActivity.java:320)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:249)
       at im.crisp.client.ChatActivity.onCreate()
       at android.app.Activity.performCreate(Activity.java:8282)
       at android.app.Activity.performCreate(Activity.java:8262)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4011)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4203)
       at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:6340)
       at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:6205)
       at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:71)
       at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
       at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
       at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
       at android.app.ClientTransactionHandler.executeTransaction(ClientTransactionHandler.java:65)
       at android.app.ActivityThread.handleRelaunchActivityLocally(ActivityThread.java:6294)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2450)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loopOnce(Looper.java:226)
       at android.os.Looper.loop(Looper.java:313)
       at android.app.ActivityThread.main(ActivityThread.java:8641)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1133)

Information

OS Version : Android 12 et 11
Phones : Galaxy S20 FE, Redmi Note 11
SDK Version : 1.0.9
Doc1faux commented 2 years ago

I've just fixed this crash (public no args constructor was missing for dialog fragment...). It will be released in the next 1.0.12 release. I let you know when it will be available.

StevenWatremez commented 2 years ago

Nice thanks, I will try the next release.

Doc1faux commented 2 years ago

@kakarrot @StevenWatremez 1.0.12 fixing this issue has just been released. It can take a few hours before it will be available. I close the issue.