Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android JNI加载mupdf(用NDK编译?)_Android_Java Native Interface_Android Ndk - Fatal编程技术网

android JNI加载mupdf(用NDK编译?)

android JNI加载mupdf(用NDK编译?),android,java-native-interface,android-ndk,Android,Java Native Interface,Android Ndk,我正在创建一个Android Xoom应用程序,在其中一个活动中显示pdf 我已经下载了mupdf源文件:mupdf.c、Android.mk、Application.mk、Core.mk和ThirdParty.mk 我还访问了mupdf.com网站,尝试从这里下载各种预编译包: 我刚从iPhone切换到Android,关于包括C代码在内的一些东西需要学习。我将mk/c文件放入项目中的/jni/中。我还尝试将从上述网站下载的预编译文件复制到项目的/jni/中 我有一个简单的课程: import

我正在创建一个Android Xoom应用程序,在其中一个活动中显示pdf

我已经下载了mupdf源文件:mupdf.c、Android.mk、Application.mk、Core.mk和ThirdParty.mk

我还访问了mupdf.com网站,尝试从这里下载各种预编译包:

我刚从iPhone切换到Android,关于包括C代码在内的一些东西需要学习。我将mk/c文件放入项目中的/jni/中。我还尝试将从上述网站下载的预编译文件复制到项目的/jni/中

我有一个简单的课程:

import android.graphics.*;

    public class PDFView {  
        static {
            System.loadLibrary("mupdf");
        }
    }
每次我创建此类的实例时,应用程序都会崩溃,并在LogCat中显示“ExceptionInInitializerError”以及“无法加载mupdf:findLibrary返回null”

我还下载了android NDK,并尝试自己编译源代码。我得到一个丢失的mupdf.h错误和fitz.h错误。只是一个完整的错误列表,而这似乎过于复杂,无法包含一个库

我正在用雪豹制作Mac电脑。我认为我在正确的道路上需要将其编译为二进制文件,但花了这么多时间学习NDK之后它就不会编译了,这真的很令人沮丧。也许我需要一个更新的来源


有人能帮我指出正确的方向吗?

您需要在Android.mk中正确设置include路径

请发布您的Android.mk以获得更多帮助,尽管在此期间您可以尝试从NDK借用,NDK包含在您的NDK文件夹中

首先尝试将它们构建为一个健全的检查,然后查看jni/Android.mk以了解它们的makefile是如何设置的

NDK中的docs目录还包含关于Android.mk文件的大量文档

老实说,除非你有C语言方面的经验,否则使用NDK是很困难的。了解make、gcc和ld的来龙去脉是至关重要的

编辑-为了简化此过程,我将克隆mupdf git存储库。事实上,那里有一个正在建造的建筑


确保使用
git
进行克隆,因为您需要所有必要的文件。自述文件中有关于构建的简单说明。似乎先让它工作起来,然后再对它进行调整,这可能会为您提供更可靠的开发路径。

我已经能够为android构建mupdf库。
我同意保罗的观点,我必须做一些小修补才能让它正常工作。您应该能够通过微小的更改来修复这些错误。您应该关注的是,确保所有这些不同的第三方源文件夹的路径都存在且正确。

我正在阅读android的编译说明,上面说要编辑local.properties,我从mupdf.com下载的源文件中看不到这样的文件。让我们从ndk构建错误开始。你能展示一下当你构建ndk时会发生什么吗?这比仅仅“加载一个库”更重要,因为这个库必须针对ARM和Android库构建。尝试加载库将返回null,直到您使ndk部分工作。Matthew,请查看我下面的帖子本地路径:=$(调用我的目录)顶部本地路径:=$(本地路径)MUPDF\u根:=。。include$(TOP\u LOCAL\u PATH)/Core.mk include$(TOP\u LOCAL\u PATH)/ThirdParty.mk include$(CLEAR\u VARS)LOCAL\u C\u INCLUDES:=\$(MUPDF\u ROOT)/draw\$(MUPDF\u ROOT)/fitz\$(MUPDF\u ROOT)/mupdf LOCAL\u CFLAGS:=LOCAL\u MODULE:=mupdf LOCAL\u SRC\u FILES:=mupdf.c LOCAL\u STATIC\u LIBRARIES:=mupdfcore mupdfthirdparty LOCAL\u LDLIBS:=-lm-llog-ljnigraphics include$(BUILD\u SHARED\u LIBRARY),所以我已经做了很多。我通读了Thirdparty.mk,发现它们指定的目录与我下载的文件夹不同,不包含版本号。所以我重新命名了这个文件夹,现在它的意思是“没有制定目标的规则”。我试图弄明白,Core.mk的最后一行是$(BUILD\u STATIC\u LIBRARY)。必须有另一条路径,某个地方需要为make文件或其他东西更新。上帝。。。现在我得到了类似“pdf_crypt.c:364:fz_sha256init”的未定义引用”。我刚刚编辑完类型重新定义的源代码。为什么会出现这样的bug?他们不会运行测试构建吗?或者只有“有价值的”开发者才可以使用这段代码,如果他们可以花3个小时调试它的话。Android项目链接已经失效