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

Repair PDFium crashes for old Android versions or include own library

我有一个 Android 应用程序,它使用标准 PdfRenderer 来呈现 PDF。它到目前为止运行良好,我设法消除了应用程序中的大部分错误。

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

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 OS 中。我可以将最终更正后的库包含到我的应用程序中并使用它吗?在哪里可以找到 libpdfium.so 以及如何在应用程序中使用它?

  2. 使用替代的 PDF 渲染器。 我需要以所需的缩放和分辨率渲染 PDF 页面的一部分,并且我需要一个非常宽松的许可,例如MIT 或 Apache,所以我不需要开源我的项目。我没有找到任何合适的,例如MuPDF requires to open source the whole your project, PSPDFKit 完全专有。

什么方法可以更好地摆脱 11 次 SIGSEGV 崩溃?

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