所以我基于pdf阅读器(MuPDF)构建了这个项目。我为此使用了 ndk-build 。该项目的名称是 ChoosePDFActivity。我知道它已正确构建,因为我可以在我的内部看到一个 .so 文件libs/armrabi-v7a/THISISTHEFILE.so。
我的问题是,如何正确地使该项目成为库项目并从另一个项目运行它?
我尝试将其标记为库项目并将其添加到我的主项目的构建路径中,但我得到
请注意,我使用的是Mupdf-1.5(目前最新的)
ExpressionInitializerError,无法加载库,FindLibrary
返回 NULL 错误
那我该怎么办?
我的图书馆的名称是 libmupdf。
注意,我是 android-ndk 的新手。我的主项目中没有任何 jni 文件夹,仅在库项目中。
这是完整的错误。
06-16 17:51:27.680: E/AndroidRuntime(5673): 致命异常: main
06-16 17:51:27.680: E/AndroidRuntime(5673):
java.lang.ExceptionInInitializerError 06-16 17:51:27.680:
E/AndroidRuntime(5673): 在 java.lang.Class.newInstanceImpl(Native
方法)06-16 17:51:27.680: E/AndroidRuntime(5673): 在
java.lang.Class.newInstance(Class.java:1319) 06-16 17:51:27.680:
E/Android运行时(5673):位于
android.app.Instrumentation.newActivity(Instrumentation.java:1025)
06-16 17:51:27.680: E/AndroidRuntime(5673): 在
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1871)
06-16 17:51:27.680: E/AndroidRuntime(5673): 在
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
06-16 17:51:27.680: E/AndroidRuntime(5673): 在
android.app.ActivityThread.access$600(ActivityThread.java:123) 06-16
17:51:27.680: E/AndroidRuntime(5673): 在
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
06-16 17:51:27.680: E/AndroidRuntime(5673): 在
android.os.Handler.dispatchMessage(Handler.java:99) 06-16
17:51:27.680: E/AndroidRuntime(5673): 在
android.os.Looper.loop(Looper.java:137) 06-16 17:51:27.680:
E/Android运行时(5673):位于
android.app.ActivityThread.main(ActivityThread.java:4424) 06-16
17:51:27.680: E/AndroidRuntime(5673): 在
java.lang.reflect.Method.invokeNative(原生方法) 06-16
17:51:27.680: E/AndroidRuntime(5673): 在
java.lang.reflect.Method.invoke(Method.java:511) 06-16 17:51:27.680:
E/Android运行时(5673):位于
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
06-16 17:51:27.680: E/AndroidRuntime(5673): 在
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592) 06-16
17:51:27.680: E/AndroidRuntime(5673): 在
dalvik.system.NativeStart.main(本机方法) 06-16 17:51:27.680:
E/AndroidRuntime(5673):由以下原因引起:java.lang.UnsatisfiedLinkError:
无法加载 libmupdf:findLibrary 返回 null 06-16 17:51:27.680:
E/Android运行时(5673):位于
java.lang.Runtime.loadLibrary(Runtime.java:365) 06-16 17:51:27.680:
E/Android运行时(5673):位于
java.lang.System.loadLibrary(System.java:535) 06-16 17:51:27.680:
E/Android运行时(5673):位于
com.mainpackage.MainActivity。(MainActivity.java:44)
请帮助我,这几天我都快要死了。提前致谢。
这是我的 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)
Here is a snapshot of my projects.There are two highlighted projects, they are the ones being talked about, with ChoosePDFActivity being the library project.
,
Okay, just something like this is going to work for my case:
Is it possible to have a Whole project inside my final build?I just need to pass ONE intent to it from my main project, and everything else is going to be handled by the ChoosePdf... project.
P.S.我注意到只有一个armeabi-v7a。那么,有没有办法为其他架构构建 mupdf
编辑
对于那些想要在 Android 中进行 PDF 渲染的人来说,Android L(终于)获得了 api,使原生 pdf 渲染成为可能。