簡體   English   中英

如何在Android中使用mupdf庫

[英]How to use mupdf library in Android

我已按照以下步驟從源代碼構建了mupdf :http://www.mupdf.com/docs/how-to-build-mupdf-for-android 我已經將其集成到我的應用程序中,並且工作正常。

但是,我遇到了一些問題,希望得到任何人的幫助,我將不勝感激

第1期

對APK簽名后,當我嘗試打開任何pdf時,應用程序崩潰。 我的猜測是在此過程中省略了一些類。 我用谷歌搜索, 是我得到的最接近的答案,但是它對我沒有用。 這就是我的proguard-rules.pro文件的樣子

-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontoptimize
-dontpreverify


-dontwarn com.squareup.picasso.**
-dontwarn com.android.volley.**
-dontwarn com.nhaarman.listviewanimations.**
-dontwarn android.support.**


-keep class com.artifex.mupdfdemo.** { *; }
-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class android.support.v7.app.** { *; }
-keep interface android.support.v7.app.** { *; }

第2期

第二個問題是最終已簽名APK的大小。 包含庫后,大小從3.2MB移至10.7MB。 我從IRC #ghostscript渠道尋求建議,但該解決方案未能解決我的問題,可能是我在實施過程中錯過了一些東西。 建議我添加此

LOCAL_CFLAGS + = -DNOCJK

在Core.mk中。 從.so中排除字體。 這就是我最終的Core.mk的樣子

LOCAL_PATH := $(call my-dir)

ifdef SUPPORT_GPROOF
include $(CLEAR_VARS)
LOCAL_MODULE    := gsso
LOCAL_SRC_FILES := libgs.so
include $(PREBUILT_SHARED_LIBRARY)
endif

include $(CLEAR_VARS)

MY_ROOT := ../..

ifeq ($(TARGET_ARCH),arm)
LOCAL_CFLAGS += -DARCH_ARM -DARCH_THUMB -DARCH_ARM_CAN_LOAD_UNALIGNED
ifdef NDK_PROFILER
LOCAL_CFLAGS += -pg -DNDK_PROFILER
endif
endif
ifdef SUPPORT_GPROOF
LOCAL_CFLAGS += -DSUPPORT_GPROOF
endif
LOCAL_CFLAGS += -DAA_BITS=8
ifdef MEMENTO
LOCAL_CFLAGS += -DMEMENTO -DMEMENTO_LEAKONLY
endif
ifdef SSL_BUILD
LOCAL_CFLAGS += -DHAVE_OPENSSL
LOCAL_CFLAGS += -DNOCJK
endif

LOCAL_C_INCLUDES := \
    ../../thirdparty/jbig2dec \
    ../../thirdparty/openjpeg/libopenjpeg \
    ../../thirdparty/jpeg \
    ../../thirdparty/mujs \
    ../../thirdparty/zlib \
    ../../thirdparty/freetype/include \
    ../../source/fitz \
    ../../source/pdf \
    ../../source/xps \
    ../../source/cbz \
    ../../source/img \
    ../../source/tiff \
    ../../scripts/freetype \
    ../../scripts/jpeg \
    ../../scripts/openjpeg \
    ../../generated \
    ../../resources \
    ../../include \
    ../..
ifdef V8_BUILD
LOCAL_C_INCLUDES += ../../thirdparty/$(V8)/include
endif
ifdef SSL_BUILD
LOCAL_C_INCLUDES += ../../thirdparty/openssl/include
endif

LOCAL_MODULE    := mupdfcore
LOCAL_SRC_FILES := \
    $(wildcard $(MY_ROOT)/source/fitz/*.c) \
    $(wildcard $(MY_ROOT)/source/pdf/*.c) \
    $(wildcard $(MY_ROOT)/source/xps/*.c) \
    $(wildcard $(MY_ROOT)/source/cbz/*.c) \
    $(wildcard $(MY_ROOT)/source/gprf/*.c) \
    $(wildcard $(MY_ROOT)/source/html/*.c)
LOCAL_SRC_FILES += \
    $(MY_ROOT)/source/pdf/js/pdf-js.c \
    $(MY_ROOT)/source/pdf/js/pdf-jsimp-mu.c

ifdef SUPPORT_GPROOF
LOCAL_SHARED_LIBRARIES := gsso
endif
LOCAL_LDLIBS    := -lm -llog -ljnigraphics

LOCAL_SRC_FILES := $(addprefix ../, $(LOCAL_SRC_FILES))

include $(BUILD_STATIC_LIBRARY)

任何幫助或指導將不勝感激。

謝謝

因此,在花了一些時間解決我的兩個問題之后,我終於解決了它們:

第1期

問題實際上與mupdf無關,這是我的PdfViewActivity.java中onCreateOptionsMenu方法的空指針異常。 我必須添加

可調試true

在我的應用程序gradle中知道問題出在哪里。

我將我的proguard文件更改為以下文件,並能夠對問題進行排序:

-ignorewarnings
-optimizationpasses 2
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose

-keepclasseswithmembernames class * {
    native <methods>;
}
-keep public class com.artifex.mupdfdemo.* {*;}

-dontwarn com.squareup.picasso.**
-dontwarn com.android.volley.**
-dontwarn com.nhaarman.listviewanimations.**
-dontwarn android.support.**



-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-dontwarn android.support.v7.**
-keep class android.support.v7.** { *; }

第2期

我可以通過添加解決

LOCAL_CFLAGS + = -DNOCJK

仍然在Core.mk中,但之后

MY_ROOT:= ../ ..

我希望這可以幫助可能遇到相同問題的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM