You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

三星设备专属libicui18n.so(icu_75::RegexPattern::zap)崩溃问题求助

三星设备专属libicui18n.so(icu_75::RegexPattern::zap)崩溃问题求助

各位大佬好,最近我们的React Native安卓应用碰到了一个棘手的崩溃问题,折腾了一阵没头绪,特意来求助社区的大神们!

问题现象

我们的应用在三星设备上频繁出现原生崩溃,其他品牌(比如Oppo、一加)极少出现。崩溃信息来自Google Play Console的「Crashes & ANRs」模块,核心崩溃栈指向ICU库的Regex相关方法:

[libicui18n.so] icu_75::RegexPattern::zap()
[libicui18n.so] icu_75::RegexMatcher::~RegexMatcher()
[libicui18n.so] icu_72::RegexMatcher::~RegexMatcher()
[libicui18n.so] icu_72::RegexPattern::zap()
[libicui18n.so] icu_75::RegexMatcher::~RegexMatcher()

完整崩溃日志如下:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 14966 >>> digit.android <<<
backtrace:
#00 pc 0x00000000002236fc /apex/com.android.i18n/lib64/libicui18n.so (icu_75::RegexPattern::zap()+36)
#01 pc 0x00000000002238a0 /apex/com.android.i18n/lib64/libicui18n.so (icu_75::RegexPattern::~RegexPattern()+20)
#02 pc 0x0000000000011f28 /apex/com.android.i18n/lib64/libicu_jni.so (PatternNative_free(void*)+28)
#03 pc 0x0000000000d52370 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (art_jni_trampoline+112)
#04 pc 0x00000000005757cc /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (libcore.util.NativeAllocationRegistry$CleanerThunk.run+60)
#05 pc 0x00000000004e0548 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (sun.misc.Cleaner.clean+88)
#06 pc 0x000000000037f310 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.lang.ref.ReferenceQueue.enqueuePending+448)
#07 pc 0x000000000055c650 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.lang.Daemons$ReferenceQueueDaemon.runInternal+704)
#08 pc 0x000000000055a764 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.lang.Daemons$Daemon.run+116)
#09 pc 0x000000000031d4f0 /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (java.lang.Thread.run+64)
#10 pc 0x000000000032d194 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612)
#11 pc 0x00000000002de270 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+216)
#12 pc 0x00000000004bfcf4 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+932)
#13 pc 0x00000000004bf940 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallbackWithUffdGc(void*)+8)
#14 pc 0x00000000000ab938 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+196)
#15 pc 0x000000000009da78 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68)

我们注意到有类似的崩溃案例讨论,但细节和我们的场景不完全匹配。

我们已经排查的内容

  • 崩溃几乎全部集中在三星设备(覆盖S21/S22/S23等系列),系统版本为Android 12~15;
  • 应用是纯React Native应用,没有直接编写原生代码,仅依赖标准安卓依赖;
  • 仅间接使用ICU相关功能:比如java.textjava.util.regex、日期/时间格式化、本地化等;
  • ProGuard/R8规则已经配置保留了安卓系统库依赖的ICU类,排除了混淆导致的问题。

初步分析与假设

我们初步判断崩溃起源于安卓系统自带的ICU(International Components for Unicode)库libicui18n.so,栈帧指向的RegexPatternRegexMatcher是安卓系统API(比如正则、日期格式化、ICU4J桥接)的底层依赖。目前我们的几个假设:

  • 可能和依赖的implementation 'org.webkit:android-jsc-intl:+'有关;
  • 特定正则表达式结合本地化操作触发了问题;
  • 三星定制的ICU版本导致:三星通常会自带修改/定制过的ICU库,和原生安卓版本有差异;
  • 三星厂商库存在内存损坏(memory corruption)或者引用计数bug。

求助问题

真心希望有经验的大佬能给点建议:

  • 有没有人遇到过libicui18n.so(icu_72/icu_75版本)的类似崩溃?
  • 有没有已知的临时解决方案(workaround)?比如避免特定正则特性、强制使用某个通用locale?
  • ProGuard/R8的优化会不会间接导致这个崩溃?
  • 有没有推荐的排查步骤,帮助我们区分这是系统ICU的bug还是应用使用方式的问题

应用环境信息

  • React Native版本:0.65.1
  • 安卓构建配置(android/build.gradle.kt):
    supportLibVersion = "1.0.0"
    kotlinVersion = "1.6.10"
    buildToolsVersion = "35.0.0"
    minSdkVersion = 26
    compileSdkVersion = 35
    targetSdkVersion = 35
    reactNativeVersion = "0.65.1"
    androidGradlePluginVersion = "8.1.1"
    
  • NDK过滤配置:
    ndk {
        abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64"
    }
    

万分感谢各位的帮忙!🙏

火山引擎 最新活动