dotnet / dotnet/android

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

Open
#11,207 1 comment 0 reactions 0 assignees View on GitHub
needs-triage
Dominant language
C#
Stars
2.1k
Forks
579
Avg merge
1d 20h
Merged PRs (30d)
257

Description

### 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

```shell
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, std::__1::allocator> const&, _jobject*, _jclass*, std::__1::basic_string, std::__1::allocator>*)+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(art::ArtMethod*, art::Thr
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.