Skip to content

App Crash on launch in 16KB page size devices (Android 15 and 16) - the static libraries alignment is corrupted #429

@suriyakishoreks

Description

@suriyakishoreks

Summary

On Android Emulators with 16KB page size mode enabled (Android 15 and Android 16), the app crashes during startup while loading a native library.

Environment

Fingerprint: google/sdk_gphone16k_arm64/emu64a16k:15/AE3A.240806.041/12890756:user/dev-keys
Issue: SIGSEGV (SEGV_ACCERR) on Android 15 (16KB Page Size Support)
Faulting Library: libBulletCollision.so
Dependency: @reactvision/react-viro: "2.51.0" / "2.50.1' react-native": "0.81.5"
ABI: arm64-v8a

Steps to Reproduce

Setup an android emulator/device with Android 15 or 16 with 16 KB page size build (If emulator, ensure arch is arm64-v8a, which would be the case in m series mac)
Open any react native app with @reactvision/react-viro.
App crashes during startup when loading native modules.

Expected Behavior

The app should launch normally on 16KB page size devices/environments.

Actual Behavior

The app crashes on launch with SIGSEGV (SEGV_ACCERR) due to library alignment issue.

Key Logs / Root Cause

#00 pc 00000000000827e8 /data/app/lib/arm64/libBulletCollision.so (btInfMaskConverter::btInfMaskConverter(int)+20)
#1 pc 00000000000827ac /data/app/lib/arm64/libBulletCollision.so
#2 pc 00000000000827c8 /data/app/lib/arm64/libBulletCollision.so
#3 pc 00000000000e855c /apex/com.android.runtime/bin/linker64 (__dl__ZN6soinfo17call_constructorsEv+704)
#4 pc 00000000000e8304 /apex/com.android.runtime/bin/linker64 (__dl__ZN6soinfo17call_constructorsEv+104)
#5 pc 00000000000cdc2c /apex/com.android.runtime/bin/linker64 (__dl__Z9do_dlopenPKciPK17android_dlextinfoPKv+752)
#6 pc 00000000000c8b6c /apex/com.android.runtime/bin/linker64 (__dl__ZL10dlopen_extPKciPK17android_dlextinfoPKv)
#7 pc 00000000000040c8 /apex/com.android.runtime/lib64/bionic/libdl.so (android_dlopen_ext+16)
#8 pc 0000000000019898 /apex/com.android.art/lib64/libnativeloader.so (android::NativeLoaderNamespace::Load(char const*) const+140)
#9 pc 0000000000009344 /apex/com.android.art/lib64/libnativeloader.so (OpenNativeLibrary+1572)
#10 pc 000000000066b8b0 /apex/com.android.art/lib64/libart.so (art::JavaVMExt::LoadNativeLibrary)
#11 pc 0000000000005914 /apex/com.android.art/lib64/libopenjdkjvm.so (JVM_NativeLoad+356)
#12 pc 000000000009c764 /system/framework/arm64/boot.oat (art_jni_trampoline+148)
#13 pc 00000000000ab390 /system/framework/arm64/boot.oat (java.lang.Runtime.loadLibrary0+320)
#14 pc 00000000000ac250 /system/framework/arm64/boot.oat (java.lang.Runtime.loadLibrary0+400)
#15 pc 00000000000afad4 /system/framework/arm64/boot.oat (java.lang.System.loadLibrary+84)
#16 pc 000000000077f108 /apex/com.android.art/lib64/libart.so (nterp_helper+152)
#17 pc 000000000017fa34 /data/app/base.apk (com.viromedia.bridge.module.MaterialManager.+4)
#18 pc 0000000000369040 /apex/com.android.art/lib64/libart.so (art_quick_invoke_static_stub+640)
#19 pc 00000000004353cc /apex/com.android.art/lib64/libart.so (art::ClassLinker::InitializeClass)
#20 pc 000000000033fdd4 /apex/com.android.art/lib64/libart.so (NterpAllocateObject+3508)
#21 pc 00000000007850d0 /apex/com.android.art/lib64/libart.so (nterp_allocate_object+48)
#22 pc 00000000007776d4 /apex/com.android.art/lib64/libart.so (nterp_op_new_instance+84)
#23 pc 00000000004f8c42 /data/app/base.apk (com.viromedia.bridge.ReactViroPackage.createNativeModules+22)

Observations:

Run some alignment tests in the apk and aab. Simple 16kb alignment passes for all libraries and even google play console reports no issue.
But on indepth analysis, the libraries seems to be corrupted, the alignment and the actual data offset is not matching. Data offset says it is 4kB compliant, but alignment flag says it is 16kB compliant.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions