将 MuPDF 集成为库项目 (Android)

2023-11-27

所以我基于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. enter image description here, 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 渲染成为可能。


您只需创建一个虚拟动态库,它只需链接到您的静态库,如下所示:

https://stackoverflow.com/a/2957386/892714

ndk 构建系统(不幸的是)不会创建静态库而不被动态库使用。然后你只需从 obj/local/armeabi-v7a 获取静态库即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 MuPDF 集成为库项目 (Android) 的相关文章

随机推荐

  • List<> 元素是否按顺序位于堆状数组中?

    我正在学习C 基本上知道数组和数组之间的区别List最后一个是通用的 可以动态增长 但我想知道 are List元素顺序位于堆状数组中 还是每个元素 随机 位于不同位置 如果这是真的 这是否会影响内存访问和数据检索的速度 如果这是真的 这就
  • 函数内的“static”关键字?

    我正在查看 Drupal 7 的源代码 发现了一些我以前没有见过的东西 我在 php 手册中做了一些初步的查找 但它没有解释这些示例 关键字是什么static对函数内的变量做什么 function module load all boots
  • Vb.net随机数生成器多次生成相同的数字

    我有这个程序从文件中生成名字和姓氏 当我运行该程序时 我在三个文本框中输入信息 前两个是工资低和高 salary1 text salary2 text 最后一个是我想要的 份数 copies text 当我在文本中输入诸如10之类的数字时它
  • 属性-maven-插件:加载属性文件时出错

    我想将 pom xml 中的所有属性提取到属性文件中 这些是常见的属性 如依赖版本 插件版本和目录 我正在使用properties maven plugin 但它没有按照我想要的方式工作 我的 pom xml 的重要部分
  • match 如何在其怀抱中使用 `continue` 进行编译?

    我正在阅读 Rust 编程语言 一书 我偶然发现了一个简单的表达式 let guess u32 match guess trim parse Ok num gt num Err gt continue 如何match手臂上有不同的表情 例如
  • 如何在 Xcode 中查找 print() 或 NSLog() 控制台输出的来源

    我不确定这是否可能 下面是一个示例情况 有些东西正在打印到我的控制台 但我不知道它来自代码中的哪里 我使用 Xcode 中的 Finder 对 NSLog 和 print 等术语进行了快速搜索 没有出现任何相关的内容 Xcode 有什么快速
  • 如何为谷歌MapView制作具有视差滚动效果的自定义CoordinatorLayout.Behavior?

    我尝试为谷歌制作视差滚动效果MapView and RecycleView using CoordinatorLayour 因此 根据在网上找到的一些教程 我编写了以下代码 布局
  • 如何在 github 主页中删除“您贡献的存储库”

    我已向存储库提交了一个新问题 之后 我的 github 主页中始终会出现一个通知选项卡 我只是不想删除这个烦人的存储库 但我无法弄清楚 你有没有尝试过https docs github com en github setting up an
  • 如何猴子修补`__call__`方法?

    我似乎无法猴子修补 call 类实例的方法 是的 我只想修补单个实例 而不是全部 以下代码 class A object def test self return TEST def call self return EXAMPLE a A
  • dataAdapter .Fill 和 .Update 的比较

    我已经阅读了 MSDN 资源和几个论坛 但仍然不明白这两者之间有什么区别dataAdapter Fill and dataAdapter Update 我尝试使用它们从我的程序中更新数据库并且它有效 但是当我尝试删除update 功能 它仍
  • Zend 和 .htaccess

    我的默认 zend 应用程序具有此默认结构 zend webroot application config library public htaccess index php 默认 htaccess 通过 public index php
  • Android上不确定水平进度条的样式

    确定进度条的样式很容易 有很多教程可以实现这一点 这是我正在使用的
  • 通过 Google App Engine 的 Google Drive API

    我正在尝试通过以下方式使用 Google Drive API应用程序身份Google App Engine 提供的界面 这基本上允许我的网络应用程序与 Google 的 API 进行通信从服务器到服务器 我不需要我的用户登录 我只需要显示我
  • MapReduce 的随机播放和排序

    我通读了权威指南和网络上的其他一些链接 包括here 我的问题是 洗牌和排序到底发生在哪里 根据我的理解 它们发生在映射器和减速器上 但一些链接提到改组发生在映射器上 排序发生在减速器上 有人可以确认我的理解是否正确吗 如果没有 他们可以提
  • Android 应用程序中的 ExceptionInInitializerError?

    在我的 Android 应用程序中 WebView 活动类具有以下行 webView addJavascriptInterface new JSInterface this Android 在 JSInterface 类中 我正在初始化 G
  • 视图以模态视图动画显示,而不是显示(推送)动画

    我最近将我的应用程序从 iOS 8 3 更新到了 iOS 9 在修复了代码的各种错误后 当我注意到以下问题时 我设法编译应用程序并运行它 当我执行segue单击时 例如 UIButton 加载了segue的视图会出现模态视图的动画 从底部滑
  • C 语言中的 deflate 和 inflate (zlib.h)

    我正在尝试实现 zlib h deflate 和 inflate 函数来压缩和解压缩 char 数组 而不是文件 我想知道以下语法是否正确 我是否遗漏了某些内容或错误地定义了某些内容 char a 50 Hello World char b
  • NPM版本中如何表示内部版本号?

    我想在 package json 中将内部版本号附加到我的项目 我正在寻找最好的方法来做到这一点 我发现如果前面有 node semver 会将字符串识别为内部版本号 例如 这将是构建 123 1 0 0 123 但是 NPM 版本模块也接
  • 通过属性值选择元素的 XPath

    我有以下 XML
  • 将 MuPDF 集成为库项目 (Android)

    所以我基于pdf阅读器 MuPDF 构建了这个项目 我为此使用了 ndk build 该项目的名称是 ChoosePDFActivity 我知道它已正确构建 因为我可以在我的内部看到一个 so 文件libs armrabi v7a THIS