Vì vậy, tôi đã xây dựng dự án này dựa trên trình đọc pdf (MuPDF). Tôi đã sử dụng ndk-build cho điều đó. Tên của dự án này là ChoosePDFActivity. Tôi biết rằng nó đã được xây dựng một cách chính xác vì tôi có thể thấy một tệp .so bên trong số libs/armrabi-v7a/THISISTHEFILE.so của tôi. Câu hỏi của tôi là, làm thế nào để tôi thực hiện đúng dự án này một dự án thư viện và chạy nó từ một dự án khác?Tích hợp MuPDF làm dự án thư viện (Android)
Tôi đã cố gắng đánh dấu nó như là một dự án thư viện và thêm nó vào con đường xây dựng dự án chính của tôi, nhưng tôi nhận
Lưu ý rằng tôi đang sử dụng Mupdf-1.5 (mới nhất hiện nay một)
ExpressionInitializerError , could not load library , FindLibrary Returned NUll errors
vì vậy tôi phải làm gì?
tên thư viện của tôi là libmupdf. Lưu ý, tôi mới sử dụng android-ndk. Tôi không có bất kỳ thư mục jni nào trong dự án chính của tôi, chỉ trong dự án thư viện. Đây là lỗi đầy đủ.
06-16 17:51:27.680: E/AndroidRuntime(5673): FATAL EXCEPTION: main 06-16 17:51:27.680: E/AndroidRuntime(5673): java.lang.ExceptionInInitializerError 06-16 17:51:27.680: E/AndroidRuntime(5673): at java.lang.Class.newInstanceImpl(Native Method) 06-16 17:51:27.680: E/AndroidRuntime(5673): at java.lang.Class.newInstance(Class.java:1319) 06-16 17:51:27.680: E/AndroidRuntime(5673): at android.app.Instrumentation.newActivity(Instrumentation.java:1025) 06-16 17:51:27.680: E/AndroidRuntime(5673): at 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): at android.app.ActivityThread.access$600(ActivityThread.java:123) 06-16 17:51:27.680: E/AndroidRuntime(5673): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 06-16 17:51:27.680: E/AndroidRuntime(5673): at android.os.Handler.dispatchMessage(Handler.java:99) 06-16 17:51:27.680: E/AndroidRuntime(5673): at android.os.Looper.loop(Looper.java:137) 06-16 17:51:27.680: E/AndroidRuntime(5673): at android.app.ActivityThread.main(ActivityThread.java:4424) 06-16 17:51:27.680: E/AndroidRuntime(5673): at java.lang.reflect.Method.invokeNative(Native Method) 06-16 17:51:27.680: E/AndroidRuntime(5673): at java.lang.reflect.Method.invoke(Method.java:511) 06-16 17:51:27.680: E/AndroidRuntime(5673): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825) 06-16 17:51:27.680: E/AndroidRuntime(5673): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:592) 06-16 17:51:27.680: E/AndroidRuntime(5673): at dalvik.system.NativeStart.main(Native Method) 06-16 17:51:27.680: E/AndroidRuntime(5673): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libmupdf: findLibrary returned null 06-16 17:51:27.680: E/AndroidRuntime(5673): at java.lang.Runtime.loadLibrary(Runtime.java:365) 06-16 17:51:27.680: E/AndroidRuntime(5673): at java.lang.System.loadLibrary(System.java:535) 06-16 17:51:27.680: E/AndroidRuntime(5673): at com.mainpackage.MainActivity.(MainActivity.java:44)
Xin hãy giúp tôi, nó sẽ giết tôi trong vài ngày. Cảm ơn trước.
đây là Android.mk tôi:
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)
Đây là một bản chụp của projects.There của tôi là hai nhấn mạnh các dự án, họ là những người đang được nói đến, với ChoosePDFActivity là dự án thư viện. , Được rồi, chỉ cần một cái gì đó như thế này sẽ làm việc cho trường hợp của tôi: Có thể có một dự án toàn bộ bên trong xây dựng cuối cùng của tôi? Tôi chỉ cần vượt qua MỘT ý định cho nó từ dự án chính của tôi, và mọi thứ khác sẽ được xử lý bởi dự án ChoosePdf ....
P.S. Tôi nhận thấy rằng chỉ có armeabi-v7a. Vì vậy, có cách nào để xây dựng mupdf cho các kiến trúc khác cũng như
EDIT Đối với những người muốn có bản dựng PDF trong Android, Android L (cuối cùng) cũng có thể thực hiện hiển thị bản pdf.
Đó là, trừ khi bạn chỉ muốn sử dụng thư viện động của bạn như vậy. Nếu đúng như vậy, chỉ cần sao chép nó vào/lib/armeabi-v7a/và nó sẽ được đưa vào. Sau đó bạn có thể gọi System.loadLibrary ("THISISTHEFILE"); –
JonnyBoy
đã làm như vậy và gặp lỗi này: [2014-06-17 09:13:59 - Marks ++] Lỗi khi tạo lưu trữ cuối cùng: Đã tìm thấy tệp trùng lặp cho APK: lib/armeabi-v7a/libmupdf.so Xuất xứ 1: C : \ Users \ Harsh \ git \ marks \ Marks ++ \ libs \ armeabi-v7a \ libmupdf.so Xuất xứ 2: C: \ muPDFLIB \ mupdf-1.5-source \ platform \ android \ libs \ armeabi-v7a \ libmupdf.so –
vui lòng đăng tệp Android.mk của bạn. – JonnyBoy