android mupdf libmupdf.so ошибка времени выполнения "Не найдена реализация для нативного openFile" - PullRequest
10 голосов
/ 11 марта 2011

Я только что закончил компиляцию mupdf с mupdf.com на моем Mac. Потребовалось некоторое время, чтобы понять это, но теперь у меня есть libmupdf.so в моей папке libs / armeabi.

Они предоставляют пример этого класса с именем 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

JNI_OnLoad не найден в /data/data/com.myapp.android/lib/libmupdf.so 0x4070e050, пропуск init

Реализация не найдена для нативного Lcom / MyApp / Android / зритель / MuPDFCore; .openFile (Ljava / языки / String;) I

DEBUG / AndroidRuntime (27523): закрытие вниз VM

WARN / dalvikvm (27523): threadid = 1: выход из потока с неперехваченным исключением (Группа = 0x400ee760)

ОШИБКА / AndroidRuntime (27523): ФАТАЛЬНО ИСКЛЮЧЕНИЕ: основной

ERROR / AndroidRuntime (27523): java.lang.UnsatisfiedLinkError: OpenFile

Насколько я знаю, библиотека загружается, прежде чем я понял, как скомпилировать библиотеку, она продолжала падать, и сказал, что "mupdf" - пустая ссылка.

Их пример в значительной степени говорит о том, что openFile является встроенной функцией ... Как раз тогда, когда я думал, что понял это, возникает другая проблема. Я работал над этим весь день. Любой вклад был бы великолепен!

Это плохая компиляция? Я не получил никаких ошибок в терминале.

Ответы [ 3 ]

10 голосов
/ 22 апреля 2014

, когда вы пытаетесь использовать его в своем проекте с примерами файлов проекта, выдается «UnsatisfiedLinkError: собственный метод не найден» исключение.Причина заключается в том, что имя пакета вашего приложения отличается от имени пакета примера приложения («com.artifex.mupdf») из-за системы привязки jni.Вы можете решить эту проблему с помощью следующих подходов:

1) долгий путь: измените исходный код mudef lib в соответствии с именем вашего пакета, сгенерируйте из него двоичные файлы (.so файлы) и используйте его в своем проекте, как сказал @KuoCH

2) краткий путь: создайте пакет «com.artifex.mupdf» в корневом каталоге исходных файлов (рядом с исходной папкой проекта, «src / main / java»), скопируйте все классы из примера проекта в него

4 голосов
/ 17 августа 2013

В файле mupdf.c L18-19:

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

Измените оба имени пакета.

1 голос
/ 12 августа 2011

Я думаю, что вы не изменили имена своих функций в mupdf.c на соответствующие имена пакетов java, это означает, что вы должны изменить функцию Java_com_artifex_mupdf_MuPDFCore_openFile в вашем mupdf.c на Java_com_myapp_android_viewer_openFile.

...