Unity Android app crashes after splash screen with Google Play Services for AR update (after April 11th 2020)

Viewed 2075

I'm working collaboratively on an Android app that uses AR Foundation. From one day to another (without making new builds) the app started to crash after the splash screen, every time. I'm working on my Huawei Mate 20 Pro, but my teammates use other Android phones (Samsung, Xiaomi and Motorola) and they continued to develop the app, and it works just fine for them. I pull their commits (which work for them), make no changes, and it keeps crashing on my phone. We are using Firebase so I have the info from Crashlytics, but I can't quiet understand it:enter image description here

Unity version is 2019.4.8f1 LTS, and the Huawei phone runs on Android 10.

The complete crash log is:

Caused by java.lang.Error
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
Version '2019.4.8f1 (60781d942082)', Build type 'Release', Scripting Backend 'mono', CPU 'armeabi-v7a' 
Build fingerprint: 'HUAWEI/LYA-L29/HWLYA:10:user/release-keys' Revision: '0' ABI: 'arm' 
Timestamp: 2020-08-13 14:12:37-0300 pid: 3571, tid: 3777, 
name: UnityMain >>> com.app.name <<< 
uid: 10315 signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0 
Cause: null pointer dereference r0 00000000 r1 00000000 r2 00000000 r3 00000000 r4 a965d490 r5 bd74a87c r6 80808080 r7 00000000 r8 be98f540 r9 00000000 r10 00000000 r11 b2f15f60 ip b2f4cc90 sp bd74a878 lr b2f1e859 pc 00000000 
managed backtrace: #00 (wrapper managed-to-native) 
UnityEngine.XR.ARCore.ARCoreSessionSubsystem/NativeApi:UnityARCore_session_update (UnityEngine.ScreenOrientation,UnityEngine.Vector2Int,intptr,UnityEngine.XR.ARSubsystems.Feature) #01 
UnityEngine.XR.ARCore.ARCoreSessionSubsystem/ARCoreProvider:Update (UnityEngine.XR.ARSubsystems.XRSessionUpdateParams,UnityEngine.XR.ARSubsystems.Configuration) <0xef> #02 
UnityEngine.XR.ARSubsystems.XRSessionSubsystem:Update (UnityEngine.XR.ARSubsystems.XRSessionUpdateParams) <0x1d3> #03 
UnityEngine.XR.ARFoundation.ARSession:Update () <0x157> #04 
(wrapper runtime-invoke) object:runtime_invoke_void__this__ (object,intptr,intptr,intptr)

UPDATE

I've managed to narrow down the crash to the following lines of code, inside the Update of ARSession script:

        void Update()
        {
            if (subsystem?.running == true)
            {
                m_TrackingMode = subsystem.requestedTrackingMode.ToTrackingMode();
                if (subsystem.matchFrameRateEnabled)
                {
                    Application.targetFrameRate = subsystem.frameRate;
                    QualitySettings.vSyncCount = 0;
                }
                
                //subsystem.Update(new XRSessionUpdateParams
                //{
                //    screenOrientation = Screen.orientation,
                //    screenDimensions = new Vector2Int(Screen.width, Screen.height)
                //});

                switch (subsystem.trackingState)
                {
                    case TrackingState.None:
                    case TrackingState.Limited:
                        state = ARSessionState.SessionInitializing;
                        break;
                    case TrackingState.Tracking:
                        state = ARSessionState.SessionTracking;
                        break;
                }
            }
        }

With those commented lines, the app starts but the camera won't work. If I uncomment them, it crashes. I know the problem is there because I placed a:

UnityEngine.Handheld.Vibrate();

Before and after, and the phone only vibrates once.

1 Answers

I updated the question's title because the problem is caused by an issue in the update of Google Play Services for AR. I managed to make my app work by manually downloading an older version of Google Play Services for AR, following the instructions here. You can track the issue I opened in the ARCore Unity SDK repo here

Related