So i did some tests regarding crashes in some areas (kind of tests, i just checked ram usage of the game) and i got around 550 MB RAM usage peak, idk whether its same throughout whole game or just inside new areas though.
However I got 64 bit architecture support here [Ralme GT master edition] so I think we can assume other peoples with this architecture gets similar result. And then low end devices with only 2 GB ram would use a little over 1/4 of their memory to keep the game running. Considering RAM is required to keep system running as well, these 500 MB could be really stressfull for low ram devices.
My point is, technically it is possible game uses too much RAM for some devices and system force closes the game in order to not crash the system.
-------------------------------------------------
Now jashin, this part of message is for you:
I checked the game code throught reverse engineering to look for potential cause.
I think you should replace "Gameobject.FindWithTag()" with different more efficient approach. Especially in places where you FindWithTag() in Update function since it constanly will look for this scanning through whole scene
FindWithTag is good when the object you look for can be changed, but when you know right away the object, like SaveSystem, its better to make public or serializefield private inspector approach since it will work like a pointer, increasing efficiency of the code
Public gameobject _nameOfObject
_nameOfObject.getcomponent<>
Instead
Gameobject.findwithtag("tagname")
------------------------------------------------
And in build versions, put all debug.log() into comments because debug.log also affects efficiency