Startup crash in Android 12 (2019.4.9f1, arm64, target API 31)

2019.4.9f1 game crushes on startup in Android 12.

I’ve run the Firebase test lab Robo test with Google Pixel 5 (API 30), Pixel 6 (API 31), Pixel 6a (API 32), and Pixel 7 (API 33).

Pixel 5 passes the test fine. But newer devices starting from Android 12 API 31 and up are giving similar crash reports:

Fatal exception

    at libunity.GfxDeviceVK::GfxDeviceVK(MemLabelId const&, vk::Instance const&)(GfxDeviceVK:1848)

     FATAL EXCEPTION: UnityMain
Process: com.CATana.HeroicDice, PID: 19139
java.lang.Error: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Version '2019.4.9f1 (50fe8a171dd9)', Build type 'Development', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
Revision: 'MP1.0'
ABI: 'arm64'
Timestamp: 2022-12-28 03:40:19-0800
pid: 19139, tid: 19170, name: UnityMain  >>> com.CATana.HeroicDice <<<
uid: 10232
signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x79c402c3e8
    x0  00000079c3e27330  x1  b400007931ba2ff0  x2  0000005400000000  x3  0000000000000046
    x4  0000000000080000  x5  0000000000000004  x6  0000e37c0000df2c  x7  0000e3c10000dfb6
    x8  00000079c4027330  x9  b400007931c23000  x10 0000000000000000  x11 0000000000000000
    x12 0000000000000092  x13 0000000000000000  x14 0000000000000001  x15 0000000000000000
    x16 00000079c3e06a90  x17 0000007cd0166894  x18 0000000000000032  x19 0000005400000000
    x20 b400007931ba2ff0  x21 00000079c3e27328  x22 b400007b29d998d0  x23 b400007b29d998c8
    x24 0000000000000000  x25 00000000000002a0  x26 0000000000000000  x27 00000079c3e0a738
    x28 b400007b29d99ba0  x29 0000000000000002
    sp  00000079c572f890  lr  00000079c2913074  pc  00000079c290343c
backtrace:
      #00 pc 000000000030143c  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (MemoryManager::GetAllocatorContainingPtr(void const*)+24) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #01 pc 0000000000311070  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (transfer_ownership(void*, MemLabelId const&, AllocationRootWithSalt)+52) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #02 pc 00000000005cb13c  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (dynamic_array_detail::dynamic_array_data::swap(dynamic_array_detail::dynamic_array_data&)+68) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #03 pc 0000000000de39f4  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (allocutil::BuddyAllocator::FreeBlockRegistry::FreeBlockRegistry(MemLabelId, unsigned char, unsigned int)+276) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #04 pc 0000000000de384c  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (allocutil::BuddyAllocator::BuddyAllocator(MemLabelId, unsigned int, unsigned int, unsigned int)+272) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #05 pc 0000000000790bb4  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::BuddyMemoryAllocator::MemoryTypeAllocator::MemoryTypeAllocator(VkDevice_T*, VkPhysicalDeviceMemoryProperties const&, unsigned long, unsigned int, unsigned int, unsigned int, unsigned int)+100) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #06 pc 0000000000790d70  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::BuddyMemoryAllocator::AllocateImpl(VkDevice_T*, VkPhysicalDeviceMemoryProperties const&, unsigned long, unsigned int, unsigned long)+224) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #07 pc 0000000000790818  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::AllocateImage(VkDevice_T*, VkPhysicalDeviceMemoryProperties const&, vk::MemoryAllocator&, VkImage_T*, unsigned int, unsigned long)+420) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #08 pc 00000000007c7328  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::ImageManager::PrepareNewImage(TextureDimension, int, VkExtent3D const&, VkFormat, int, unsigned int, VkSampleCountFlagBits, VkFormat, bool, vk::ImageMemory, bool, bool)+1040) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #09 pc 00000000007c7a88  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::ImageManager::CreateImage(vk::CommandBuffer*, vk::ScratchBuffer*, TextureDimension, vk::ImageData const&, VkExtent3D const&, GraphicsFormat, TextureFormat, TextureColorSpace, int, unsigned int, VkSampleCountFlagBits, bool)+348) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #10 pc 000000000077cb54  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::Texture::Create(vk::CommandBuffer*, vk::ScratchBuffer*, TextureID, TextureDimension, vk::ImageData const&, VkExtent3D const&, GraphicsFormat, int, VkSampleCountFlagBits, bool, bool)+964) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #11 pc 00000000007c6530  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (vk::ImageManager::ImageManager(VkPhysicalDevice_T*, VkDevice_T*, vk::BufferManager&, vk::MemoryAllocator&, unsigned long, vk::Framebuffers&, vk::ResourceDestructionStagingArea&)+552) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #12 pc 0000000000782238  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (GfxDeviceVK::GfxDeviceVK(MemLabelId const&, vk::Instance const&)+1848) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #13 pc 0000000000776510  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (CreateVKGfxDevice()+120) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #14 pc 000000000093d278  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (CreateRealGfxDevice(GfxDeviceRenderer)+80) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #15 pc 0000000000cb5054  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (CreateClientGfxDevice(GfxDeviceRenderer, GfxCreateDeviceFlags)+216) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #16 pc 000000000093e0c4  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (CreateGfxDevice(GfxDeviceRenderer, GfxCreateDeviceFlags)+252) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #17 pc 000000000093e384  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (InitializeGfxDevice()+668) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #18 pc 00000000007151a8  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (AndroidGraphics::Startup()+92) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #19 pc 00000000006ebb0c  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (UnityInitApplication()+3364) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #20 pc 00000000006ec548  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (UnityPlayerLoop()+152) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #21 pc 00000000007173a8  /data/app/~~7gGyIDcyHNgf-BRilBBzpQ==/com.CATana.HeroicDice-awDPoSit4voup5e0mow8FA==/lib/arm64/libunity.so (nativeRender(_JNIEnv*, _jobject*)+72) (BuildId: a75eb098608197e1d7be2b514e77feb936dc6d4e)
      #22 pc 0000000000222244  /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+148) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #23 pc 0000000000218964  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #24 pc 0000000000284208  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+188) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #25 pc 00000000003e34ac  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+400) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #26 pc 00000000003de320  /apex/com.android.art/lib64/libart.so (bool art::interpreter::smile:oCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+804) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #27 pc 0000000000756084  /apex/com.android.art/lib64/libart.so (MterpInvokeDirect+1036) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #28 pc 0000000000203914  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_direct+20) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #29 pc 0000000000758274  /apex/com.android.art/lib64/libart.so (MterpInvokeStatic+2152) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #30 pc 0000000000203994  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_static+20) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #31 pc 00000000003d6150  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool)+304) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #32 pc 00000000003dd890  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+204) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #33 pc 00000000003de2fc  /apex/com.android.art/lib64/libart.so (bool art::interpreter::smile:oCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+768) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #34 pc 0000000000752fc4  /apex/com.android.art/lib64/libart.so (MterpInvokeInterface+1568) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #35 pc 0000000000203a14  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_interface+20) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #36 pc 000000000074d3e4  /apex/com.android.art/lib64/libart.so (MterpInvokeVirtual+3036) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #37 pc 0000000000203814  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_virtual+20) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #38 pc 0000000000758274  /apex/com.android.art/lib64/libart.so (MterpInvokeStatic+2152) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #39 pc 0000000000203994  /apex/com.android.art/lib64/libart.so (mterp_op_invoke_static+20) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #40 pc 00000000003d6150  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool)+304) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #41 pc 000000000073b6b8  /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+776) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #42 pc 0000000000222378  /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #43 pc 0000000000211608  /apex/com.android.art/lib64/libart.so (nterp_helper+152) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #44 pc 0000000000218964  /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+548) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #45 pc 0000000000284208  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+188) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #46 pc 000000000061fb98  /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+460) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #47 pc 000000000066e75c  /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1184) (BuildId: e6c658201ef1ec3760112fa1b838ab2c)
      #48 pc 00000000000b1690  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+204) (BuildId: 28943f8bb3b7b23557619af9a38223c5)
      #49 pc 00000000000510ac  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: 28943f8bb3b7b23557619af9a38223c5)
    at libunity.MemoryManager::GetAllocatorContainingPtr(void const*)(GetAllocatorContainingPtr:24)
    at libunity.transfer_ownership(void*, MemLabelId const&, AllocationRootWithSalt)(transfer_ownership:52)
    at libunity.dynamic_array_detail::dynamic_array_data::swap(dynamic_array_detail::dynamic_array_data&)(swap:68)
    at libunity.allocutil::BuddyAllocator::FreeBlockRegistry::FreeBlockRegistry(MemLabelId, unsigned char, unsigned int)(FreeBlockRegistry:276)
    at libunity.allocutil::BuddyAllocator::BuddyAllocator(MemLabelId, unsigned int, unsigned int, unsigned int)(BuddyAllocator:272)
    at libunity.vk::BuddyMemoryAllocator::MemoryTypeAllocator::MemoryTypeAllocator(VkDevice_T*, VkPhysicalDeviceMemoryProperties const&, unsigned long, unsigned int, unsigned int, unsigned int, unsigned int)(MemoryTypeAllocator:100)
    at libunity.vk::BuddyMemoryAllocator::AllocateImpl(VkDevice_T*, VkPhysicalDeviceMemoryProperties const&, unsigned long, unsigned int, unsigned long)(AllocateImpl:224)
    at libunity.vk::AllocateImage(VkDevice_T*, VkPhysicalDeviceMemoryProperties const&, vk::MemoryAllocator&, VkImage_T*, unsigned int, unsigned long)(AllocateImage:420)
    at libunity.vk::ImageManager::PrepareNewImage(TextureDimension, int, VkExtent3D const&, VkFormat, int, unsigned int, VkSampleCountFlagBits, VkFormat, bool, vk::ImageMemory, bool, bool)(PrepareNewImage:1040)
    at libunity.vk::ImageManager::CreateImage(vk::CommandBuffer*, vk::ScratchBuffer*, TextureDimension, vk::ImageData const&, VkExtent3D const&, GraphicsFormat, TextureFormat, TextureColorSpace, int, unsigned int, VkSampleCountFlagBits, bool)(CreateImage:348)
    at libunity.vk::Texture::Create(vk::CommandBuffer*, vk::ScratchBuffer*, TextureID, TextureDimension, vk::ImageData const&, VkExtent3D const&, GraphicsFormat, int, VkSampleCountFlagBits, bool, bool)(Create:964)
    at libunity.vk::ImageManager::ImageManager(VkPhysicalDevice_T*, VkDevice_T*, vk::BufferManager&, vk::MemoryAllocator&, unsigned long, vk::Framebuffers&, vk::ResourceDestructionStagingArea&)(ImageManager:552)
    at libunity.GfxDeviceVK::GfxDeviceVK(MemLabelId const&, vk::Instance const&)(GfxDeviceVK:1848)
    at libunity.CreateVKGfxDevice()(CreateVKGfxDevice:120)
    at libunity.CreateRealGfxDevice(GfxDeviceRenderer)(CreateRealGfxDevice:80)
    at libunity.CreateClientGfxDevice(GfxDeviceRenderer, GfxCreateDeviceFlags)(CreateClientGfxDevice:216)
    at libunity.CreateGfxDevice(GfxDeviceRenderer, GfxCreateDeviceFlags)(CreateGfxDevice:252)
    at libunity.InitializeGfxDevice()(InitializeGfxDevice:668)
    at libunity.AndroidGraphics::Startup()(Startup:92)
    at libunity.UnityInitApplication()(UnityInitApplication:3364)
    at libunity.UnityPlayerLoop()(UnityPlayerLoop:152)
    at libunity.nativeRender(_JNIEnv*, _jobject*)(nativeRender:72)
    at libart.art_quick_generic_jni_trampoline(art_quick_generic_jni_trampoline:148)
    at libart.art_quick_invoke_stub(art_quick_invoke_stub:548)
    at libart.art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)(Invoke:188)
    at libart.art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)(ArtInterpreterToCompiledCodeBridge:400)
    at libart.bool art::interpreter::smile:oCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)(DoCall<false, false>:804)
    at libart.MterpInvokeDirect(MterpInvokeDirect:1036)
    at libart.mterp_op_invoke_direct(mterp_op_invoke_direct:20)
    at libart.MterpInvokeStatic(MterpInvokeStatic:2152)
    at libart.mterp_op_invoke_static(mterp_op_invoke_static:20)
    at libart.art::interpreter::Execute(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame&, art::JValue, bool, bool)(Execute:304)

Any suggestions?

The crash is gone after upgrading the project to 2020.3.16f1 and setting SDK, NDK, and graddle to the default versions that come with 2020.3 Unity installation (Edit > Preferences > External Tools)