juicycleff / flutter-unity-view-widget

Embeddable unity game engine view for Flutter. Advance demo here https://github.com/juicycleff/flutter-unity-arkit-demo
BSD 3-Clause "New" or "Revised" License
2.09k stars 504 forks source link

[Flutter 3.22] AR crashes on Android < 13 - NoClassDefFoundError: Landroid/window/OnBackInvokedCallback #957

Open timbotimbo opened 1 week ago

timbotimbo commented 1 week ago

Description

Since Flutter 3.22, Unity will crash on certain Android versions when ARFoundation is activated.
This only happens on Android <13. This might also affect other unity plugins using native code, I just noticed it using ARFoundation.

Unity works fine for 3D scenes but crashes when I switch to a scene that includes ARFoundation and its ARSession.

Error in the console: (unity 2022.3)

E/Unity   ( 7029): AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/OnBackInvokedCallback;
E/Unity   ( 7029): java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/OnBackInvokedCallback;
E/Unity   ( 7029):  at java.lang.reflect.Executable.getMethodReturnTypeInternal(Native Method)
E/Unity   ( 7029):  at java.lang.reflect.Method.getReturnType(Method.java:148)
E/Unity   ( 7029):  at java.lang.Class.getDeclaredMethods(Class.java:1880)
E/Unity   ( 7029):  at com.unity3d.player.ReflectionHelper.getMethodID(Unknown Source:26)
E/Unity   ( 7029):  at com.unity3d.player.UnityPlayer.nativeRender(Native Method)
E/Unity   ( 7029):  at com.unity3d.player.UnityPlayer.-$$Nest$mnativeRender(Unknown Source:0)
E/Unity   ( 7029):  at com.unity3d.player.UnityPlayer$F$a.handleMessage(Unknown Source:122)
E/Unity   ( 7029):  at android.os.Handler.dispatchMessage(Handler.java:102)
E/Unity   ( 7029):  at android.os.Looper.loop(Looper.java:214)
E/Unity   ( 7029):  at com.unity3d.player.UnityPlayer$F.run(Unknown Source:24)
E/Unity   ( 7029): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.OnBackInvokedCallback" on path: DexPathList[[zip file "

(unity 2023.2)

E/Unity   (17280): AndroidJavaException: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/OnBackInvokedCallback;
E/Unity   (17280): java.lang.NoClassDefFoundError: Failed resolution of: Landroid/window/OnBackInvokedCallback;
E/Unity   (17280):   at java.lang.reflect.Executable.getMethodReturnTypeInternal(Native Method)
E/Unity   (17280):   at java.lang.reflect.Method.getReturnType(Method.java:148)
E/Unity   (17280):   at java.lang.Class.getDeclaredMethods(Class.java:1880)
E/Unity   (17280):   at com.unity3d.player.ReflectionHelper.getMethodID(Unknown Source:26)
E/Unity   (17280):   at com.unity3d.player.UnityPlayerForActivityOrService.nativeRender(Native Method)
E/Unity   (17280):   at com.unity3d.player.S.handleMessage(Unknown Source:140)
E/Unity   (17280):   at android.os.Handler.dispatchMessage(Handler.java:102)
E/Unity   (17280):   at android.os.Looper.loop(Looper.java:214)
E/Unity   (17280):   at com.unity3d.player.V.run(Unknown Source:24)
E/Unity   (17280): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.window.OnBackInvokedCallback" on path: DexPathList[

More info

Looking up OnBackInvokedCallback, it is added in API 33 (android 13) and is related to the predictive back gesture in Android 14.

I narrowed it down to this commit on Flutter master, which includes the engine PR Platform channel for predictive back in route transitions on android. Any Flutter master commit before this one won't crash.

I can also reproduce this with the flutter_embed_unity plugin. So it isn't specific to code in this plugin.

Flutter version

Crashed on:

Did not crash on:

Unity version

Only tested with: 2022.3.21f1, 2022.3.33f1, 2023.2.20f1. ArFoundation 5.1.2, 5.1.4 and 5.1.5

Android devices

Devices without crash:

Devices with crash:

Some things I've tried

KailaashJeevan commented 1 week ago

Yup, got the same for Vuforia integration. The app successfully runs on android version 14, but not on anything else. It results on black screen.

image

CristovoXDGM commented 1 week ago

I`ve also experienced some crashes too, but related to memory leak after open unity AR interaction my app a go back to previous screen.