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

Tess-two库在Android API 29及以上版本运行崩溃问题求助

Tess-two在API 29及以上系统版本闪退的核心原因

你遇到的SIGSEGV段错误是Tess-two底层原生代码未适配Android 10(API 29)系统变更导致的,相关系统变更点如下:

  • 原生内存安全策略收紧
    API 29大幅增强了地址空间随机化(ASLR)规则,同时对野指针访问、越界内存读写的容忍度大幅降低。Tess-two早已停止维护,最后一个正式版本的原生层代码存在未修复的内存访问漏洞,在API 28及更低版本的宽松内存规则下未触发崩溃,API 29及以上版本调用getUTF8Text()这类涉及原生层内存读写的接口时,漏洞直接触发段错误,就是你遇到的Logcat报错:

A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR)

  • 分区存储规则变更
    API 29默认开启分区存储,禁止应用直接访问公共存储目录的任意文件。如果你之前将Tess-two依赖的tessdata语言包存放在公共存储路径,Tess-two的原生层代码没有适配分区存储的权限逻辑,读取语言包时拿到无效的文件指针,后续读写操作直接触发非法内存访问崩溃。

  • NDK接口兼容性变更
    Tess-two 9.1.+版本编译时适配的最高NDK版本仅支持到API 28,底层调用了多个API 29开始废弃/移除的原生接口。这些接口在API 29及以上版本的调用行为发生变化,直接调用会触发内存分配、字符串处理逻辑的异常,最终导致段错误。

适配方案
  • 临时兼容:如果暂时无法替换Tess-two,可以将tessdata语言包全部存放到应用私有目录(通过context.getFilesDir()获取路径),避免原生层访问公共存储;同时将应用的targetSdkVersion降到28,在AndroidManifest.xml的application节点添加属性android:requestLegacyExternalStorage="true",临时关闭分区存储限制,该方案仅能兼容到API 29,API 30及以上版本已失效。
  • 长期方案:建议替换为仍在维护的OCR库,比如官方更新的tesseract-android-tools、谷歌ML Kit文本识别模块,这类库已经完成高版本Android系统适配,不会出现同类兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:24:02