安卓JNI加载mupdf(使用NDK编译?)

3
我正在创建一个Android Xoom应用程序,其中一个Activity中显示pdf文档。
我已经下载了mupdf源代码文件:mupdf.c、Android.mk、Application.mk、Core.mk和ThirdParty.mk。
我还访问了mupdf.com网站,并尝试从这里下载各种预编译包:http://ccxvii.net/mupdf/download/ 我刚从iPhone转到Android,需要学习如何包含C代码。我将mk / c文件放在项目的/jni/目录下。我还尝试将从上述网站下载的预编译文件复制到我的项目的/jni/目录下。
我有一个简单的类:
import android.graphics.*;

    public class PDFView {  
        static {
            System.loadLibrary("mupdf");
        }
    }

每次我创建这个类的实例时,应用程序都会崩溃,并在LogCat中显示“ExceptionInInitializerError”和“Couldn't load mupdf: findLibrary returned null”。
我已经下载了Android NDK并尝试自己编译源代码。我遇到了缺少mupdf.h错误和fitz.h错误等一长串错误。这似乎过于复杂,需要包含一个库。
我正在Snow Leopard上的Mac上工作。我认为我需要将其编译为二进制文件,但是花费了这么多时间学习NDK,然后它无法编译,让人非常沮丧。也许我需要更新的源代码。
有谁能帮忙指点一下方向吗?

我正在阅读Android的编译说明,它说要编辑local.properties文件,但我在从mupdf.com下载的源代码中找不到这个文件。 - Paul
让我们从你的ndk-build错误开始。你能展示一下当你执行ndk-build时发生了什么吗? - Matthew
这比仅仅“加载库”要复杂得多,因为库必须针对ARM构建,并针对Android库进行编译。尝试加载库将返回null,直到您使ndk部分正常工作为止。 - Matthew
马修,看看我下面的帖子。 - Paul
2个回答

2

您需要在Android.mk中正确设置包含路径。

请发布您的Android.mk以获得更多帮助,同时您可以尝试从您的NDK文件夹中借用samples。首先尝试构建它们作为健全性检查,然后查看jni/Android.mk以了解它们的makefile设置方式。

NDK中的文档目录还包含有关Android.mk文件的完整文档。

老实说,除非您具有C语言经验,否则使用NDK将会很困难。熟悉make、gcc和ld的细节至关重要。

编辑 - 为了使此过程更加容易,我建议克隆mupdf git存储库。那里实际上有一个Android项目可以直接构建。

确保使用git进行克隆,因为您需要所有必要的文件。自述文件中有简单的构建说明。似乎首先让其正常工作并从那里进行调整可能是更可靠的开发路径。


LOCAL_PATH := $(call my-dir) TOP_LOCAL_PATH := $(LOCAL_PATH)MUPDF_ROOT := ..include $(TOP_LOCAL_PATH)/Core.mk include $(TOP_LOCAL_PATH)/ThirdParty.mkinclude $(CLEAR_VARS)LOCAL_C_INCLUDES :=
$(MUPDF_ROOT)/draw
$(MUPDF_ROOT)/fitz
$(MUPDF_ROOT)/mupdf LOCAL_CFLAGS := LOCAL_MODULE := mupdf LOCAL_SRC_FILES := mupdf.c LOCAL_STATIC_LIBRARIES := mupdfcore mupdfthirdpartyLOCAL_LDLIBS := -lm -llog -ljnigraphicsinclude $(BUILD_SHARED_LIBRARY)
- Paul
所以我已经做得很远了。我阅读了Thirdparty.mk并注意到它们指定的目录不包括像我下载的文件夹那样的版本号。因此,我重命名了文件夹,并能够到达现在显示“没有规则可以制作目标”的地步。我正在尝试解决这个问题,Core.mk的最后一行是$(BUILD_STATIC_LIBRARY)。肯定还有其他需要更新的路径或文件之类的东西。 - Paul
上帝啊...现在我得到了这样的东西:"pdf_crypt.c:364: undefined reference to `fz_sha256init'"。我刚刚完成了对类型重新定义的源代码编辑。为什么会有这种错误分发出来呢?他们不会进行测试构建吗?或者只有“值得”的开发人员可以使用这个代码,如果他们能花3个小时调试它的话。 - Paul
Android 项目链接已失效。 - joao2fast4u

0

我已经成功地为Android构建了mupdf库。 我同意Paul的观点,我不得不稍微调整一下才能使其正常工作。你应该能够通过进行小的更改来修复这些错误。你应该专注于确保所有这些不同的第三方源文件夹的路径都存在且正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接