android mupdf libmupdf.so runtime error “No implementation found for native openFile”-Collection of common programming errors

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.

  1. I too was able to build the mupdf library. I got it working on the emulator. I have an app. that uses the mupdf library to save jpg files to the sdcard.

    This works on the emulator as well as on a Android 2.2 device API level 8 (LG Optimus). However, when run on the Samsung Galaxy S (Android 2.1-update1 API level 7), I’m getting the error :

    ERROR/AndroidRuntime(8715): Caused by: java.lang.UnsatisfiedLinkError: Library mupdf not found
    

    I used the ndk: android-ndk-r5b

    Any ideas on what might be causing the error?!?!

  2. 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.

  3. 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.