我刚刚在我的 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/