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
- Proyecto Android de Eclipse pierde referencia al proyecto de biblioteca - ViewPagerIndicator
- Reduzca el tamaño de APK de depuración en IntelliJ
- PhoneGap Android: ¿Cómo forzar a la aplicación a utilizar iconos de asset \ www \ res en lugar res \ drawable carpeta?
- Eclipse con main.xml de diseño de Android?
- Error de instalación: INSTALL_FAILED_UID_CHANGED Teléfono Android no enraizado
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. , 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.
- Corregir errores de Eclipse al utilizar Android NDK y std :: vector
- ¿La manera más rápida de duplicar un proyecto androide?
- Prácticas recomendadas de Eclipse Workspace
- Android Lint: ¿Cómo suprimir todas las advertencias asociadas con la biblioteca de soporte?
- Se ha producido un error al inflar la clase android.support.design.widget.TabLayout
- Renombrar solo el nombre de la APP en Android IDE Eclipse
- ¿Existe alguna herramienta / plugin que monitorea el uso de la memoria de la aplicación durante la depuración / ejecución
- 'R no se puede resolver en una variable' - la carpeta gen está vacía
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
- Recyclerview onBindViewHolder llamó para todos los elementos cuando dentro LinearLayout con pesos
- Uso de Youtube Intentar iniciar un video desde un punto de inicio definido