我正在尝试分叉 AndroidPdfViewer 以将其底层库从 PdfiumAndroid 替换为 android-pdfium。
我的问题是,当我在 Android Studio 中加载 AndroidPdfViewer 和 PdfiumAndroid 时,即使在更改任何内容之前,我也无法使项目正常工作。
问题是 PdfiumAndroid 有 JNI 代码定义了许多先前声明的函数,但链接器无法将 C++ 中的定义链接到 Java 中的声明。错误信息有两个错误:
E/barteksc.sample: No implementation found for long com.shockwave.pdfium.PdfiumCore.nativeOpenDocument(int, java.lang.String) (tried Java_com_shockwave_pdfium_PdfiumCore_nativeOpenDocument and Java_com_shockwave_pdfium_PdfiumCore_nativeOpenDocument__ILjava_lang_String_2)
E/PDFView: load pdf error
java.lang.UnsatisfiedLinkError: No implementation found for long com.shockwave.pdfium.PdfiumCore.nativeOpenDocument(int, java.lang.String) (tried Java_com_shockwave_pdfium_PdfiumCore_nativeOpenDocument and Java_com_shockwave_pdfium_PdfiumCore_nativeOpenDocument__ILjava_lang_String_2)
at com.shockwave.pdfium.PdfiumCore.nativeOpenDocument(Native Method)
at com.shockwave.pdfium.PdfiumCore.newDocument(PdfiumCore.java:135)
这里是gradle文件。虽然这些是未修改之前的原始文件,但看起来好像缺少了一些东西。
我尝试将其添加到 proguard-rules.pro
-keep class com.shockwave.** { *; }
它删除了第一个错误,但第二个错误仍然存在。
解决了。
如果有人遇到同样的问题,我做了以下操作来解决它:
这创造了我在问题中所说的内容
好像少了点什么
创建了一个 libs 文件夹,其中包含链接器所需的定义。
您能更具体地解释一下您的步骤吗?在步骤2中,您说修改Application.mk,但在我的项目中,我没有jni文件夹,也没有Application.mk。我怎样才能创建它们? jni文件夹中包含什么? 非常感谢!