开发者

android mupdf libmupdf.so runtime error "No implementation found for native openFile"

开发者 https://www.devze.com 2023-02-16 15:48 出处:网络
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.

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.


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


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.


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号