Closed BenMcLean closed 4 years ago
I literally just got an Oculus Quest, so I might look into it. Also CC @m4gr3d.
Chances are that the bug is not specific to the Oculus plugin, but more a rough edge of the brand new support for Mono on Android.
OK, really appreciate any help
I could confirm that the issue is not specific to the Oculus plugin, but to any project using both Mono and GDNative. I have yet to check if GDNative is even part of the equation or if it's just any Mono project that crashes on Android right now (but those used to work in my tests).
Here's a GDNative-using project with no C# code, from the GDNative C docs: c_example.zip https://docs.godotengine.org/en/latest/tutorials/plugins/gdnative/gdnative-c-example.html
For the reference, I built the Android lib manually with:
$ $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang -std=c11 -fPIC -c -I../../godot_headers simple.c -o simple.os
$ $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang -shared simple.os -o ../bin/libsimple_aarch64.so
I confirmed that without Mono, the GDNative project works fine on Android.
Then if I export the same project using a Mono build for the same commit, I get the same issue as @BenMcLean:
10-23 12:23:44.560 6060 6098 E godot : **ERROR**: Mono: Core API hash mismatch.
10-23 12:23:44.560 6060 6098 E godot : At: modules/mono/mono_gd/gd_mono.cpp:436:_initialize_and_check_api_hashes() - Mono: Core API hash mismatch.
10-23 12:23:44.560 6060 6098 W otengine.nonam: Accessing hidden method Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; (light greylist, JNI)
10-23 12:23:44.560 6060 6098 W otengine.nonam: Accessing hidden method Landroid/app/ActivityThread;->getApplication()Landroid/app/Application; (light greylist, JNI)
10-23 12:23:44.561 6060 6098 I godot : Mono: Logfile is: /data/data/org.godotengine.noname/files/mono/mono_logs/2019_10_23 12.23.44 (6060).txt
10-23 12:23:44.563 6060 6098 E godot : **ERROR**: Mono: FATAL ERROR, ABORTING! Logfile: '/data/data/org.godotengine.noname/files/mono/mono_logs/2019_10_23 12.23.44 (6060).txt'.
10-23 12:23:44.563 6060 6098 E godot : At: modules/mono/mono_gd/gd_mono_log.cpp:75:mono_log_callback() - Mono: FATAL ERROR, ABORTING! Logfile: '/data/data/org.godotengine.noname/files/mono/mono_logs/2019_10_23 12.23.44 (6060).txt'.
10-23 12:23:44.563 6060 6098 F libc : Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 6098 (GLThread 12488), pid 6060 (otengine.noname)
10-23 12:23:44.649 5660 5719 I SystemUpdate-DataParser: [InvalidPackageList] JSON : invalidSystemPackageList list is null
10-23 12:23:44.653 6111 6111 I crash_dump64: obtaining output fd from tombstoned, type: kDebuggerdTombstone
10-23 12:23:44.654 1110 1110 I /system/bin/tombstoned: received crash request for pid 6098
10-23 12:23:44.654 6111 6111 I crash_dump64: performing dump of process 6060 (target tid = 6098)
10-23 12:23:44.659 6111 6111 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
10-23 12:23:44.659 6111 6111 F DEBUG : Build fingerprint: 'Xiaomi/beryllium/beryllium:9/PKQ1.180729.001/V10.3.8.0.PEJMIXM:user/release-keys'
10-23 12:23:44.659 6111 6111 F DEBUG : Revision: '0'
10-23 12:23:44.659 6111 6111 F DEBUG : ABI: 'arm64'
10-23 12:23:44.659 6111 6111 F DEBUG : pid: 6060, tid: 6098, name: GLThread 12488 >>> org.godotengine.noname <<<
10-23 12:23:44.659 6111 6111 F DEBUG : signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
10-23 12:23:44.659 6111 6111 F DEBUG : x0 0000000000000000 x1 00000000000017d2 x2 0000000000000006 x3 0000000000000008
10-23 12:23:44.659 6111 6111 F DEBUG : x4 0000000000800000 x5 0000000000800000 x6 0000000000800000 x7 0000800000000000
10-23 12:23:44.659 6111 6111 F DEBUG : x8 0000000000000083 x9 ee32e19c88968189 x10 0000000000000000 x11 fffffffc7ffffbdf
10-23 12:23:44.659 6111 6111 F DEBUG : x12 0000000000000001 x13 0000000000000010 x14 ffffffffffffffff x15 0000d8b6ec29479a
10-23 12:23:44.659 6111 6111 F DEBUG : x16 00000072ac6b12c8 x17 00000072ac5ef544 x18 0000000000000001 x19 00000000000017ac
10-23 12:23:44.659 6111 6111 F DEBUG : x20 00000000000017d2 x21 000000720e056588 x22 000000720966b5e0 x23 0000000000000000
10-23 12:23:44.659 6111 6111 F DEBUG : x24 0000000000000000 x25 0000000000000000 x26 0000007219dfe4a0 x27 0000000000000000
10-23 12:23:44.659 6111 6111 F DEBUG : x28 000000720e053cb0 x29 000000720e0533c0
10-23 12:23:44.659 6111 6111 F DEBUG : sp 000000720e053380 lr 00000072ac5e3f0c pc 00000072ac5e3f34
10-23 12:23:44.660 6111 6111 F DEBUG :
10-23 12:23:44.660 6111 6111 F DEBUG : backtrace:
10-23 12:23:44.660 6111 6111 F DEBUG : #00 pc 0000000000021f34 /system/lib64/libc.so (abort+116)
10-23 12:23:44.660 6111 6111 F DEBUG : #01 pc 0000000000213848 /data/app/org.godotengine.noname--UQcPEdtlSuhLFPnO9Tcjg==/lib/arm64/libgodot_android.so
10-23 12:23:44.660 6111 6111 F DEBUG : #02 pc 0000000000296990 /data/app/org.godotengine.noname--UQcPEdtlSuhLFPnO9Tcjg==/lib/arm64/libmonosgen-2.0.so
The referenced log file contains:
$ cat 2019_10_23\ 12.23.44\ \(6060\).txt
/home/akien/Projects/godot/mono/src/mono/mono/eglib/ghashtable.c:326: assertion 'hash != NULL' failed (in domain , critical)
Thread 0x720e0564f0 may have been prematurely finalized (in domain , warning)
* Assertion at /home/akien/Projects/godot/mono/src/mono/mono/utils/mono-threads.c:634, condition `info' not met
(in domain , error)
Edit: To clarify, the above happens even though no C# code is used and no C# solution has been created. The same crash still happens even if a C# solution is generated (and I made sure to clean/refresh the res://.mono
folder).
I could confirm that the issue is not specific to the Oculus plugin, but to any project using both Mono and GDNative. I have yet to check if GDNative is even part of the equation or if it's just any Mono project that crashes on Android right now (but those used to work in my tests).
Well now I checked, and even a basic project without GDNative crashes on Android when using the Mono export, so it seems outright broken (on 8c3a5057)... So this might no be GDNative-related either, just a regression on Mono/Android.
Above test project stripped of GDNative code: c_example_test.zip
I seem to get things working if I build a solution and add a C# script to a node (even without any custom code), and compile it.
It seems like Mono on Android can't handle exports that don't actually use C#.
@BenMcLean Did you have any C# code in your test export?
@BenMcLean I tried the Oculus mobile demo with a proper C# script added to the Table node, and it worked just fine.
I tried the Oculus mobile demo with a proper C# script added to the Table node, and it worked just fine.
I thought I had tried that and got the same crash, but I can try it again!
Now I can't even build at all due to this happening.
The issue you referenced is a bug in user script (unhandled exception).
Oops, I linked the wrong issue. That isn't what happened. Will try it again this weekend. Sorry about that, please ignore.
akien-mga, would you be open to trying a screen share for a few minutes where I can show exactly what I'm doing and you can spot if I'm going wrong?
It's for a free, open source and non-commercial Quest game (Wolfenstein 3-D for the Quest!)
OK here's what actually happens when I try to build the demo with only one template C# script added to the table:
Godot Engine v3.2.alpha2.mono.official - https://godotengine.org
OpenGL ES 2.0 Renderer: GeForce GTX 1070/PCIe/SSE2
**ERROR**: No library set for this platform
At: modules/gdnative/gdnative.cpp:290:initialize() - No library set for this platform
Mono: Logfile is: C:\Users\mclea\AppData\Roaming/Godot/mono/mono_logs/2019_10_25 21.45.39 (15808).txt
**ERROR**: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480:init_library() - Condition ' lib_path.length() == 0 ' is true.
**ERROR**: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480:init_library() - Condition ' lib_path.length() == 0 ' is true.
**ERROR**: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480:init_library() - Condition ' lib_path.length() == 0 ' is true.
Adding permission android.permission.INTERNET
ADDING: AndroidManifest.xml
ADDING: classes.dex
ADDING: lib/arm64-v8a/libMonoPosixHelper.so
ADDING: lib/arm64-v8a/libMonoSupportW.so
ADDING: lib/arm64-v8a/libc++_shared.so
ADDING: lib/arm64-v8a/libgodot_android.so
ADDING: lib/arm64-v8a/libmono-btls-shared.so
ADDING: lib/arm64-v8a/libmono-ee-interp.so
ADDING: lib/arm64-v8a/libmono-profiler-aot.so
ADDING: lib/arm64-v8a/libmono-profiler-coverage.so
ADDING: lib/arm64-v8a/libmono-profiler-log.so
ADDING: lib/arm64-v8a/libmonosgen-2.0.so
ADDING: res/drawable-hdpi-v4/notification_bg_low_normal.9.png
ADDING: res/drawable-hdpi-v4/notification_bg_low_pressed.9.png
ADDING: res/drawable-hdpi-v4/notification_bg_normal.9.png
ADDING: res/drawable-hdpi-v4/notification_bg_normal_pressed.9.png
ADDING: res/drawable-hdpi-v4/notify_panel_notification_icon_bg.png
ADDING: res/drawable-mdpi-v4/notification_bg_low_normal.9.png
ADDING: res/drawable-mdpi-v4/notification_bg_low_pressed.9.png
ADDING: res/drawable-mdpi-v4/notification_bg_normal.9.png
ADDING: res/drawable-mdpi-v4/notification_bg_normal_pressed.9.png
ADDING: res/drawable-mdpi-v4/notify_panel_notification_icon_bg.png
ADDING: res/drawable-nodpi-v4/icon.png
ADDING: res/drawable-v21/notification_action_background.xml
ADDING: res/drawable-xhdpi-v4/notification_bg_low_normal.9.png
ADDING: res/drawable-xhdpi-v4/notification_bg_low_pressed.9.png
ADDING: res/drawable-xhdpi-v4/notification_bg_normal.9.png
ADDING: res/drawable-xhdpi-v4/notification_bg_normal_pressed.9.png
ADDING: res/drawable-xhdpi-v4/notify_panel_notification_icon_bg.png
ADDING: res/drawable-xxhdpi-v4/notify_panel_notification_icon_bg.png
ADDING: res/drawable/notification_bg.xml
ADDING: res/drawable/notification_bg_low.xml
ADDING: res/drawable/notification_icon_background.xml
ADDING: res/drawable/notification_tile_bg.xml
ADDING: res/layout-v16/notification_template_custom_big.xml
ADDING: res/layout-v21/notification_action.xml
ADDING: res/layout-v21/notification_action_tombstone.xml
ADDING: res/layout-v21/notification_template_custom_big.xml
ADDING: res/layout-v21/notification_template_icon_group.xml
ADDING: res/layout/downloading_expansion.xml
ADDING: res/layout/notification_action.xml
ADDING: res/layout/notification_action_tombstone.xml
ADDING: res/layout/notification_template_icon_group.xml
ADDING: res/layout/notification_template_part_chronometer.xml
ADDING: res/layout/notification_template_part_time.xml
ADDING: res/layout/status_bar_ongoing_event_progress_bar.xml
Unicode error: invalid skip
Unicode error: invalid skip
Unicode error: invalid skip
Unicode error: invalid skip
Unicode error: invalid skip
Unicode error: no space left
ADDING: resources.arsc
**ERROR**: Condition ' !loaded ' is true. returned: __null
At: modules/mono/mono_gd/gd_mono_assembly.cpp:380:get_class() - Condition ' !loaded ' is true. returned: __null
**ERROR**: Mono Cache: Member GDMonoUtils::mono_cache.class_Vector2 is null.
At: modules/mono/mono_gd/gd_mono_utils.cpp:226:update_godot_api_cache() - Condition ' !GDMonoUtils::mono_cache.class_Vector2 ' is true.
**ERROR**: Condition ' !loaded ' is true. returned: __null
At: modules/mono/mono_gd/gd_mono_assembly.cpp:380:get_class() - Condition ' !loaded ' is true. returned: __null
**ERROR**: Mono Cache: Member GDMonoUtils::mono_cache.class_Vector2 is null.
At: modules/mono/mono_gd/gd_mono_utils.cpp:226:update_godot_api_cache() - Condition ' !GDMonoUtils::mono_cache.class_Vector2 ' is true.
**ERROR**: The loaded assembly 'GodotSharp' is in sync, but the cache update failed.
At: modules/mono/mono_gd/gd_mono.cpp:888:_load_api_assemblies() - The loaded assembly 'GodotSharp' is in sync, but the cache update failed.
**ERROR**: FATAL: Method/Function Failed.
At: modules/mono/mono_gd/gd_mono.cpp:897:_load_api_assemblies() - FATAL: Method/Function Failed.
The editor abruptly closes partway through the build.
@BenMcLean Can you share the project files?
Can you share the project files?
I could, but all I did was to get this crash was clone godot_oculus_mobile, build with this script, open the demo project in Godot Mono 3.2 Alpha 2, right click on the table, add a script called Table.cs (did not edit the script at all, just left the default template alone) and clicked the Android button with my Oculus Quest plugged into my Windows 10 PC.
I even deleted everything and re-cloned just to make sure it wasn't anything I'd screwed up about the project.
open the demo project in Godot Mono 3.2 Alpha 2, right click on the table, add a script called Table.cs (did not edit the script at all, just left the default template alone) and clicked the Android button with my Oculus Quest plugged into my Windows 10 PC.
Then you probably missed the step of actually compiling the C# code before exporting, which would happen by pressing "Build" or trying to run the project.
Then you probably missed the step of actually compiling the C# code before exporting, which would happen by pressing "Build" or trying to run the project.
Oh, OK. I thought the Android button would entail building, but I switched over to Visual Studio and hit build over there first.
When I try to run in desktop mode, I get this:
Godot Engine v3.2.alpha2.mono.official - https://godotengine.org
OpenGL ES 3.0 Renderer: GeForce GTX 1070/PCIe/SSE2
Mono: Logfile is: C:\Users\mclea\AppData\Roaming/Godot/mono/mono_logs/2019_10_26 11.15.56 (11420).txt
Editing project: C:/GodotVR/godot_oculus_mobile/demo (C:::GodotVR::godot_oculus_mobile::demo)
Godot Engine v3.2.alpha2.mono.official - https://godotengine.org
OpenGL ES 2.0 Renderer: GeForce GTX 1070/PCIe/SSE2
ERROR: initialize: No library set for this platform
At: modules/gdnative/gdnative.cpp:290
Mono: Logfile is: C:\Users\mclea\AppData\Roaming/Godot/mono/mono_logs/2019_10_26 11.15.59 (2988).txt
erasing C:\Users\mclea\AppData\Roaming/Godot/projects/demo-5295a99fbb89bb2ee727e37f6f084f6b/filesystem_update4
ERROR: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480
ERROR: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480
ERROR: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480
* daemon not running; starting now at tcp:5037
Running: C:\GodotVR\Godot_v3.2-alpha2_mono_win64\Godot_v3.2-alpha2_mono_win64.exe --path C:/GodotVR/godot_oculus_mobile/demo --remote-debug 127.0.0.1:6007 --allow_focus_steal_pid 2988 --position 560,290
Godot Engine v3.2.alpha2.mono.official - https://godotengine.org
ERROR: get_class: Condition ' !loaded ' is true. returned: __null
At: modules/mono/mono_gd/gd_mono_assembly.cpp:380
ERROR: Mono Cache: Member GDMonoUtils::mono_cache.class_Vector2 is null.
At: modules/mono/mono_gd/gd_mono_utils.cpp:226
OpenGL ES 2.0 Renderer: GeForce GTX 1070/PCIe/SSE2
ERROR: initialize: No library set for this platform
At: modules/gdnative/gdnative.cpp:290
Mono: Logfile is: C:\Users\mclea\AppData\Roaming/Godot/mono/mono_logs/2019_10_26 11.16.04 (19616).txt
ERROR: get_class: Condition ' !loaded ' is true. returned: __null
At: modules/mono/mono_gd/gd_mono_assembly.cpp:380
ERROR: Mono Cache: Member GDMonoUtils::mono_cache.class_Vector2 is null.
At: modules/mono/mono_gd/gd_mono_utils.cpp:226
ERROR: _load_api_assemblies: The loaded assembly 'GodotSharp' is in sync, but the cache update failed.
At: modules/mono/mono_gd/gd_mono.cpp:888
ERROR: _load_api_assemblies: FATAL: Method/Function Failed.
At: modules/mono/mono_gd/gd_mono.cpp:897
=================================================================
Native Crash Reporting
=================================================================
Got a SIGILL while executing native code. This usually indicates
a fatal error in the mono runtime or one of the native libraries
used by your application.
=================================================================
=================================================================
Managed Stacktrace:
=================================================================
=================================================================
* daemon started successfully
ERROR: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480
ERROR: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480
ERROR: _get_socket_error: Socket error: 10054
At: drivers/unix/net_socket_posix.cpp:198
The editor abruptly closes in that case, but the log window stays open so I can copy that text.
And when I try to build for Android, the editor abruptly quits leaving adb.exe running. I have to force close adb.exe in Task Manager to be able to look at the log.txt and it says:
Godot Engine v3.2.alpha2.official - https://godotengine.org
OpenGL ES 2.0 Renderer: GeForce GTX 1070/PCIe/SSE2
**ERROR**: No library set for this platform
At: modules/gdnative/gdnative.cpp:290:initialize() - No library set for this platform
**ERROR**: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480:init_library() - Condition ' lib_path.length() == 0 ' is true.
**ERROR**: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480:init_library() - Condition ' lib_path.length() == 0 ' is true.
**ERROR**: does not have a library for the current platform.
At: modules/gdnative/nativescript/nativescript.cpp:1480:init_library() - Condition ' lib_path.length() == 0 ' is true.
**ERROR**: Socket error: 10054
At: drivers/unix/net_socket_posix.cpp:198:_get_socket_error() - Socket error: 10054
**ERROR**: Condition ' !process_map->has(p_pid) ' is true. returned: FAILED
At: platform/windows/os_windows.cpp:2635:kill() - Condition ' !process_map->has(p_pid) ' is true. returned: FAILED
Godot 3.2 Mono Alpha 3 fixes this problem.
I think I am still getting this on Beta 2. The error shows no matter what, but if I have no C# script it crashes the entire engine. Can someone confirm this? Using a Google Pixel 3a on Android 10
11-24 13:19:11.896 7796 7842 I godot : Godot Engine v3.2.beta2.mono.official - https://godotengine.org
11-24 13:19:11.903 7796 7842 I godot : OpenGL ES 3.0 Renderer: Adreno (TM) 615
11-24 13:19:11.920 7796 7842 I godot :
11-24 13:19:12.104 7796 7842 E godot : **ERROR**: Mono: Core API hash mismatch.
11-24 13:19:12.104 7796 7842 E godot : At: modules/mono/mono_gd/gd_mono.cpp:482:_initialize_and_check_api_hashes() - Mono: Core API hash mismatch.
11-24 13:19:12.106 7796 7842 I godot : Mono: Logfile is: /data/data/org.godotengine.test/files/mono/mono_logs/2019_11_24 13.19.12 (7796).txt
Yes, this doesn't seem to be fixed yet.
I seem to be getting the same error on Ubuntu 16.04 after running the export command for HTML5 and Linux
Godot Version 3.2.2-stable (regular and headless) (linux)
OS Version Ubuntu 16.04
Steps To Reproduce:
Download the and install WebRTC Signaling Example I modified the code in demo/main.gd with the following:
# if HTML5 dont show server stuff, if TEST environment detected, auto run the server.
if OS.get_name() == "HTML5":
$VBoxContainer/Signaling.hide()
elif(OS.get_environment("ENV") == "TEST"):
print("running server")
$VBoxContainer/Signaling.hide();
$Server.listen(int($VBoxContainer/Signaling/Port.value))
Add ENV=TEST to envrionment variables
Download WebRTC zip file and extract into godot.project root folder
Download and install export templates into ~/.godot/share/templates/3.2.2-stable
Setup export_presets.cfg to defaults
Run the following command in Ubuntu 16.04
godot --path ./src/ --export 'Linux/X11' ./.dist/server/server_x11.64 --quit
The following message appears.
Godot Engine v3.2.2.stable.official - https://godotengine.org
ERROR: initialize: No library set for this platform
At: modules/gdnative/gdnative.cpp:290.
savepack: begin: Packing steps: 102
savepack: step 2: Storing File: res://client/multiplayer_client.gdc
savepack: step 12: Storing File: res://client/ws_webrtc_client.gdc
savepack: step 22: Storing File: res://demo/client_ui.gdc
savepack: step 32: Storing File: res://demo/client_ui.tscn
savepack: step 42: Storing File: res://demo/main.gdc
savepack: step 52: Storing File: res://demo/main.tscn
savepack: step 62: Storing File: res://game/Game.gdc
savepack: step 72: Storing File: res://game/Game.tscn
savepack: step 82: Storing File: res://server/ws_webrtc_server.gdc
savepack: step 92: Storing File: res://webrtc/webrtc.tres
savepack: step 102: Storing File: res://client/multiplayer_client.gd.remap
savepack: step 102: Storing File: res://client/ws_webrtc_client.gd.remap
savepack: step 102: Storing File: res://demo/client_ui.gd.remap
savepack: step 102: Storing File: res://demo/main.gd.remap
savepack: step 102: Storing File: res://game/Game.gd.remap
savepack: step 102: Storing File: res://server/ws_webrtc_server.gd.remap
savepack: step 102: Storing File: res://project.binary
savepack: end
Also happens with HTML5 export.
I added it here because the error is in the same line of code, but let me know if it needs a new issue to be opened.
Thank you in advance for any help.
Godot version: Godot 3.2 Mono Alpha 2
OS/device including version: Building for Oculus Quest, using Windows 10.
Issue description: In Godot 3.2 Alpha 2, I can:
In Godot 3.2 Mono Alpha 2, I can:
However, when I use the Oculus Quest to run the Oculus Mobile Plugin demo that was built on the Mono version, it crashes on launch.
Here's the crash log:
and here's the Godot log:
I had originally reported this issue here.
Steps to reproduce: Build the Godot Oculus Mobile demo app in Godot Mono, then try to run it on the Oculus Quest.
Minimal reproduction project: The demo that comes with the Godot Oculus Mobile plugin.
I decided the other day to switch to Unity but I might cancel that decision if everything just worked. However, I seem to be literally the only developer in the entire world who is interested in getting C# on the Oculus Quest with Godot, and I think I'd be doing better switching to something (anything) that more people are using. Thought it'd still be good to report this.