修复旧的Android版本的PDFium崩溃或包含自己的库

问题描述

我有一个使用标准PdfRenderer呈现PDF的Android应用。到目前为止,它的运行情况一直很好,我设法摆脱了该应用程序中的大多数错误。

我不知道如何消除的唯一错误是:

signal 11 (SIGSEGV),code 1 (SEGV_MAPERR),fault addr 0x7
#00  pc 00000000000be7e0  /system/lib/libpdfium.so (FPDF_CloseDocument+12)

它发生了多种变化(不仅是FPDF_CloseDocument),并且在日常会话中最多产生4%的崩溃。 在各种设备上,从5到8的Android版本会遇到此问题。

经过一些搜索后,发现PDFium库(基于PdfRenderer的库)在早期版本中存在一些错误。这就是为什么该问题没有出现在Android版本9和10上的原因。

所以我的实际任务是消除11个SIGSEGV崩溃

在这里,我有以下想法:

  1. 将最新版本的PDFium包含到我的应用中。目前,libpdfium.so已包含在Android操作系统中。我可以在我的应用程序中包含最终更正的库并使用它吗?在哪里可以找到libpdfium.so以及如何在应用程序中使用它?

  2. 使用备用PDF渲染器。我需要以所需的缩放和分辨率渲染PDF页面的一部分,并且我需要像MIT或Apache这样的宽松许可证。不需要开源我的项目。我找不到任何合适的方法,例如MuPDF需要将整个项目开源,PSPDFKit是完全专有的。

摆脱11次SIGSEGV崩溃的更好方法是什么?

解决方法

检查您的线程,并确保没有并发问题,根据文档,它不是线程安全的: https://developer.android.com/reference/android/graphics/pdf/PdfRenderer

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...