Android 15模拟器16KB页大小环境下Realm初始化报错求助
解决Android 15 16KB页面模拟器上Realm初始化的UnsatisfiedLinkError问题
核心修复步骤
升级Realm版本
Realm 10.19.0及后续版本已修复Android 15灵活页面大小的适配问题,当前使用的10.18.0存在兼容性缺陷。更新gradle依赖:implementation 'io.realm:realm-android:10.19.0' // 或更高稳定版调整NDK编译参数
除了已配置的-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON,需额外添加参数强制生成兼容旧哈希格式的SO文件,并指定正确的目标API级别:android { defaultConfig { externalNativeBuild { cmake { arguments "-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON", "-DANDROID_USE_LEGACY_HASH=ON", "-DANDROID_PLATFORM=android-34" // Android 15对应API 34 } } } }-DANDROID_USE_LEGACY_HASH=ON会强制生成DT_HASH而非新的哈希类型,避免Android 15加载器报错。临时绕过ReLinker(可选)
若升级Realm后仍有加载问题,可尝试直接加载库而非使用ReLinker:
在自定义Application类中添加静态代码块:static { try { System.loadLibrary("realm-jni"); } catch (UnsatisfiedLinkError e) { // 可选的降级逻辑 } }同时排除ReLinker依赖:
implementation('io.realm:realm-android:10.19.0') { exclude group: 'com.getkeepsafe.relinker' }
问题根源
错误提示的empty/missing DT_HASH/DT_GNU_HASH是因为:
- Android 15引入了16KB页面大小支持,NDK r27默认生成的SO文件使用了新的哈希扩展类型
- Realm 10.18.0未适配Android 15的灵活页面特性,且配套的ReLinker无法识别新哈希格式,导致SO加载失败
内容的提问来源于stack exchange,提问作者vjimbei
相关产品推荐
相关产品推荐

