I just finished compiling mupdf from mupdf.com on my mac. Took some time to figure it out but now I have a libmupdf.so in my libs/armeabi folder.
They provide an example of this class called MuPDFCore.java which is viewable here: http://mupdf.com/repos/mupdf/android/src/com/artifex/mupdf/MuPDFCore.java
I used this class in my project and it says the following in 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
As far as I know the library is loading, before I figured out how to compile the library it kept crashing and saying the "mupdf" is a null link.
Their example pretty much says that openFile is a native function ... Just when I thought I figured this out another problem pops up. Ive been working on it all day. Any input would be great!
Is it a bad compile? I didn't get any errors in the terminal.
At file mupdf.c L18-19:
#define JNI_FN(A) Java_com_artifex_mupdfdemo_ ## A
#define PACKAGENAME "com/artifex/mupdfdemo"
Change both to your package name.
when you try to use it on your project with sample project's so files, it will throw "UnsatisfiedLinkError: Native method not found" exception. The cause is your app package name different from sample app package name("com.artifex.mupdf") because of jni binding system. You can solve this problem with below approaches:
1) long way: change mudef lib source code according to your package name, generate binaries(.so files) from it then use it in your project like @KuoCH said
2) short way: create "com.artifex.mupdf" package in your root source directory(beside project source folder, "src/main/java"), copy all classes from sample project to in it
I think you didn't change the your function names in mupdf.c to your corresponding java package name, that means, you should change the function Java_com_artifex_mupdf_MuPDFCore_openFile in your mupdf.c to Java_com_myapp_android_viewer_openFile.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With