I see crashes in the Google Play crash log that is really stumping me.
java.lang.RuntimeException: at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3086) at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3229) at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1926) at android.os.Handler.dispatchMessage (Handler.java:106) at android.os.Looper.loop (Looper.java:214) at android.app.ActivityThread.main (ActivityThread.java:6981) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1445) Caused by: androidx.fragment.app.Fragment$InstantiationException: at androidx.fragment.app.Fragment.instantiate (Fragment.java:462) at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java:50) at androidx.fragment.app.FragmentState.instantiate (FragmentState.java:80) at androidx.fragment.app.FragmentManagerImpl.restoreAllState (FragmentManager.java:3109) at androidx.fragment.app.FragmentController.restoreAllState (FragmentController.java:158) at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:344) at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:85) at com.autotask.jbarra.kotlinmvvm.MainActivity.onCreate (MainActivity.kt:102) at android.app.Activity.performCreate (Activity.java:7326) at android.app.Activity.performCreate (Activity.java:7317) at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3066) Caused by: java.lang.NoSuchMethodException: at java.lang.Class.getConstructor0 (Class.java:2328) at java.lang.Class.getConstructor (Class.java:1725) at androidx.fragment.app.Fragment.instantiate (Fragment.java:443)
the thing is, line 102 of Main activity is nothing special
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) //This is line 102
What could cause this? Why is oncreate throwing no such method? It's happening on a few user's devices and I haven't been able to reproduce it.
The activity is being restored from an instance state bundle. Part of the restore operation is recreating its fragments.
Your activity has a fragment and the fragment class does not have a 0-arg constructor required by the framework.
I'm having the same issue. The other answers did not help.
For me, it looks like it is Proguard. That explains why it only happens in production/release builds and why I have been unable to reproduce it when debugging.
If you're having OP's issue, try the following:
Does it crash? Then try it with the un-obfuscated debug build. If it doesn't then it's probably Proguard.
To fix it I did the following:
add:
buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
See Yaroslav Mytkalyk's answer here: Fragment Instantiation crash, which helped me solve this, although it's a bit old and outdated by now (e.g. "runProguard true" is obsolete).
At least now it doesn't crash when I do the steps above.
PS: I did this in conjunction with adding the 0-arg constructors to my fragments, as mentioned in other answers, since that was my first fixing attempt. I believe that Proguard alone was the issue and that it isn't necessary to add said constructors, but I cannot test that hypothesis now.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With