android mupdf libmupdf.so 运行时错误 "No implementation found for native openFile"

标签 android java-native-interface android-ndk native-methods libs

我刚刚在我的 Mac 上从 mupdf.com 编译完 mupdf。花了一些时间来弄清楚,但现在我的 libs/armeabi 文件夹中有一个 libmupdf.so。

他们提供了一个名为 MuPDFCore.java 的此类示例,可在此处查看: http://mupdf.com/repos/mupdf/android/src/com/artifex/mupdf/MuPDFCore.java

我在我的项目中使用了这个类,它在 LogCat 中说了以下内容:

Trying to load lib /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050

Added shared lib /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050

No JNI_OnLoad found in /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050, skipping init

No implementation found for native Lcom/myapp/android/viewer/MuPDFCore;.openFile (Ljava/lang/String;)I

DEBUG/AndroidRuntime(27523): Shutting down VM

WARN/dalvikvm(27523): threadid=1: thread exiting with uncaught exception (group=0x400ee760)

ERROR/AndroidRuntime(27523): FATAL EXCEPTION: main

ERROR/AndroidRuntime(27523): java.lang.UnsatisfiedLinkError: openFile

据我所知库正在加载,在我弄清楚如何编译库之前它一直崩溃并说“mupdf”是一个空链接。

他们的示例几乎说明 openFile 是一个 native 函数......就在我认为我想通了这个的时候,另一个问题突然出现了。我整天都在研究它。任何输入都会很棒!

编译不好吗?我没有在终端中收到任何错误。

最佳答案

当您尝试在您的项目中使用示例项目的 so 文件时,它会抛出 "UnsatisfiedLinkError: Native method not found" 异常。原因是由于 jni 绑定(bind)系统,您的应用程序包名称与示例应用程序包名称(“com.artifex.mupdf”)不同。您可以使用以下方法解决此问题:

1) 很长的路要走:根据你的包名更改 mudef lib 源代码,从中生成二进制文件(.so 文件)然后在你的项目中使用它,就像@KuoCH 所说的

2) 快捷方式:在你的根源目录中创建“com.artifex.mupdf”包(在项目源文件夹“src/main/java”旁边),将示例项目中的所有类复制到其中

关于android mupdf libmupdf.so 运行时错误 "No implementation found for native openFile",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5265975/

相关文章:

android - Android服务的良好示例应用程序

android - 准备自定义 radio 组类型的布局

java - 模拟一个类已加载 native 库

android - 如何在 Windows 中设置 NDK 环境变量?

c++ - 实现观察者模式 C++

android - fragment 选项卡中的 fragment

java - 将第一个 Activity 置于返回堆栈顶部

android - 启用混淆器后出现致命信号 11 (SIGSEGV)

android - Android OpenCV 中传出字节 [] 需要 cv::imencode 吗?

opencv - android ndk中如何同时处理8UC​​3和8UC4