Found a solution: turns out the problem was in IL2CPP, building win Mono was fine. And I fixed IL2CPP build too, all I needed is to uncheck “Strip Engine Code” checkbox.
Unity version - 2019.2.9f1
I created an empty project using LWRP template, changed to IL2CPP/.NET 4, almost everything else default, tried to run on a 4.1 device and it crashed. Unchecked Strip Engine Code and it worked.
In 2019.3 Unity will bump Android Min API to 19, you could do the same in 2019.2, that would effectively eliminate your problem, it seems on Android 4.1 there might be missing some API that’s why it fails
in 2019.2.11f1, unchecking strip engine code does produce an il2cpp android build that does not crash on boot. it is 4665kb larger than the build with stripped engine code, however.
we see a different crash on boot when stripping engine code on il2cpp builds in 2019.2.14f1.
11-29 00:11:23.290 26011 26088 E Unity : Cannot create web request without initializing the system
11-29 00:11:23.290 26011 26088 E Unity :
11-29 00:11:23.290 26011 26088 E Unity : (Filename: ./Modules/UnityWebRequest/Public/UnityWebRequestManager.cpp Line: 87)
11-29 00:11:23.290 26011 26088 E Unity : --------- beginning of crash
11-29 00:11:23.290 26011 26088 F libc : Fatal signal 5 (SIGTRAP), code -6 in tid 26088 (CloudJob.Worker)
we do not have unitywebrequest package enabled as we do not use it. we also do not touch cloudjobs, whatever those may be. no other build configuration that we have tested crashes on boot like this.
we are sticking with 2019.2.8f1, that appears to be the last version that produces stable android il2cpp player builds.