Pau*_*aul 10 java-native-interface android native-methods libs android-ndk
我刚从mac上的mupdf.com编译mupdf.花了一些时间搞清楚,但现在我的libs/armeabi文件夹中有一个libmupdf.so.
他们提供了一个名为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;)I的实现
DEBUG/AndroidRuntime(27523):关闭VM
WARN/dalvikvm(27523):threadid = 1:线程退出,未捕获异常(组= 0x400ee760)
错误/ AndroidRuntime(27523):致命异常:主要
ERROR/AndroidRuntime(27523):java.lang.UnsatisfiedLinkError:openFile
据我所知库正在加载,在我弄清楚如何编译库之前,它一直在崩溃,并说"mupdf"是一个空链接.
他们的例子几乎说openFile是一个原生函数......就在我想到这个问题时,另一个问题就出现了.我整天都在努力.任何输入都会很棒!
这是一个糟糕的编译吗?我在终端没有收到任何错误.
gtu*_*edi 10
当您尝试在项目中使用示例项目的so文件时,它会抛出"UnsatisfiedLinkError:Native method not found"异常.原因是您的应用程序包名称与示例应用程序包名称("com.artifex.mupdf")不同,因为jni绑定系统.您可以通过以下方法解决此问题:
1)很长的路要走:根据你的包名更改mudef lib源代码,从中生成二进制文件(.so文件)然后在你的项目中使用它,比如@KuoCH说
2)简短的方法:在根源目录中创建"com.artifex.mupdf"包(在项目源文件夹旁边,"src/main/java"),将示例项目中的所有类复制到其中
小智 5
在文件mupdf.c L18-19中:
#define JNI_FN(A) Java_com_artifex_mupdfdemo_ ## A
#define PACKAGENAME "com/artifex/mupdfdemo"
Run Code Online (Sandbox Code Playgroud)
都更改为您的包名称。
小智 1
我认为您没有将mupdf.c中的函数名称更改为相应的java包名称,这意味着您应该将mupdf.c中的函数Java_com_artifex_mupdf_MuPDFCore_openFile更改为Java_com_myapp_android_viewer_openFile。
| 归档时间: |
|
| 查看次数: |
5150 次 |
| 最近记录: |