Skip to content

SIGABRT crash on launch with Mapbox Android SDK bindings — works in .NET 9, broken in .NET 10 #11207

@natevarghese

Description

@natevarghese

Android framework version

net10.0-android

Affected platform version

.NET 10.0.203

Description

A .NET Android bindings project that includes the Mapbox Maps SDK AARs crashes immediately on launch with a native SIGABRT in both .NET 10 emulators and real devices. The same setup works correctly in .NET 9.
The crash occurs before any managed code runs — Application.OnCreate is never reached. The same Mapbox SDK version is used in both cases. It looks like the .so files are being loaded twice, or in the wrong order.

What I tried

  1. IInitializer / AndroidX Startup — attempted to pre-initialize Mapbox via androidx.startup but crash occurs before any initializer runs.
  2. ContentProvider pre-init — implemented a custom ContentProvider with OnCreate to pre-touch Mapbox classes before Application.OnCreate. Crash still occurs before ContentProvider.OnCreate is reached.
  3. Disabled all Mapbox InitializationProvider entries — confirmed via merged manifest that all Mapbox AndroidX Startup initializers are removed. Crash persists.
  4. Confirmed classes are in DEX — BaseMapboxInitializer and MapboxMapsInitializer are present in classes.dex.
  5. Confirmed single libc++_shared.so — no duplicate copies in the APK.
  6. Proguard/R8 — already disabled in debug builds, not the cause.
  7. Using newest version of the Mapbox SDK.

Steps to Reproduce

Reproduction Repository
https://github.com/natevarghese/DotNetMapbox
A minimal reproduction repository is provided with two separate solutions demonstrating the working (.NET 9) and broken (.NET 10) behavior side by side. I added global.json to each solution.
/
├── Net9/ # Works correctly
└── Net10/ # Crashes on launch

Open each solution independently and install workloads. Run on android emulator or device and observe crash on .Net 10 project only.

Did you find any workaround?

No

Relevant log output

W/MapboxInitializer(29978): Trying to call static BaseMapboxInitializer.init() before running BaseMapboxInitializer.create()! Please make sure that Mapbox SDK is initialized before any APIs are called.
04-24 07:56:29.288 W/t10mapboxrunner(29978): Accessing hidden method Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread; (unsupported, reflection, allowed)
04-24 07:56:29.289 W/t10mapboxrunner(29978): Accessing hidden method Landroid/app/ActivityThread;->getApplication()Landroid/app/Application; (unsupported, reflection, allowed)
04-24 07:56:29.290 I/MapboxInitializer(29978): MapboxInitializer started MapboxSDKCommonInitializerImpl initialization, attempt 1
04-24 07:56:29.315 D/nativeloader(29978): Load /data/app/~~YeBWbuXRMSYkP5BgZs9PJg==/com.testing.dotnet10mapboxrunner-gS4l83bJl_PmkehJuZfm3A==/lib/x86_64/libmapbox-common.so using ns clns-7 from class loader (caller=/data/app/~~YeBWbuXRMSYkP5BgZs9PJg==/com.testing.dotnet10mapboxrunner-gS4l83bJl_PmkehJuZfm3A==/base.apk): ok
04-24 07:56:29.317 E/libc++abi(29978): __cxa_guard_acquire detected recursive initialization: do you have a function-local static variable whose initialization depends on that function?
04-24 07:56:29.320 F/libc    (29978): Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 29978 (t10mapboxrunner), pid 29978 (t10mapboxrunner)
04-24 07:56:29.509 E/crash_dump64(30001): failed to get the guest state header for thread 29978: Bad address
04-24 07:56:29.513 E/crash_dump64(30001): failed to get the guest state header for thread 29980: Bad address
04-24 07:56:29.515 E/crash_dump64(30001): failed to get the guest state header for thread 29981: Bad address
04-24 07:56:29.517 E/crash_dump64(30001): failed to get the guest state header for thread 29982: Bad address
04-24 07:56:29.520 E/crash_dump64(30001): failed to get the guest state header for thread 29983: Bad address
04-24 07:56:29.522 E/crash_dump64(30001): failed to get the guest state header for thread 29984: Bad address
04-24 07:56:29.524 E/crash_dump64(30001): failed to get the guest state header for thread 29985: Bad address
04-24 07:56:29.526 E/crash_dump64(30001): failed to get the guest state header for thread 29986: Bad address
04-24 07:56:29.527 E/crash_dump64(30001): failed to get the guest state header for thread 29987: Bad address
04-24 07:56:29.530 E/crash_dump64(30001): failed to get the guest state header for thread 29988: Bad address
04-24 07:56:29.531 E/crash_dump64(30001): failed to get the guest state header for thread 29989: Bad address
04-24 07:56:29.532 E/crash_dump64(30001): failed to get the guest state header for thread 29990: Bad address
04-24 07:56:29.533 E/crash_dump64(30001): failed to get the guest state header for thread 29992: Bad address
04-24 07:56:29.537 E/crash_dump64(30001): failed to get the guest state header for thread 29996: Bad address
04-24 07:56:29.541 E/crash_dump64(30001): failed to get the guest state header for thread 29997: Bad address
04-24 07:56:29.546 E/crash_dump64(30001): failed to get the guest state header for thread 29998: Bad address
04-24 07:56:29.586 I/crash_dump64(30001): obtaining output fd from tombstoned, type: kDebuggerdTombstoneProto
04-24 07:56:29.590 I/tombstoned(  222): received crash request for pid 29978
04-24 07:56:29.593 I/crash_dump64(30001): performing dump of process 29978 (target tid = 29978)
04-24 07:56:32.283 F/DEBUG   (30001): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-24 07:56:32.283 F/DEBUG   (30001): Build fingerprint: 'google/sdk_gphone64_x86_64/emu64xa:15/AE3A.240806.036/12592187:user/release-keys'
04-24 07:56:32.283 F/DEBUG   (30001): Revision: '0'
04-24 07:56:32.283 F/DEBUG   (30001): ABI: 'x86_64'
04-24 07:56:32.284 F/DEBUG   (30001): Timestamp: 2026-04-24 07:56:29.642454011-0400
04-24 07:56:32.284 F/DEBUG   (30001): Process uptime: 6s
04-24 07:56:32.284 F/DEBUG   (30001): Cmdline: com.testing.dotnet10mapboxrunner
04-24 07:56:32.285 F/DEBUG   (30001): pid: 29978, tid: 29978, name: t10mapboxrunner  >>> com.testing.dotnet10mapboxrunner <<<
04-24 07:56:32.285 F/DEBUG   (30001): uid: 10213
04-24 07:56:32.285 F/DEBUG   (30001): signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr --------
04-24 07:56:32.285 F/DEBUG   (30001): Abort message: '__cxa_guard_acquire detected recursive initialization: do you have a function-local static variable whose initialization depends on that function?'
04-24 07:56:32.285 F/DEBUG   (30001):     rax 0000000000000000  rbx 00007fffd4aeeac8  rcx 00007da691b54b90  rdx 0000000000000006
04-24 07:56:32.285 F/DEBUG   (30001):     r8  00007da48359f550  r9  00007da48359f550  r10 00007fffd4aeead0  r11 0000000000000207
04-24 07:56:32.285 F/DEBUG   (30001):     r12 00007fffd4aeeca0  r13 0000003000000008  r14 000000000000751a  r15 000000000000751a
04-24 07:56:32.286 F/DEBUG   (30001):     rdi 000000000000751a  rsi 000000000000751a
04-24 07:56:32.286 F/DEBUG   (30001):     rbp 000000000000751a  rsp 00007fffd4aeeac0  rip 00007da691b54b90
04-24 07:56:32.286 F/DEBUG   (30001): 104 total frames
04-24 07:56:32.286 F/DEBUG   (30001): backtrace:
04-24 07:56:32.286 F/DEBUG   (30001):       #00 pc 000000000005cb90  /apex/com.android.runtime/lib64/bionic/libc.so (abort+192) (BuildId: eb58b4d427279994f00c0e1818477e4f)
04-24 07:56:32.286 F/DEBUG   (30001):       #01 pc 000000000009dc6f  /data/app/~~YeBWbuXRMSYkP5BgZs9PJg==/com.testing.dotnet10mapboxrunner-gS4l83bJl_PmkehJuZfm3A==/lib/x86_64/libc++_shared.so (BuildId: 084515e55071d4679de77492b2f0d748a2276196)
04-24 07:56:32.286 F/DEBUG   (30001):       #02 pc 000000000009cd1c  /data/app/~~YeBWbuXRMSYkP5BgZs9PJg==/com.testing.dotnet10mapboxrunner-gS4l83bJl_PmkehJuZfm3A==/lib/x86_64/libc++_shared.so (__cxa_guard_acquire+269) (BuildId: 084515e55071d4679de77492b2f0d748a2276196)
04-24 07:56:32.286 F/DEBUG   (30001):       #03 pc 00000000002f8fe0  /data/app/~~YeBWbuXRMSYkP5BgZs9PJg==/com.testing.dotnet10mapboxrunner-gS4l83bJl_PmkehJuZfm3A==/lib/x86_64/libmapbox-common.so (BuildId: 6c7370f7af6386ae0d5ecf3c52ad28eea6d8c3c2)
04-24 07:56:32.287 F/DEBUG   (30001):       #04 pc 0000000000593f7d  /data/app/~~YeBWbuXRMSYkP5BgZs9PJg==/com.testing.dotnet10mapboxrunner-gS4l83bJl_PmkehJuZfm3A==/lib/x86_64/libmapbox-common.so (mapbox::bindgen::initialize(_JavaVM*)+48) (BuildId: 6c7370f7af6386ae0d5ecf3c52ad28eea6d8c3c2)
04-24 07:56:32.287 F/DEBUG   (30001):       #05 pc 00000000006807bc  /apex/com.android.art/lib64/libart.so (art::JavaVMExt::LoadNativeLibrary(_JNIEnv*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, _jobject*, _jclass*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*)+3516) (BuildId: 62338b1c62e3991543c9b8b8bae2b361)
04-24 07:56:32.287 F/DEBUG   (30001):       #06 pc 00000000000050f3  /apex/com.android.art/lib64/libopenjdkjvm.so (JVM_NativeLoad+355) (BuildId: 1d3d7da26cf5268558c64a66611de01d)
04-24 07:56:32.287 F/DEBUG   (30001):       #07 pc 00000000001665a0  [anon_shmem:dalvik-jit-code-cache] (offset 0x2000000) (art_jni_trampoline+208)
04-24 07:56:32.287 F/DEBUG   (30001):       #08 pc 00000000000247bb  [anon_shmem:dalvik-jit-code-cache] (offset 0x2000000) (java.lang.Runtime.loadLibrary0+427)
04-24 07:56:32.288 F/DEBUG   (30001):       #09 pc 0000000000023e11  [anon_shmem:dalvik-jit-code-cache] (offset 0x2000000) (java.lang.Runtime.loadLibrary0+177)
04-24 07:56:32.288 F/DEBUG   (30001):       #10 pc 0000000000023b52  [anon_shmem:dalvik-jit-code-cache] (offset 0x2000000) (java.lang.System.loadLibrary+178)
04-24 07:56:32.288 F/DEBUG   (30001):       #11 pc 00000000002124b6  /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+806) (BuildId: 62338b1c62e3991543c9b8b8bae2b361)
04-24 07:56:32.288 F/DEBUG   (30001):       #12 pc 0000000000474c24  /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+228) (BuildId: 62338b1c62e3991543c9b8b8bae2b361)
04-24 07:56:32.292 F/DEBUG   (30001):       #13 pc 00000000005f92f3  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>(art::ArtMethod*, art::Thr

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triageIssues that need to be assigned.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions