Integrar MuPDF como un proyecto de biblioteca (Android)

Así que he construido este proyecto basado en un lector de pdf (MuPDF). Utilicé ndk-build para eso. El nombre de este proyecto es ChoosePDFActivity. Sé que se ha construido correctamente porque puedo ver un archivo .so dentro de mis libs / armrabi-v7a / THISISTHEFILE.so . Mi pregunta es, ¿Cómo hago correctamente este proyecto un proyecto de biblioteca y ejecutarlo desde otro proyecto?

Traté de marcarlo como un proyecto de biblioteca y añadirlo a la ruta de construcción de mi proyecto principal, pero me

Tenga en cuenta que estoy usando Mupdf-1.5 (la última actualmente)

ExpressionInitializerError, no se pudo cargar la biblioteca, FindLibrary Devuelto NUll errors

entonces qué hago ?

El nombre de mi biblioteca es libmupdf. Tenga en cuenta que soy nuevo en android-ndk. No tengo ninguna carpeta jni en mi proyecto principal, solo en el proyecto de la biblioteca. Este es el error completo.

06-16 17: 51: 27.680: E / AndroidRuntime (5673): EJECUCIÓN FATAL: 06-16 17: 51: 27.680: E / AndroidRuntime (5673): java.lang.ExceptionInInitializerError 06-16 17: E / AndroidRuntime (5673): en java.lang.Class.newInstanceImpl (método nativo) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en java.lang.Class.newInstance (Class.java:1319) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en android.app.Instrumentation.newActivity (Instrumentation.java:1025) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en android. App.ActivityThread.performLaunchActivity (ActivityThread.java:1871) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:1981) 06-16 17:51: 27.680: E / AndroidRuntime (5673): en android.app.ActivityThread.access $ 600 (ActivityThread.java:123) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en android.app.ActivityThread $ H. HandleMessage (ActivityThread.java:1147) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en android.os.Handler.dispatchMessage (H Andler.java:99) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en android.os.Looper.loop (Looper.java:137) 06-16 17: 51: 27.680: E / AndroidRuntime 5673): en android.app.ActivityThread.main (ActivityThread.java:4424) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en java.lang.reflect.Method.invokeNative (Método nativo) 06- 16 17: 51: 27.680: E / AndroidRuntime (5673): en java.lang.reflect.Method.invoke (Method.java:511) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en com. Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:825) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en com.android.internal.os.ZygoteInit.main (ZygoteInit.java : 592) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en dalvik.system.NativeStart.main (Método nativo) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): Causado por: Java.lang.UnsatisfiedLinkError: No se pudo cargar libmupdf: findLibrary devolvió null 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en java.lang.Runtime.loadLibrary (Runtime.java:365) 06-16 17 : 51: 27.680: E / AndroidRuntime (5673): en java.lang.System.loadLibrary (System.java:535) 06-16 17: 51: 27.680: E / AndroidRuntime (5673): en com.mainpackage.MainActivity. (MainActivity.java:44)

Por favor, ayúdame, me está matando por un par de días. Gracias por adelantado.

Este es mi Android.mk:

LOCAL_PATH := $(call my-dir) TOP_LOCAL_PATH := $(LOCAL_PATH) MUPDF_ROOT := ../.. ifdef NDK_PROFILER include android-ndk-profiler.mk endif include $(TOP_LOCAL_PATH)/Core.mk include $(TOP_LOCAL_PATH)/ThirdParty.mk include $(CLEAR_VARS) LOCAL_C_INCLUDES := \ jni/andprof \ $(MUPDF_ROOT)/include \ $(MUPDF_ROOT)/source/fitz \ $(MUPDF_ROOT)/source/pdf LOCAL_CFLAGS := LOCAL_MODULE := mupdf LOCAL_SRC_FILES := mupdf.c LOCAL_STATIC_LIBRARIES := mupdfcore mupdfthirdparty ifdef NDK_PROFILER LOCAL_CFLAGS += -pg -DNDK_PROFILER LOCAL_STATIC_LIBRARIES += andprof else endif LOCAL_LDLIBS := -lm -llog -ljnigraphics ifdef SSL_BUILD LOCAL_LDLIBS += -L$(MUPDF_ROOT)/thirdparty/openssl/android -lcrypto -lssl endif include $(BUILD_SHARED_LIBRARY) 

Aquí hay una instantánea de mis proyectos. Hay dos proyectos resaltados, son los que se están hablando, con ChoosePDFActivity siendo el proyecto de la biblioteca. Introduzca aquí la descripción de la imagen , Okay, algo como esto va a funcionar para mi caso: ¿Es posible tener un proyecto completo dentro de mi compilación final? Sólo necesito pasar UNA intención de hacerlo desde mi proyecto principal, y todo lo demás va a ser manejado Por el proyecto ChoosePdf ….

PS He notado que sólo hay un armeabi-v7a. Por lo tanto, ¿hay alguna manera de construir mupdf para otras arquitecturas así

EDIT Para aquellos que quieren tener la representación de PDF en android, Android L ha (finalmente) obtuvo el apis para hacer la representación nativa de pdf posible.

Sólo tienes que crear una biblioteca dinámica ficticia que simplemente enlaza con tu biblioteca estática de la siguiente manera:

https://stackoverflow.com/a/2957386/892714

El sistema de compilación ndk (por desgracia) no creará una biblioteca estática sin que sea utilizada por una biblioteca dinámica. Entonces usted simplemente toma su biblioteca estática de obj / local / armeabi-v7a.

Realmente no necesita ninguna magia NDK porque si su proyecto no tiene una carpeta jni/ , y si coloca las librerías en las libs/ , estarán allí. (Por si acaso, póngalos bajo control de versión; de forma predeterminada, por lo general se ignora.)

La línea más importante en su registro es:

 Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libmupdf 

Si su proyecto utiliza dos bibliotecas, debe cargar ambas, en el orden en que se resolverían las dependencias.

 static { System.loadLibrary("tools"); // libtools.so System.loadLibrary("main"); // libmain.so } 

Según tengo entendido, no tienes problemas con los enlazadores, pero en caso de que publique estos enlaces:
Re: Cómo construir una biblioteca compartida y llamarla en otro programa ndk
Android NDK: crea dos bibliotecas compartidas nativas que se llaman
Android NDK: Enlace mediante una biblioteca estática precompilada

  • JAudioTagger Android - No se pudo encontrar la clase 'sun.nio.ch.DirectBuffer'
  • 'No se pudo encontrar el elemento requerido' al instalar el complemento de ADT
  • No se detectaron restricciones de gramática (DTD o esquema XML) para el documento (Android)
  • Tengo suficiente memoria pero estoy recibiendo el error INSTALL_FAILED_INSUFFICIENT_STORAGE
  • Eclipse Export Signed Package agrega el directorio drawables dos veces, duplicando el tamaño de apk!
  • Advertencia de la depreciación del visor de jerarquía
  • Uso de CardView en Android 5.0 en Eclipse
  • La exportación de APK desde eclipse (ADT) se bloquea de forma silenciosa
  • Ver android logcat sin eclipse
  • android: No se puede ejecutar el programa CreateProcess error = 5, se deniega el acceso
  • Countdowntimer en minutos y segundos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.