Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

arm64 libgodot_android.so crash Android 10 #38053

Closed
JezSonic opened this issue Apr 20, 2020 · 42 comments
Closed

arm64 libgodot_android.so crash Android 10 #38053

JezSonic opened this issue Apr 20, 2020 · 42 comments

Comments

@JezSonic
Copy link

JezSonic commented Apr 20, 2020

3.2.1.stable

ANDROID 10/Google Pixel 3 XL:

Issue description:
Google Play Console found my game crash on Android 10/Google Pixel 3 Xl. Here is the backtrace.
I don't know what is the source of that issue cause it didn't happen on any of my devices. Anyway i am creating an issue here.

Google Pixel 3 XL (crosshatch), 3584MB RAM, Android 10
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> com.karolstudios.pixelz <<<

backtrace:
  #00  pc 0000000001087904  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #01  pc 00000000006cfdec  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #02  pc 000000000101eb1c  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #03  pc 000000000109dc94  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #04  pc 0000000000307840  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #05  pc 00000000002e64f8  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #06  pc 00000000006bd6dc  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #07  pc 000000000101d040  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #08  pc 00000000006be924  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #09  pc 00000000006c2790  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #10  pc 00000000006b384c  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #11  pc 000000000101eb1c  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #12  pc 0000000001018014  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #13  pc 0000000001018260  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #14  pc 00000000006db35c  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #15  pc 000000000017bc60  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so
  #16  pc 00000000001536d8  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/lib/arm64/libgodot_android.so (Java_org_godotengine_godot_GodotLib_step+164)
  #17  pc 00000000000101b0  /data/app/com.karolstudios.pixelz-oAB0kwpMxkRmsYnb5k0XKw==/oat/arm64/base.odex (art_jni_trampoline+144)
  #18  pc 0000000002004344  /memfd:/jit-cache (org.godotengine.godot.GodotRenderer.onDrawFrame+84)
  #19  pc 00000000020107a8  /memfd:/jit-cache (android.opengl.GLSurfaceView$GLThread.guardedRun+3976)
  #20  pc 000000000013663c  /apex/com.android.runtime/lib64/libart.so (art_quick_osr_stub+60)
  #21  pc 0000000000333acc  /apex/com.android.runtime/lib64/libart.so (art::jit::Jit::MaybeDoOnStackReplacement(art::Thread*, art::ArtMethod*, unsigned int, int, art::JValue*)+1660)
  #22  pc 00000000005a30f0  /apex/com.android.runtime/lib64/libart.so (MterpMaybeDoOnStackReplacement+212)
  #23  pc 0000000000135350  /apex/com.android.runtime/lib64/libart.so (MterpHelpers+240)
  #24  pc 00000000002d2e3e  /system/framework/framework.jar (android.opengl.GLSurfaceView$GLThread.guardedRun+682)
  #25  pc 000000000059a8a4  /apex/com.android.runtime/lib64/libart.so (MterpInvokeDirect+1168)
  #26  pc 0000000000130914  /apex/com.android.runtime/lib64/libart.so (mterp_op_invoke_direct+20)
  #27  pc 00000000002d35cc  /system/framework/framework.jar (android.opengl.GLSurfaceView$GLThread.run+48)
  #28  pc 00000000002b03a8  /apex/com.android.runtime/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool) (.llvm.15430740532710954497)+240)
  #29  pc 000000000058980c  /apex/com.android.runtime/lib64/libart.so (artQuickToInterpreterBridge+1012)
  #30  pc 000000000013f468  /apex/com.android.runtime/lib64/libart.so (art_quick_to_interpreter_bridge+88)
  #31  pc 0000000000136334  /apex/com.android.runtime/lib64/libart.so (art_quick_invoke_stub+548)
  #32  pc 000000000014506c  /apex/com.android.runtime/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+244)
  #33  pc 00000000004a9b0c  /apex/com.android.runtime/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104)
  #34  pc 00000000004aaba0  /apex/com.android.runtime/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue const*)+416)
  #35  pc 00000000004ea93c  /apex/com.android.runtime/lib64/libart.so (art::Thread::CreateCallback(void*)+1176)
  #36  pc 00000000000e1100  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+36)
  #37  pc 0000000000083ab0  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)
@Calinou
Copy link
Member

Calinou commented Apr 20, 2020

I'm afraid a backtrace without debugging symbols isn't of much use, especially if the user who got the crash isn't around to reply to our questions.

@mrimvo
Copy link

mrimvo commented Apr 22, 2020

I get quite a lot of remote crash reports (Crashlyics) from my android game, that look exactly like this (crash in libgodot_android.so), and to a lesser extend crashes in other .so binaries too. Please, how can I attach debug symbols to these reports? I would like to help you guys fix these problems.

In the crashlytics docu they say I need to execute
./gradlew crashlyticsUploadSymbolsRelease
but in a godot project I have no idea where/how to execute that?
Please, could you guide us in a general direction?

This problem is rather urgend, because crashes like this produce 1-star ratings in google play for games that would have great ratings otherwise. Quite a big bummer!

Most crash reports I get look like this:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> com.mvolution.cuarentena1 <<<

backtrace:
  #00  pc 00000000006fe9bc  /data/app/com.mvolution.cuarentena1-xJ_EtKnP9LEu6rrNMiJllg==/lib/arm/libgodot_android.so
  #01  pc 000000000127327c  /data/app/com.mvolution.cuarentena1-xJ_EtKnP9LEu6rrNMiJllg==/lib/arm/libgodot_android.so
  #02  pc 0000000000076278  /data/app/com.mvolution.cuarentena1-xJ_EtKnP9LEu6rrNMiJllg==/lib/arm/libgodot_android.so
  #03  pc 0000000000009137  /data/app/com.mvolution.cuarentena1-xJ_EtKnP9LEu6rrNMiJllg==/oat/arm/base.odex (offset 0x9000)

Some other .so libraries report crashes too, but not as many.

My users complain about the app crashing on startup - others about a black screen, sound is starting but nothing more.

I have Crashlytics up and running and would like to upload debugging symbols to the Crashlytics backend to provide you guys with meaningful backtraces from various devices out there in the wild. I'm kind of lost on how to do that. Any ideas?

@Calinou
Copy link
Member

Calinou commented Apr 22, 2020

cc @m4gr3d

@jeremyz
Copy link
Contributor

jeremyz commented May 20, 2020

@mrimvo
you might have to recompile godot with modified ./platform/android/java/lib/build.gradle and ./platform/android/java/app/build.gradle ?
My game suffers the same, I want it to be fixed ASAP.
How did you setup crashlytics, is it just a matter of registering your project ?

@mrimvo
Copy link

mrimvo commented May 20, 2020

Yes, it's quite easy to set up, but as the crash reports are not meaningful, this is a bit useless. Recompiling might help I didn't try that. Another thing that just crossed my mind: maybe it's possible to add godot's logs (where all the push_error messages end up) to a crash report. Because I think some of these errors might be rooted id GDScript. The engine shouldn't crash, but at least we can do something about it if we had the logs.

Edit: I did a quick research and I think the idea to attach the godot logs might not be possible with Crashlytics:

the CrashlyticsListener doesn't support being called from when an NDK/JNI exception happens

Another option might by to use Crashlytics.log as soon as there are messages added to godot's terminal output. However i found no way how to get notified about terminal output in godot.

@akien-mga
Copy link
Member

akien-mga commented May 20, 2020

To have a full debug stacktrace when it crashes, you should build custom export templates with target=debug instead of target=release_debug (what "Debug" templates use by default).

They will be significantly bigger but will include full debug symbols so that the crash in libgodot_android.so can give us a detailed stacktrace.


Also to be sure, please verify that you're are building the export templates properly from the same commit and local modifications as the editor. If you're using the "Custom Build" option, you should also reinstall the custom compiled android_source.zip in place of your pre-existing res://android/build/ which might have been installed with the official 3.2.1-stable (which is thus not compatible with your custom changes).


Edit: I might have misinterpreted that you have custom changes made to the template. If you're using the stock Android template from the Godot 3.2.1 templates package, then you just need to rebuild a custom debug templates from the 3.2.1-stable git tag, with:

scons p=android tools=no target=debug android_arch=arm64v8
scons p=android tools=no target=debug android_arch=armv7
cd platform/android/java
./gradlew generateGodotTemplates

And use the generated bin/android_debug.apk as debug template here:
Screenshot_20200520_111758

And export with "Debug" on of course so that this debug template is used.

@akien-mga akien-mga added the bug label May 20, 2020
@akien-mga akien-mga added this to the 3.2 milestone May 20, 2020
@mrimvo
Copy link

mrimvo commented May 20, 2020

Thank you for your answer :)

I'm using a custom android build template. I'm happy to push a debug build into the beta channel of my app to help godot get some helpful stack traces.

I'm a bit confused about where to add target=debug to build a debug template from my custom template. Could you elaborate on that?

Just to be clear about my context:

  • Using Godot 3.2.1 stable
  • Used the menu: Project > Install Android Build Template
  • Changed that template to my needs (eg added Crashlytics)
  • Godot uses that template for my android exports

@akien-mga
Copy link
Member

See the last part of my previous comment, you'd need to build the Godot export template with debug symbols (see Compiling for Android).

Then it's a bit tricky as the new workflow with custom build templates doesn't allow to easily use one's own android_source.zip to set things up (until #36728 is fixed).

Since you're using 3.2.1-stable as is, the best might be that once you have built the export template using the above instructions with target=debug, you can copy bin/godot-lib.debug.aar in place of your installed res://android/build/libs/debug/godot-lib.debug.aar. I haven't tested but that should add the necessary debug symbols while still allowing you to use the template source installed from 3.2.1-stable.

@mrimvo
Copy link

mrimvo commented May 20, 2020

I tried to follow that path, but I'm sad to say I need to give up on that. The NDK Download is just too big for my limited data volume to handle.

@akien-mga
Copy link
Member

I'll make a debug build myself and upload it here, that should be much easier to test.

@akien-mga
Copy link
Member

Here's a target=debug build of 3.2.1-stable for Android (arm64v8 and armv7): https://send.firefox.com/download/ce4ac3341d7a2601/#XRIXZIyiWUh2oZkBpYSqAg (available for 7 days)

How to use it:

  • If you don't use "Custom Template/Use Custom Build", then select the android_debug.apk as "Custom Template/Debug" in your Android preset, and export a Debug build
  • If you use "Custom Template/Use Custom Build", either:
    • Delete res://android, put the downloaded android_source.zip in your Godot templates/3.2.1.stable folder, use "Install Android Build Template..." from the editor and redo your local changes, or
    • Keep your res://android, unzip android_source.zip somewhat and copy its android_source/libs/debug/godot-lib.debug.aar to res://android/build/libs/debug/ to replace the existing one. (Recommended as you don't need to mess with your installed Godot templates and redo your Android customization, but I'm only 95% confident that doing this is sufficient - should be good enough though :))

@mrimvo
Copy link

mrimvo commented May 21, 2020

This is awesome! I'm going to upload the debug version today! 👍

If you don't use "Custom Template/Use Custom Build", then select the android_debug.apk as "Custom Template/Debug" in your Android preset, and export a Debug build

This worked for me to build and run the game with your template apk.

If you use "Custom Template/Use Custom Build", either:

I tried both ways, and even did not re-apply my changes, so I had the pure version as Custom Template set. It produces errors while building a debug version of the game:

Auswahl_229

I then removed the references to these resources from the AndroidManifest.xml and got another error while building:

Auswahl_230

Also, I noticed the godot-lib.debug.aar is

  • the only notable change compared to what I had before in the android/ folder
  • it's size is only ~20MB while the original was about 40 MB

@jeremyz
Copy link
Contributor

jeremyz commented May 21, 2020

size is smaller because it contains arm64v8 and armv7, no x86 and x86_64.
@mrimvo maybe run ./gradlew clean from within ./android/build ?

@jeremyz
Copy link
Contributor

jeremyz commented May 21, 2020

I can build and run using custom_template/debug and the given android_debug.apk
or using custom_template/use_custom_build and replacing godot-lib.debug.aar with the one from the given android_source.zip

to enable crashlytics I edit build.graddle :
+ classpath 'com.google.gms:google-services:4.3.3'
+ classpath 'com.google.firebase:firebase-crashlytics-gradle:2.1.0'
+ apply plugin: 'com.google.firebase.crashlytics'
+ implementation 'com.google.firebase:firebase-crashlytics:17.0.0'

but I must comment out implementation libraries.supportCoreUtils
because of a Manifest merger failed between com.android.support:support-compat:28.0.0 from AndroidManifest.xml and androidx.core:core:1.0.0 androidx.core.app.CoreComponentFactory.
I'm not sure if this will work, it seams like.

How can I publish one of these debug apk, google's policy does not allow debuggable applications ?

@mrimvo
Copy link

mrimvo commented May 21, 2020

I just got notified by google that my app got suspended. Oh man that hurts. Their reasoning being it got covid-19 references. Well it does but I think their reaction is a bit harsh, provided it was nothing more than a cute little game.

So I'm out of this. About publishing the godot-lib.debug.aar I think it might be possible to mix and have the exported APK be a release version that uses the debug version of godot-lib. Another (better) possiblity would be to use godot-lib.release.aar and to upload the debug information to Crashlytics backend.

About enabling Crashlytics: yes, that's exactly the way I did it too, including to remove the support-compat. Also you need to download and add google-services.json from Crashlytics backend and add it to android/build/ directory.

@jeremyz
Copy link
Contributor

jeremyz commented May 21, 2020

Hoooo sorry, that's harsh !
I already tried to publish a release apk built with the android_debug.apk, it has be detected and refused. I'll complete crashlytics setup and upload the debug symbols to crashlytics.
Yes, I forgot to mention google-services.json ...

@jeremyz
Copy link
Contributor

jeremyz commented May 26, 2020

That was hard !
Crashlytics does not work for me ...
*.so libs are stripped in the apk, but I finally learned about ndk-stack tool.
give him a dir where unstripped libraries are and you're good.
So has I thought, problems comes from JSON serialisation ...

GDScript code is : fout.store_line(JSON.print(dict))

bt is :

godot-3.2.1-stable/core/object.cpp:941:33
godot-3.2.1-stable/core/variant.cpp:1592:28
godot-3.2.1-stable/core/variant.cpp:1408:9
godot-3.2.1-stable/core/io/json.cpp:117:33
godot-3.2.1-stable/core/io/json.cpp:111:10
godot-3.2.1-stable/core/io/json.cpp:111:10
godot-3.2.1-stable/core/io/json.cpp:111:10
godot-3.2.1-stable/core/io/json.cpp:123:9
godot-3.2.1-stable/core/bind/core_bind.cpp:3210:9
godot-3.2.1-stable/./core/method_bind.gen.inc:2505:17
godot-3.2.1-stable/core/object.cpp:921:17
`
full_bt

@akien-mga
Copy link
Member

akien-mga commented May 26, 2020

Here's the start of @jeremyz's backtrace in the 3.2.1-stable codebase:

https://github.com/godotengine/godot/blob/3.2.1-stable/core/object.cpp#L941

https://github.com/godotengine/godot/blob/3.2.1-stable/core/variant.cpp#L1592

https://github.com/godotengine/godot/blob/3.2.1-stable/core/variant.cpp#L1408

https://github.com/godotengine/godot/blob/3.2.1-stable/core/io/json.cpp#L117

https://github.com/godotengine/godot/blob/3.2.1-stable/core/io/json.cpp#L111

So it sounds like the dict you're serializing containers Objects with scripts (I assume Nodes?), but then trying to call to_string() from their script crashes (probably null pointer dereference?).

That sounds like it might be related to #38119 (CC @RandomShaper), which is fixed in 3.2.2 beta 2 and beta 3. Would you be able to test if 3.2.2 beta 3 fixes the issue for you?

@RandomShaper
Copy link
Member

Yes, sounds a lot like the object, along with its script, has been freed.

Since the dangling Variant fix doesn't apply to release builds, it won't help you unless you find what's wrong in your scripts.

Running in the editor with the debugger attached, you'll get those freed objects converted to the "[Deleted Object]" string.

As a quick measure to avoid the crash and maybe gain some time for finding the bug before you get more crash reports, you can use a release_debug export template. With it, you won't get a crash neither the "[Deleted Object]" string, but "[Object:null]".

@jeremyz
Copy link
Contributor

jeremyz commented May 26, 2020

I've noticed an object that should not be here in the dict that I'm serializing.
reading your comments I'm now almost sure that the crash happens when I save the turn state having just destroyed that object ... will look deeper into it in a few hours ...

@RandomShaper I haven't play with the debugger yet, cause it only crashed on android 10 so far ... will have a deeper look it this too.
@akien-mga I'll test 3.2.2 behaviour ... (can you please triage my 2 EventGesture OS agnostic PR, so that I know where it's going ;)

@mrimvo
Copy link

mrimvo commented May 27, 2020

Well done @jeremyz I'm glad you got the backtrace working. 🙂

Besides fixing the game itself, I would like to suggest that godot should not crash in these cases but instead pushes errors like push_error does.

@RandomShaper
Copy link
Member

There's a plan about having the option to have those checks in release builds too and even add further protections.

I haven't had time to write the proposal yet.

@jeremyz
Copy link
Contributor

jeremyz commented May 27, 2020

I've tested the current situation,
jasonify a dictionary with a dangling reference.

var d = {'stuff':'None'}
var a = Node2D.new()
d['dangling'] = a
print(JSON.print(d))
a.queue_free()
yield(get_tree().create_timer(1.0), "timeout")
print(JSON.print(d))

with 3.2.1-stable

  • release -> segfault
  • release_debug -> [Object:0] object.cpp:946
  • debugger -> [Deleted Object] variant.cpp 1588

with 3.2 HEAD(6abe73f)

  • release -> segfault
  • release_debug -> [Object:null] from variant.cpp:1608
  • debugger -> [Deleted Object] variant.cpp 1605

@akien-mga so, as stated in #38119's updated comment, crashes are not handled in release builds yet.

@akien-mga akien-mga modified the milestones: 3.2, 3.3 Mar 17, 2021
@avnerh1
Copy link

avnerh1 commented Jul 27, 2021

Here's a target=debug build of 3.2.1-stable for Android (arm64v8 and armv7): https://send.firefox.com/download/ce4ac3341d7a2601/#XRIXZIyiWUh2oZkBpYSqAg (available for 7 days)

How to use it:

  • If you don't use "Custom Template/Use Custom Build", then select the android_debug.apk as "Custom Template/Debug" in your Android preset, and export a Debug build

  • If you use "Custom Template/Use Custom Build", either:

    • Delete res://android, put the downloaded android_source.zip in your Godot templates/3.2.1.stable folder, use "Install Android Build Template..." from the editor and redo your local changes, or
    • Keep your res://android, unzip android_source.zip somewhat and copy its android_source/libs/debug/godot-lib.debug.aar to res://android/build/libs/debug/ to replace the existing one. (Recommended as you don't need to mess with your installed Godot templates and redo your Android customization, but I'm only 95% confident that doing this is sufficient - should be good enough though :))

@akien-mga Do you happen to also have a debug build for 3.3.2?

@akien-mga
Copy link
Member

Not readily available, but I'm not sure this old issue is still relevant today, and there's no reproduction project to check against recent versions.

If you reproduce a similar issue, I would suggest opening a new bug report with details on your specific situation, as it might differ from the original one in this issue.

@Calinou
Copy link
Member

Calinou commented Jul 27, 2021

I built a debug APK of Godot 3.3.2 (target=debug, armv7 + arm64v8, unstripped): https://0x0.st/-Wff.zip (link expires in late 2021)

I'm not sure if it worked correctly as the APK is only 26 MB though. I remember having to use a different Gradle command like generateDebugTemplates, but it doesn't exist on 3.3.2 at least (and not in master either, from a quick search).

@avnerh1
Copy link

avnerh1 commented Jul 27, 2021

Not readily available, but I'm not sure this old issue is still relevant today, and there's no reproduction project to check against recent versions.

If you reproduce a similar issue, I would suggest opening a new bug report with details on your specific situation, as it might differ from the original one in this issue.

I see. I need it for general debugging of crash logs in Play console, not for any one specific case.

@avnerh1
Copy link

avnerh1 commented Jul 27, 2021

I built a debug APK of Godot 3.3.2 (target=debug, armv7 + arm64v8, unstripped): https://0x0.st/-Wff.zip (link expires in late 2021)

I'm not sure if it worked correctly as the APK is only 26 MB though. I remember having to use a different Gradle command like generateDebugTemplates, but it doesn't exist on 3.3.2 at least (and not in master either, from a quick search).

Thanks, but unfortunately according to Android Studio those libs don't contain any debug symbols.

@avnerh1
Copy link

avnerh1 commented Jul 30, 2021

I managed to compile and create debug symbols for Godot 3.3.2. However, it doesn't seem like it helps a lot to understand the stack traces. Here's an example:

backtrace:
#00 pc 0000000000000000
#00 pc 000000000111b02c /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (void call_with_variant_args_dv<__UnexistingClass, Ref const&>(__UnexistingClass*, void (__UnexistingClass::)(Ref const&), Variant const**, int, Callable::CallError&, Vector const&)) (SourceCode: G:\godot_compile.\core/variant/binder_common.h:356)
#00 pc 000000000031dfb0 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (VP8LEncDspInit_body) (SourceCode: G:\godot_compile\thirdparty\libwebp\src\dsp/lossless_enc.c:1045)
#00 pc 000000000109b1a0 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (MethodBindT<Ref const&>::_gen_argument_type_info(int) const) (SourceCode: G:\godot_compile.\core/object/method_bind.h:269)
#00 pc 000000000111b02c /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (void call_with_variant_args_dv<__UnexistingClass, Ref const&>(__UnexistingClass
, void (__UnexistingClass::)(Ref const&), Variant const**, int, Callable::CallError&, Vector const&)) (SourceCode: G:\godot_compile.\core/variant/binder_common.h:356)
#00 pc 000000000031dfb0 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (VP8LEncDspInit_body) (SourceCode: G:\godot_compile\thirdparty\libwebp\src\dsp/lossless_enc.c:1045)
#00 pc 0000000000322848 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (VP8LRefsCursorNext) (SourceCode: G:\godot_compile\thirdparty\libwebp\src\enc/backward_references_enc.h:206)
#00 pc 000000000032256c /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (VP8LColorCacheGetIndex) (SourceCode: G:\godot_compile\thirdparty\libwebp\src/utils/color_cache_utils.h:61)
#00 pc 000000000109b248 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (MethodBindT<Ref const&>::call(Object
, Variant const**, int, Callable::CallError&)) (SourceCode: G:\godot_compile.\core/object/method_bind.h:283)
#00 pc 000000000109c9f4 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (MethodBind* create_method_bind<BaseButton, Node*>(Node* (BaseButton::)() const)) (SourceCode: G:\godot_compile.\core/object/method_bind.h:572)
#00 pc 000000000109b7f0 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (void call_with_variant_args_dv<__UnexistingClass, Ref const&>(__UnexistingClass
, void (__UnexistingClass::*)(Ref const&), Variant const**, int, Callable::CallError&, Vector const&)) (SourceCode: G:\godot_compile.\core/variant/binder_common.h:348)
#00 pc 00000000006fef98 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (embree::sse2::BinInfoT<32ul, embree::sse2::BVHNBuilderTwoLevel<4, embree::TriangleMesh, embree::TriangleM<4> >::BuildRef, embree::BBoxembree::Vec3fa >::BinInfoT(embree::sse2::BinInfoT<32ul, embree::sse2::BVHNBuilderTwoLevel<4, embree::TriangleMesh, embree::TriangleM<4> >::BuildRef, embree::BBoxembree::Vec3fa > const&)) (SourceCode: G:\godot_compile\thirdparty\embree-aarch64\kernels\bvh/../common/../builders/heuristic_binning.h:177)
#00 pc 000000000018cc54 /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000)
#00 pc 000000000015ee3c /data/app/~~49cf-5Vx3hs0r27XUT-jjw==/run.escapelab.ahprods.sp-zjz3KddMeVjza_dFl-i2-g==/split_config.arm64_v8a.apk!lib/arm64-v8a/libgodot_android.so (offset 0xe0000) (Java_org_godotengine_godot_GodotLib_step+196)

If anyone is interested in getting the zipped debug symbols (213MB, arm CPUs only) - let me know and I'll upload it to the cloud.

@akien-mga
Copy link
Member

As I suggested above, this should go to a new bug report. It's definitely not the same issue as the one in #38053 (comment) since the Embree code in your stacktrace didn't exist in 3.2.1.

@avnerh1
Copy link

avnerh1 commented Jul 30, 2021

I agree. My comment above was a side note.

@Calinou
Copy link
Member

Calinou commented Jul 30, 2021

I managed to compile and create debug symbols for Godot 3.3.2.

Which steps did you follow to create an APK with debug symbols?

@avnerh1
Copy link

avnerh1 commented Aug 11, 2021

I managed to compile and create debug symbols for Godot 3.3.2.

Which steps did you follow to create an APK with debug symbols?

I followed the instructions here:
https://docs.godotengine.org/en/stable/development/compiling/compiling_for_android.html

up to the point of creating the .so files (before calling gradlew).
However, I suspect that this is not good enough and that the debug symbols that I created are not aligned with the actual .so libs provided by the official Godot release.

@akien-mga akien-mga modified the milestones: 3.3, 3.4 Oct 26, 2021
@akien-mga
Copy link
Member

This should be fixed in 3.4 by #51796. Please comment if you can still reproduce the same crash with 3.4 RC 1 or later.

@Miskler
Copy link

Miskler commented Apr 19, 2023

I use Godot 3.5.2.stable exported the project in release mode with the "custom build" parameter (that is, with the output of a large grandle log during export).

12% of my users have this error.

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 18472 >>> org.godotengine.khuter <<<

backtrace:
  #00  pc 0x0000000001821c24  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #01  pc 0x00000000007979c8  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #02  pc 0x00000000017911b0  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #03  pc 0x0000000001792e60  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #04  pc 0x00000000017918c8  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #05  pc 0x0000000000c3be2c  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #06  pc 0x0000000000c3d368  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #07  pc 0x000000000178f284  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #08  pc 0x0000000000c26b58  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #09  pc 0x0000000000c26fb0  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #10  pc 0x00000000005e7a50  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #11  pc 0x00000000005aa5a0  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so
  #12  pc 0x00000000005b74c8  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/split_config.arm64_v8a.apk!libgodot_android.so (Java_org_godotengine_godot_GodotLib_step+204)
  #13  pc 0x00000000000190b0  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/oat/arm64/base.odex (art_jni_trampoline+144)
  #14  pc 0x000000000003d0a0  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/oat/arm64/base.odex (org.godotengine.godot.GodotRenderer.onDrawFrame+96)
  #15  pc 0x000000000004daa0  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/oat/arm64/base.odex (org.godotengine.godot.gl.GLSurfaceView$GLThread.guardedRun+3760)
  #16  pc 0x000000000002c904  /data/app/~~gA_8Bxobrb8e5E-hkYNaKA==/org.godotengine.khuter-E4TA3It0XlJbc5QfBSb-sw==/oat/arm64/base.odex (org.godotengine.godot.gl.GLSurfaceView$GLThread.run+228)
  #17  pc 0x0000000000133564  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548)
  #18  pc 0x00000000001a97e8  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200)
  #19  pc 0x000000000055e35c  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460)
  #20  pc 0x00000000005ae18c  /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1308)
  #21  pc 0x00000000000db188  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+64)
  #22  pc 0x000000000007a9d0  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64)

As far as I understand, the users who received this error only see a black screen (this is my guess based on one comment). Unfortunately, angry users are not the people who can help in tracking and clarifying the problem :(

@mrimvo
Copy link

mrimvo commented Apr 19, 2023

Not to mention that 1% of angry users can easily ruin your rating in Playstore, so this bug is a real problem when using Godot for Android games.

@Miskler
Copy link

Miskler commented Apr 19, 2023

Note: as far as I understand, these errors occur due to warnings and errors that occur in the console at the development stage. BUT I still think this is a problem of the engine, since for some reason these errors crash the game only at the release stage and only 12% of users.

@Miskler
Copy link

Miskler commented Apr 19, 2023

Not to mention that 1% of angry users can easily ruin your rating in Playstore, so this bug is a real problem when using Godot for Android games.

Yesterday I had a rating of 5 points for the game, today when I logged into the console, 2 of the users had this error and they dropped the rating to 4.2 (yes, I don't have many reviews, but unfortunately these two comments were enough).

As for the percentage of evaluators. People are more likely to put angry reviews when they don't like something than good ones. The quality of these reviews is another matter :D People probably think that from their comment "shiт doesnt work" - the developer will immediately understand what the problem is.

@Miskler
Copy link

Miskler commented Apr 29, 2023

In the end, what did I come to:

The problem was in the GLES 3 shader. Although he can work out correctly in the editor, while referring to an error, this causes problems for some users in the exported project.

I also want to advise all Android developers on Godot to restrict access to the game to users who have less than 2 gigabytes of RAM. If this is not done, you will often complain about crashes during the game (the size of the project is not related to crashes at all, it looks like godot just does not have enough memory for its basic functions, which leads to emergency stops)

@suzanshakya
Copy link

@Miskler, thank you for sharing your observations and insights.
I don't think there's any way to restrict users based on RAM availability. Please let me know if there's any way.

@RandomShaper
Copy link
Member

In the Google Play dashboard you can filter out devices in the Device catalog section. One of the filters you can use to browse is the amount of RAM. It's not the most convenient experience, but doable at least.
image

@suzanshakya
Copy link

Thanks a lot @RandomShaper.
I was not aware of that powerful capability.
Also discovered Reach and Devices which provides more helpful insights.

Thanks again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

10 participants