【问题标题】:How to use mupdf library in Android如何在 Android 中使用 mupdf 库
【发布时间】:2016-04-13 23:52:43
【问题描述】:

我按照这些步骤http://www.mupdf.com/docs/how-to-build-mupdf-for-android 从源代码构建了mupdf。我已将它集成到我的应用中,并且运行良好。

不过,我遇到了一些问题,希望得到任何人的意见,我将不胜感激

问题 #1

签署 APK 后,当我尝试打开任何 pdf 时,应用程序崩溃。我的猜测是在此过程中省略了一些类。我用谷歌搜索,this 是我得到的最接近的答案,但它对我不起作用。这就是我的 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)

任何帮助或指导将不胜感激。

谢谢

【问题讨论】:

    标签: android pdf android-ndk mupdf


    【解决方案1】:

    所以在我花了一些时间解决我的两个问题之后,我终于设法解决了它们:

    问题 #1

    问题实际上不在于 mupdf,它是我的 PdfViewActivity.java 中 onCreateOptionsMenu 方法的空指针异常。我必须添加

    可调试的真

    在我的应用程序 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 := ../..

    我希望这对可能面临同样问题的人有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2016-01-24
      相关资源
      最近更新 更多