10

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: キャッチされない例外で終了するスレッド (group=0x400ee760)

エラー/AndroidRuntime(27523): 致命的な例外: メイン

エラー/AndroidRuntime(27523): java.lang.UnsatisfiedLinkError: openFile

ライブラリがロードされていることを知る限り、ライブラリをコンパイルする方法を理解する前に、ライブラリがクラッシュし続け、「mupdf」がヌルリンクであると言いました。

彼らの例は、openFile がネイティブ関数であることをほとんど示しています...これを理解したと思ったとき、別の問題が発生しました。私は一日中それに取り組んできました。どんな入力でも素晴らしいでしょう!

悪いコンパイルですか?ターミナルでエラーは発生しませんでした。

4

3 に答える 3

10

サンプル プロジェクトの so ファイルを含むプロジェクトで使用しようとすると、「UnsatisfiedLinkError: Native method not found」という例外がスローされます。原因は、jni バインディング システムのために、サンプル アプリのパッケージ名 ("com.artifex.mupdf") とアプリのパッケージ名が異なることです。以下のアプローチでこの問題を解決できます。

1)長い道のり:パッケージ名に従ってmudef libソースコードを変更し、そこからバイナリ(.soファイル)を生成してから、@KuoCHが言ったようにプロジェクトで使用します

2) 簡単な方法: ルート ソース ディレクトリ (プロジェクト ソース フォルダー、"src/main/java" の横) に "com.artifex.mupdf" パッケージを作成し、サンプル プロジェクトのすべてのクラスをその中にコピーします。

于 2014-04-22T08:09:06.990 に答える
5

ファイル mupdf.c L18-19:

#define JNI_FN(A) Java_com_artifex_mupdfdemo_ ## A 
#define PACKAGENAME "com/artifex/mupdfdemo"

両方をパッケージ名に変更します。

于 2013-08-17T15:52:41.023 に答える
1

mupdf.cの関数名を対応するJavaパッケージ名に変更しなかったと思います。つまり、mupdf.cの関数Java_com_artifex_mupdf_MuPDFCore_openFileをJava_com_myapp_android_viewer_openFileに変更する必要があります。

于 2011-08-12T05:34:24.993 に答える