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

修复旧Android版本的PDFium崩溃或包含自己的库,android,pdfrenderer,android-native-library,pdfium,pdf-rendering,Android,Pdfrenderer,Android Native Library,Pdfium,Pdf Rendering,我有一个Android应用程序,它使用标准来呈现PDF。到目前为止,它工作得很好,我设法消除了应用程序中的大部分错误 我不知道如何摆脱的唯一错误是: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7 #00 pc 00000000000be7e0 /system/lib/libpdfium.so (FPDF_CloseDocument+12) 它以多种形式发生(不仅仅是FPDF_CloseDocument),每天会话中会产生

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

我不知道如何摆脱的唯一错误是:

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x7
#00  pc 00000000000be7e0  /system/lib/libpdfium.so (FPDF_CloseDocument+12)
它以多种形式发生(不仅仅是FPDF_CloseDocument),每天会话中会产生多达4%的崩溃。 这个问题在各种设备上的Android版本(从5到8)中都会遇到

经过一番搜索,该库(基于)在早期版本中似乎存在一些bug。这就是为什么Android版本9和10没有出现问题的原因

因此,我的实际任务是消除11起SIGSEGV崩溃

在这里,我有以下想法:

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

  • 使用另一种PDF渲染器。我需要以所需的缩放和分辨率渲染PDF页面的一部分,并且我需要一个非常宽松的许可证,如MIT或Apache,因此我不需要打开项目的源代码。我没有发现任何合适的,例如,需要开源的整个项目,是完全专有的


  • 什么方法可以更好地消除11个SIGSEGV崩溃?

    检查线程并确保没有并发问题,根据文档,这不是线程安全的:

    您是否在Android 4.1上编译您的项目?我开始在使用最新工具构建的应用程序上观察这个问题。我使用安卓Studio 4.2金丝雀。我倾向于认为这是Android操作系统版本的设备。不幸的是,我无法在自己的环境中可靠地再现这个问题,只能在Google Play崩溃中看到它。所以我不能很好地研究这个问题,这是一个很好的观点。实际上,PdfRenderer是在几个活动中创建的,用于不同的目的:显示页面或缩略图等。因此,在每个活动中创建打开关闭是同步的,但不是在活动之间。我将在应用程序级别为创建一个静态变量/类,并从不同的活动中调用其open-close。你认为这种方法怎么样?真正的实际测试将需要一些时间。当我与渲染器的锁使用同步时,崩溃会少很多。在~3K设备上进行了一周的beta测试后,这种类型的错误几乎消失了!这是正确的解决方案!非常感谢。