コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】java.lang.NoSuchMethodException - com.unity3d.player.x.<init> []

概要

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 が自動でアクティビティを生成し直そうとした場合にも
上記のエラーが発生してアプリが強制終了する

強制終了した後はアプリを正常に起動できる

参考サイト様