Testing Android build, crashing on many tester devices on startup - seemingly memory related?

Godot Version

Godot 4.3 Stable (Steam)

Question

Hi again, I posted here a couple weeks ago regarding an Android build of my game that I’m testing. For context, the game is a 2D point-and-click visual novel. I was having success testing on my personal Pixel 9 Pro as well as an old Pixel 6 I had spare, plus I had another tester succeed in running it on their Pixel 6. However, when I gave the game to other Android testers, the game would hang on the game’s default engine colour screen while starting, before crashing and failing to start.

Since then I’ve given the game to a few more testers, all of whom have also been unable to launch the game, and one of them actually has an Android Studio setup and was able to provide a logcat output (filtered to my game) to me, which I’m currently trying to make sense of. I can provide the rest of the filtered output if necessary, but from what I can tell, the last few lines before the process is killed is as follows:

04-16 15:56:07.385 6765 6765 W InteractionJankMonitor: Initializing without READ_DEVICE_CONFIG permission. enabled=false, interval=1, missedFrameThreshold=3, frameTimeThreshold=64, package=com.example.sleuthsagaunderstarlessskies

04-16 15:56:07.424 1553 17629 D CoreBackPreview: Window{4386396 u0 Splash Screen com.example.sleuthsagaunderstarlessskies EXITING}: Setting back callback null

04-16 15:56:22.252 1553 1658 W GameServiceProviderInstance: Failed to destroy session: GameSessionRecord{mTaskId=6604, mState=GAME_SESSION_ATTACHED, mRootComponentName=ComponentInfo{com.example.sleuthsagaunderstarlessskies/com.godot.game.GodotApp}, mIGameSession=android.service.games.IGameSession$Stub$Proxy@5fe5efc, mSurfacePackage={inputTransferToken=android.window.InputTransferToken@b2ad6824 remoteInterface=android.view.ISurfaceControlViewHost$Stub$Proxy@1276985}}

04-16 15:56:31.097 476 476 I lowmemorykiller: Kill ‘com.example.sleuthsagaunderstarlessskies’ (6765), uid 10285, oom_score_adj 0 to free 3352448kB rss, 705552kB swap, 22472kB dmabuf_pss, 51860kB dmabuf_rss; reason: device is low on swap (313776kB < 314572kB) and thrashing (414%)

04-16 15:56:31.846 1553 1882 W InputDispatcher: channel ‘c29171d com.example.sleuthsagaunderstarlessskies/com.godot.game.GodotApp’ ~ Consumer closed input channel or an error occurred. events=0x9

04-16 15:56:31.846 1553 1882 E InputDispatcher: channel ‘c29171d com.example.sleuthsagaunderstarlessskies/com.godot.game.GodotApp’ ~ Channel is unrecoverably broken and will be disposed!

04-16 15:56:31.846 1553 1882 I WindowManager: WINDOW DIED Window{c29171d u0 com.example.sleuthsagaunderstarlessskies/com.godot.game.GodotApp}

04-16 15:56:31.848 1553 17975 I ActivityManager: Process com.example.sleuthsagaunderstarlessskies (pid 6765) has died: fg TOP

I’m not at all experienced with reading Android logcat output yet but it seems like from reading this, the game crashes because it’s overusing memory at startup? First of all, can anyone tell me if this is the correct interpretation, or if it’s actually something else (or indeed, if you need to see more of the log output to determine this). Secondly, if it is a memory issue, I guess the game is loading too much for most phones to handle during startup?

This is surprising to me, because the game is not really graphically demanding, assets wise, and whilst a lot of the game’s UI is loaded at start up, when running on PC the game doesn’t seem to ever really demand more than between 1 and 2 GB of ram whilst running at any given time, sometimes less, so it’s hard to understand why it’s failing to run on devices with 8 - 16 GB available. So, if it is likely to be a RAM-use-at-startup issue, then can anyone point me towards how I’d go about addressing this for an android build? Is there a reasonable limit of how many nodes should be aimed for in the node tree or something? Really just stabbing in the dark, so I would appreciate some guidance - thank you! :slight_smile: