android mupdf libmupdf.so运行时错误“找不到原生openFile的实现”

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

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

我在我的项目中使用了这个类,它在LogCat中表示如下:

试图加载lib /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050

新增共享/data/data/com.myapp.android/lib/libmupdf.so 0x4070e050

在/data/data/com.myapp.android/lib/libmupdf.so 0x4070e050找不到JNI_OnLoad,跳过init

找不到原生Lcom / myapp / android / viewer / MuPDFCore; .openFile(Ljava / lang / String;)的实现

DEBUG / AndroidRuntime(27523):closures虚拟机

WARN / dalvikvm(27523):threadid = 1:线程退出与未捕获的exception(组= 0x400ee760)

错误/ AndroidRuntime(27523):致命的例外:主

错误/ AndroidRuntime(27523):java.lang.UnsatisfiedLinkError:openFile

据我所知,图书馆正在加载,之前我想出了如何编译库,它不断崩溃,并说“mupdf”是一个空链接。

他们的例子非常多,说openFile是一个本地函数…就在我想到这一点的时候,popup了另一个问题。 我一整天都在努力。 任何input将是伟大的!

这是一个不好的编译? 我在terminal没有得到任何错误。

Solutions Collecting From Web of "android mupdf libmupdf.so运行时错误“找不到原生openFile的实现”"

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

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

2)简单的方法:在你的根源目录下(在项目源文件夹“src / main / java”旁边)创build“com.artifex.mupdf”包,将所有类从样本项目复制到它

在文件mupdf.c L18-19:

#define JNI_FN(A) Java_com_artifex_mupdfdemo_ ## A #define PACKAGENAME "com/artifex/mupdfdemo" 

更改为您的软件包名称。

我想你并没有将mupdf.c中的函数名称更改为相应的java包名称,也就是说,应该将mupdf.c中的函数Java_com_artifex_mupdf_MuPDFCore_openFile更改为Java_com_myapp_android_viewer_openFile。