Android 12设备libc.so abort崩溃问题求助(无法复现)
Android 12设备上com.yy.reader的Native崩溃分析求助
问题概述
- 仅在Android 12设备上出现
com.yy.reader应用的Native崩溃,无法复现,无相关排查线索,请求协助分析
开发环境
- Android Studio Arctic Fox | 2020.3.1
- CompileSdkVersion:31
- TargetSdkVersion:28
崩溃日志
Process Name: 'com.yy.reader' Thread Name: 'ReferenceQueueD' pid: 16810, tid: 16819 >>> com.yy.reader <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00fffffefffffff0 x0 0000007c8cc166c0 x1 00ffffff00000000 x2 0000000000000000 x3 0000000000000000 x4 0000000000000010 x5 000000795ebf2754 x6 0000000000000001 x7 0001232700012354 x8 02ffffff00000000 x9 02ffffff00000000 x10 00000000189a1128 x11 0000000000000000 x12 00000000000000e0 x13 000123ab000123c0 x14 003a847bf79640ed x15 000032b25d89e598 x16 0000007c82bd0540 x17 0000007c8cb81e38 x18 000000795e5fa000 x19 00ffffff00000000 x20 0000000000000000 x21 0000007c8cc166c0 x22 0000000000000000 x23 000000001b551758 x24 0000000070d9ab90 x25 000000001b551798 x26 0000000000000000 x27 00000079dd018000 x28 0000000000000043 x29 000000795ebf26e0 x30 0000007c86f01858 sp 000000795ebf26d0 pc 0000007c8cb8754c pstate 0000000060001000 v0 00000000000000000000000000000000 v1 00012e2e00012e5500012e94000123f9 v2 00000079e08ce1d000000079e08ce180 v3 00000000000001400000000000000140 v4 000000000002413000000000000240e0 v5 000024130000240e0000240900002404 v6 00000000000000000000000000000000 v7 00000000000000008060180680601806 v8 00000000000000000000000000000000 v9 00000000000000000000000000000000 v10 00000000000000000000000000000000 v11 00000000000000000000000000000000 v12 00000000000000000000000000000000 v13 00000000000000000000000000000000 v14 00000000000000000000000000000000 v15 00000000000000000000000000000000 v16 c0300c03c0300c03c0300c03c0300c03 v17 80000000000000008000000000000000 v18 80000000000000000000000000000000 v19 000000000000000000000000ebad8083 v20 000000000000000000000000ebad8084 v21 000000000000000000000000ebad8085 v22 000000000000000000000000ebad8086 v23 000000000000000000000000ebad8087 v24 000000000000000000000000ebad8088 v25 000000000000000000000000ebad8089 v26 000000000000000000000000ebad808a v27 000000000000000000000000ebad808b v28 000000000000000000000000ebad808c v29 000000000000000000000000ebad808d v30 000000000000000000000000ebad808e v31 006d005f00790061006c00650064005f fpsr 00000010 fpcr 00000000 #00 pc 000000000000654c /apex/com.android.runtime/lib64/bionic/libc.so (_ZN5scudo9AllocatorINS_13AndroidConfigEXadL_Z21scudo_malloc_postinitEEE10deallocateEPvNS_5Chunk6OriginEmm+100) #01 pc 0000000000119854 /apex/com.android.i18n/lib64/libicui18n.so (_ZN6icu_6812RegexPattern3zapEv+212) #02 pc 0000000000119950 /apex/com.android.i18n/lib64/libicui18n.so (_ZN6icu_6812RegexPatternD2Ev+36) #03 pc 00000000000092e4 /apex/com.android.i18n/lib64/libicu_jni.so #04 pc 0000000000003978 /apex/com.android.art/javalib/arm64/boot-core-libart.oat --- --- --- ---
崩溃分析与排查方向
从崩溃栈和信号信息来看:
- 崩溃发生在
ReferenceQueueD线程(Java引用回收相关线程),信号为SIGSEGV(段错误),错误码SEGV_MAPERR,表明代码尝试访问了未被映射到进程地址空间的内存地址00fffffefffffff0。 - 调用链显示崩溃触发于ICU库的
RegexPattern对象销毁过程:先是调用RegexPattern::zap()释放内部资源,随后进入析构函数,最终在scudo内存分配器的deallocate方法中触发内存访问错误。
排查建议
- 检查应用中使用正则表达式的场景,重点关注频繁创建/销毁
Pattern、Matcher对象的代码,确认是否存在多线程下的内存非法操作(比如对象已被GC回收后,JNI层仍尝试访问其内存)。 - 虽然应用的
TargetSdkVersion为28,但Android 12的ART虚拟机和系统ICU库有版本更新,可能存在兼容性问题。建议升级Android Studio到较新的稳定版本,同时检查是否依赖了第三方ICU相关库,考虑替换为系统内置的兼容版本。 - 启用Native内存检测工具(如Android Studio的Memory Profiler),尝试模拟用户场景复现问题,捕捉内存异常行为。
- 若应用存在JNI层直接操作ICU对象的代码,检查内存管理逻辑,确认是否存在未正确引用对象、重复释放内存等问题。
内容的提问来源于stack exchange,提问作者mrcoding
相关产品推荐
相关产品推荐

