概要
MessagingUnityPlayerActivity.onCreate java.lang.NoSuchMethodException - com.unity3d.player.x.<init> [] com.google.firebase MessagingUnityPlayerActivity.java:80
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{XXXX/com.google.firebase.MessagingUnityPlayerActivity}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.unity3d.player.a.d: could not find Fragment constructor at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3683) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3820) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2315) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7935) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1149)
Caused by android.app.Fragment$InstantiationException: Unable to instantiate fragment com.unity3d.player.a.d: could not find Fragment constructor at android.app.Fragment.instantiate(Fragment.java:562) at android.app.FragmentContainer.instantiate(FragmentContainer.java:53) at android.app.FragmentState.instantiate(FragmentState.java:77) at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:2867) at android.app.FragmentController.restoreAllState(FragmentController.java:143) at android.app.Activity.onCreate(Activity.java:1649) at com.unity3d.player.UnityPlayerActivity.onCreate(UnityPlayerActivity.java:35) at com.google.firebase.MessagingUnityPlayerActivity.onCreate(MessagingUnityPlayerActivity.java:80) at android.app.Activity.performCreate(Activity.java:8291) at android.app.Activity.performCreate(Activity.java:8270) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3664) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3820) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2315) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7935) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1149)
Caused by java.lang.NoSuchMethodException: com.unity3d.player.a.d.<init> [] at java.lang.Class.getConstructor0(Class.java:2363) at java.lang.Class.getConstructor(Class.java:1759) at android.app.Fragment.instantiate(Fragment.java:543) at android.app.FragmentContainer.instantiate(FragmentContainer.java:53) at android.app.FragmentState.instantiate(FragmentState.java:77) at android.app.FragmentManagerImpl.restoreAllState(FragmentManager.java:2867) at android.app.FragmentController.restoreAllState(FragmentController.java:143) at android.app.Activity.onCreate(Activity.java:1649) at com.unity3d.player.UnityPlayerActivity.onCreate(UnityPlayerActivity.java:35) at com.google.firebase.MessagingUnityPlayerActivity.onCreate(MessagingUnityPlayerActivity.java:80) at android.app.Activity.performCreate(Activity.java:8291) at android.app.Activity.performCreate(Activity.java:8270) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3664) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3820) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2315) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7935) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1149)
Unity 2022.3.16f1 と Firebase を使用している Android アプリで
上記のエラーが発生する現象に遭遇した
調べてみたら Unity Issue Tracker に報告が上がっていた
Android の設定の「システム > 開発者向けオプション」の
「アクティビティを保持しない」が有効な状態で
Android アプリで通知許可ダイアログが表示されている時に
アプリをバックグラウンドにして再度開こうとすると
上記のエラーが発生してアプリが強制終了する
「アクティビティを保持しない」が無効でも
Android でたくさんのアプリを起動していたりメモリが不足したりしている状態で
バックグラウンドになっているアプリを再度開こうとした際に
Android が自動でアクティビティを生成し直そうとした場合にも
上記のエラーが発生してアプリが強制終了する
強制終了した後はアプリを正常に起動できる