Android:尝试编译本机代码,收到 UnsatisfiedLinkError:未找到实现

问题描述 投票:0回答:2

我正在尝试分叉 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.** { *; }

它删除了第一个错误,但第二个错误仍然存在。

java android android-studio java-native-interface androidpdfviewer
2个回答
0
投票

解决了。

如果有人遇到同样的问题,我做了以下操作来解决它:

  • 安装了android-ndk工具
  • 编辑了 Application.mk 文件以删除 mips 和 mips64,因为它们不再受支持,并将 Android 版本更新到 19,因为它是目前的最低版本。
  • 在jni文件夹/目录下运行ndk-build。

这创造了我在问题中所说的内容

好像少了点什么

创建了一个 libs 文件夹,其中包含链接器所需的定义。


0
投票

您能更具体地解释一下您的步骤吗?在步骤2中,您说修改Application.mk,但在我的项目中,我没有jni文件夹,也没有Application.mk。我怎样才能创建它们? jni文件夹中包含什么? 非常感谢!

© www.soinside.com 2019 - 2024. All rights reserved.