-
Notifications
You must be signed in to change notification settings - Fork 208
Description
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.