Сбой приложения Unity для Android после заставки с обновлением сервисов Google Play для AR (после 11 апреля 2020 года)

#android #firebase #unity3d #crash

#Android #firebase #unity3d #сбой

Вопрос:

Я совместно работаю над приложением для Android, которое использует AR Foundation. Изо дня в день (без создания новых сборок) приложение каждый раз начинало аварийно завершать работу после заставки. Я работаю над своим Huawei Mate 20 Pro, но мои товарищи по команде используют другие телефоны Android (Samsung, Xiaomi и Motorola), и они продолжали разрабатывать приложение, и оно у них отлично работает. Я извлекаю их коммиты (которые работают для них), не вношу никаких изменений, и он продолжает сбоить на моем телефоне. Мы используем Firebase, поэтому у меня есть информация от Crashlytics, но я не могу ее спокойно понять:введите описание изображения здесь

Версия Unity — 2019.4.8f1 LTS, а телефон Huawei работает на Android 10.

Полный журнал сбоев:

 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)
  

Обновить

Мне удалось сузить область сбоя до следующих строк кода внутри обновления скрипта ARSession:

         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;
                }
            }
        }
  

С этими прокомментированными строками приложение запускается, но камера не будет работать. Если я их раскомментирую, произойдет сбой. Я знаю, что проблема в этом, потому что я разместил:

 UnityEngine.Handheld.Vibrate();
  

До и после, и телефон вибрирует только один раз.

Ответ №1:

Я обновил заголовок вопроса, потому что проблема вызвана ошибкой в обновлении сервисов Google Play для AR. Мне удалось заставить мое приложение работать, вручную загрузив более старую версию сервисов Google Play для AR, следуя инструкциям здесь. Вы можете отследить проблему, которую я открыл в репозитории ARCore Unity SDK здесь