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