You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12设备上libc.so崩溃问题求助(无法复现)

Android 12 专属SO库崩溃问题求助

问题概述

在APM平台捕获到仅出现在Android 12设备上的系统SO库异常崩溃,崩溃发生在ReferenceQueueD线程,属于SIGSEGV(段错误),错误码SEGV_MAPERR,访问了无效内存地址。

应用Build Gradle配置

compileSdkVersion 31
buildToolsVersion '31.0.0'
defaultConfig {
    minSdkVersion 24
    targetSdkVersion 26

    ndk {  
        abiFilters 'armeabi-v7a', 'arm64-v8a'
    }
}

崩溃日志详情

Process Name: 'xxx'
Thread Name: 'ReferenceQueueD'
pid: 29245, tid: 29254  >>> com.xxx.xxxx <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00fffffefffffff0
  x0   00000070a0f4a6c0  x1   00ffffff00000000  x2   0000000000000000  x3   0000000000000000
  x4   0000000000000010  x5   0000006ded2d4340  x6   0003522200034d82  x7   00034dcc00035472
  x8   02ffffff00000000  x9   02ffffff00000000  x10  00000000ecc30e2f  x11  0000000000000000
  x12  0000000000000019  x13  000009f3ba83fe32  x14  00106e6d9f58a32d  x15  0000000034155555
  x16  00000070803f9248  x17  00000070a0eb2c00  x18  0000006d758cc000  x19  00ffffff00000000
  x20  0000000000000000  x21  00000070a0f4a6c0  x22  0000000000000000  x23  0000000014f28e78
  x24  000000006f7aaba0  x25  0000000014f28eb8  x26  0000000000000000  x27  0000006de9217000
  x28  0000000000000043  x29  0000006d7631b6e0  x30  00000070806b0cd0
  sp   0000006d7631b6d0  pc   00000070a0eb8668  pstate 0000000060001000
  v0   0000518400006498000050f0000035e9  v1   000030ff000055ff000052d100004c9a
  v2   00000000001c30000000006dd3dca000  v3   00000000000001000000000000000100
  v4   00000000000221c00000000000022180  v5   0000221c000022180000221400002210
  v6   00000000000000000000000000000000  v7   00000000000000008060180680601806
  v8   00000000000000000000000000000000  v9   00000000000000000000000000000000
  v10  00000000000000000000000000000000  v11  00000000000000000000000000000000
  v12  00000000000000000000000000000000  v13  00000000000000000000000000000000
  v14  00000000000000000000000000000000  v15  00000000000000000000000000000000
  v16  c0300c03c0300c03c0300c03c0300c03  v17  00000000000800000000080001000404
  v18  00000000000000000000080000000000  v19  0000000000000000be00000000000000
  v20  00000000000000003ff0002b8b263fc3  v21  00000000000001480000000000000001
  v22  00000000000000380000000000000001  v23  00000000000002000000000000000001
  v24  00000000000000800000000000000001  v25  00000000000001100000000000000001
  v26  00000000000001800000000000000001  v27  00000000000000b80000000000000001
  v28  00000000000000000000000300000001  v29  000000000000000c0000000000000002
  v30  00000000000000080000000000000002  v31  006d005f00790061006c00650064005f
  fpsr 00000010  fpcr 00000000
    #00 pc 0000000000006668  /apex/com.android.runtime/lib64/bionic/libc.so (_ZN5scudo9AllocatorINS_13AndroidConfigEXadL_Z21scudo_malloc_postinitEEE10deallocateEPvNS_5Chunk6OriginEmm+104)
    #01 pc 0000000000121ccc  /apex/com.android.i18n/lib64/libicui18n.so (_ZN6icu_6812RegexPattern3zapEv+216)
    --- --- --- ---

当前困境

测试设备上无法复现该问题,谷歌搜索未找到相关解决方案,急需有效的排查和解决思路。

排查建议

  • 聚焦ICU正则对象生命周期:崩溃栈显示问题出在libicui18n.so的RegexPattern::zap()方法,这是正则对象的释放逻辑。检查应用或依赖库中是否存在正则对象重复释放、弱引用处理不当的情况,尤其是在ReferenceQueue相关逻辑中。
  • 升级targetSdkVersion:当前targetSdk为26,而compileSdk是31(对应Android 12)。尝试将targetSdk升级到31,适配Android 12的系统行为,可能解决系统库调用的兼容性问题。
  • 检查JNI层正则操作:如果应用有JNI代码直接调用ICU库,确认内存管理是否规范,避免出现野指针或重复释放。
  • 启用Scudo调试:崩溃涉及Scudo内存分配器,Android 12默认启用Scudo。可以在调试时开启Scudo的额外日志,帮助定位内存错误的具体触发点。
  • 收集更多设备信息:通过APM收集崩溃设备的具体型号、Android 12小版本号,缩小问题范围,排查是否是特定设备的系统库bug。

内容的提问来源于stack exchange,提问作者AstroNot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:31:58