SAP / gigya-android-sdk

SAP CDC (Gigya) android sdk for mobile
Apache License 2.0
19 stars 13 forks source link

IllegalStateException: The requested cached FlutterEngine did not exist in the FlutterEngineCache: 'nss_engine_id' #33

Closed lo-g closed 1 year ago

lo-g commented 2 years ago

Hi, from my crashlytics board I've noticed a certain number of this crash:

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{it.android.xxx/com.gigya.android.sdk.nss.NssActivity}: java.lang.IllegalStateException: The requested cached FlutterEngine did not exist in the FlutterEngineCache: 'nss_engine_id'
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3479)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3651)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       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:2104)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:7861)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
Caused by java.lang.IllegalStateException: The requested cached FlutterEngine did not exist in the FlutterEngineCache: 'nss_engine_id'
       at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.setupFlutterEngine(FlutterActivityAndFragmentDelegate.java:4)
       at io.flutter.embedding.android.FlutterFragment.onAttach(FlutterFragment.java:4)
       at androidx.fragment.app.Fragment.performAttach(Fragment.java:2)
       at androidx.fragment.app.FragmentStateManager.attach(FragmentStateManager.java:4)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:6)
       at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:1)
       at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1)
       at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3)
       at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2)
       at androidx.fragment.app.FragmentController.dispatchCreate(FragmentController.java:1)
       at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:1)
       at io.flutter.embedding.engine.FlutterEngine.getDartExecutor(FlutterEngine.java)
       at android.app.Activity.performCreate(Activity.java:8109)
       at android.app.Activity.performCreate(Activity.java:8083)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3452)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3651)
       at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
       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:2104)
       at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:236)
       at android.app.ActivityThread.main(ActivityThread.java:7861)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)

Searching on internet I found this issue: https://github.com/flutter/flutter/issues/51353, maybe moving this block before super.onCreate(savedInstanceState) will fix this crash? :

        engineLifeCycle = Gigya.getContainer().get(NssEngineLifeCycle::class.java)

        val ignitionData = intent?.extras?.getParcelable<IgnitionData>(EXTRA_DATA)
        ignitionData.guard {
            throw RuntimeException("Missing initialization data. Please verify that at least on the the NSS loading options has been provided (asset, hosted id).")
        }

        val engine = engineLifeCycle?.getNssEngine()

Unfortunately I'm not able to reproduce it directly...

Other info:

tal-mi commented 2 years ago

What are you trying to do in your flow? Are you using the NSS engine?

tal-mi commented 1 year ago

Closing (obsolete)

dermdaly commented 3 weeks ago

We are seeing this in our app too. It is the single biggest source of crashes. Looks like the Gigya NSS code is not correctly handling if an engine is in the cache or not. Could this bug be reopened?

MircoVigna17 commented 6 days ago

@tal-mi Same here. We are facing the same crash on some devices. Also the Google Review is failing because this crash happens on a x86-64 testing device.

We are not using the NssEngine, we use Nss.Builder only for loading the proper nss as follow:

   private val nss by lazy {
        if (GigyaNss.getInstance().isSupported){
            GigyaNss.getInstance()
                .load(BuildConfig.GIGYA_NSS_SCREEN_ID)
        } else null
    }

...
          nss?.initialRoute(screenId)
              ?.eventsFor(
                  screenId = screenId,
                  handler = OneNssScreenEvents(
                      screenId = screenId,
                      onSubmit = onSubmit,
                      onScreenDidLoad = { isLoading = false }
                  )
              )
              ?.eventsFor(screenId = "account-update", handler = AccountUpdateScreenEvents())
              ?.events(events = OneNssEvents(onError = onError, onSuccess = onSuccess))
              ?.show(launcherContext = context)

Here the logs of the crash

Exception java.lang.RuntimeException: Unable to start activity ComponentInfo{it.android.gedi.onepodcast/com.gigya.android.sdk.nss.NssActivity}: java.lang.IllegalStateException: The requested cached FlutterEngine did not exist in the FlutterEngineCache: 'nss_engine_id'
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3707)
  at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3864)
  at android.app.ActivityThread.handleRelaunchActivityInner (ActivityThread.java:5811)
  at android.app.ActivityThread.handleRelaunchActivity (ActivityThread.java:5703)
  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.ActivityThread$H.handleMessage (ActivityThread.java:2253)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at androidx.test.espresso.base.Interrogator.loopAndInterrogate (Interrogator.java:10)
  at androidx.test.espresso.base.UiControllerImpl.loopUntil (UiControllerImpl.java:7)
  at androidx.test.espresso.base.UiControllerImpl.loopUntil (UiControllerImpl.java:1)
  at androidx.test.espresso.base.UiControllerImpl.injectMotionEvent (UiControllerImpl.java:5)
  at androidx.test.espresso.action.MotionEvents.sendUp (MotionEvents.java:6)
  at androidx.test.espresso.action.MotionEvents.sendUp (MotionEvents.java:1)
  at androidx.test.espresso.action.Tap.sendSingleTap (Tap.java:5)
  at androidx.test.espresso.action.Tap.-$$Nest$smsendSingleTap
  at androidx.test.espresso.action.Tap$1.sendTap (Tap.java:1)
  at androidx.test.espresso.action.GeneralClickAction.perform (GeneralClickAction.java:4)
  at androidx.test.espresso.ViewInteraction$SingleExecutionViewAction.perform (ViewInteraction.java:2)
  at androidx.test.espresso.ViewInteraction.doPerform (ViewInteraction.java:23)
  at androidx.test.espresso.ViewInteraction.-$$Nest$mdoPerform
  at androidx.test.espresso.ViewInteraction$1.call (ViewInteraction.java:6)
  at androidx.test.espresso.ViewInteraction$1.call (ViewInteraction.java:1)
  at java.util.concurrent.FutureTask.run (FutureTask.java:266)
  at android.os.Handler.handleCallback (Handler.java:938)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loopOnce (Looper.java:201)
  at android.os.Looper.loop (Looper.java:288)
  at android.app.ActivityThread.main (ActivityThread.java:7870)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:548)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1003)
Caused by java.lang.IllegalStateException: The requested cached FlutterEngine did not exist in the FlutterEngineCache: 'nss_engine_id'
  at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.setupFlutterEngine (FlutterActivityAndFragmentDelegate.java:66)
  at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach (FlutterActivityAndFragmentDelegate.java:66)
  at io.flutter.embedding.android.FlutterFragment.onAttach (FlutterFragment.java:66)
  at androidx.fragment.app.Fragment.performAttach (Fragment.java:48)
  at androidx.fragment.app.FragmentStateManager.attach (FragmentStateManager.java:153)
  at androidx.fragment.app.FragmentStateManager.moveToExpectedState (FragmentStateManager.java:189)
  at androidx.fragment.app.FragmentStore.moveToExpectedState (FragmentStore.java:58)
  at androidx.fragment.app.FragmentManager.moveToState (FragmentManager.java:58)
  at androidx.fragment.app.FragmentManager.dispatchStateChange (FragmentManager.java:34)
  at androidx.fragment.app.FragmentManager.dispatchCreate (FragmentManager.java:27)
  at androidx.fragment.app.FragmentController.dispatchCreate (FragmentController.java:27)
  at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:27)
  at com.gigya.android.sdk.nss.NssActivity.onCreate (NssActivity.kt:1)
  at android.app.Activity.performCreate (Activity.java:8074)
  at android.app.Activity.performCreate (Activity.java:8054)
  at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1341)
  at androidx.test.runner.MonitoringInstrumentation.callActivityOnCreate (MonitoringInstrumentation.java:2)
  at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3688)