我目前在包含NDK清单文件中的资源方面遇到了问题,我确定这只是一个快速修复错误。有很多文件在大型库中在项目和操作系统之间共享。因此,为了使文件与其他项目保持最新并避免每次更新时更新每个单独的项目的最新API,需要使用相对路径引用整个批量的本地头文件和源代码文件。
然而,当我尝试在projectLibNDC.c中包含第一个头文件时,它会打印出“没有这样的文件或目录”的错误信息。
在Eclipse中,我已经通过拖动文件(而不是复制文件,而是使用相对路径)在项目中的本地文件夹结构中跨越所需的当前应用程序的文件。
/projectFolder /jni /externalProjectFiles /src /include
在Eclipse中,使用此文件夹结构,我有一个具有以下结构的Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := projectLib
LIBRARY_SRC_FOLDER := $(wildcard $(LOCAL_PATH)/externalProjectFiles/src/*.cpp)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/externalProjectFiles/include
LOCAL_SRC_FILES := projectLibNDK.c
LOCAL_SRC_FILES += $(LIBRARY_SRC_FOLDER:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog -landroid
LOCAL_CFLAGS := -Wno-multichar -D_ANDROID -DLIBDIR="\"c\""
LOCAL_CFLAGS += -DUSE_TCP_LOOPBACK -DMDNS_UDS_SERVERPATH=\"/var/run/mdnsd\" -DIN_LIBRARY -DBUILDING_LIBICONV -DUSE_BONJOUR
LOCAL_CFLAGS += -DXR_TARGET_ANDROID -DKS_BUILDING_KS -Wno-psabi -Wno-multichar -D_GNU_SOURCE -DHAVE_IPV6=0 -DNOT_HAVE_SA_LEN
LOCAL_CFLAGS += -DUSES_NETLINK -DHAVE_LINUX -DTARGET_OS_LINUX
LOCAL_CPPFLAGS := -frtti -fexceptions
include $(BUILD_SHARED_LIBRARY)
然而,当我尝试在projectLibNDC.c中包含第一个头文件时,它会打印出“没有这样的文件或目录”的错误信息。
#include "externalFile.h"
我采取的方法是否可行?
我是否需要在Android.mk文件中提供文件的相对路径?这将比引用本地文件夹中的文件更麻烦。
理论上,通过NDK以这种方式创建库似乎是可行的。但是,也许我没有正确设置项目。任何帮助都将有所裨益;JNI有时会让我感到困惑。
编辑:似乎Eclipse(这是一个很棒的IDE)在其项目设置中与链接文件的引用之间没有任何联系。如果我将引用的文件拖入项目中,则不会将任何物理文件放入那些文件夹中,以表示链接文件的存在。显然,这些信息仅存储在项目设置中。这对于Android.mk文件并不有帮助。
这意味着任何脚本或makefile都没有任何参考信息来确定应该包含哪些文件。不幸的是,我必须从makefile本身单独引用文件和文件夹。我可能会在项目中留下引用,以提示其他程序员它们的存在。很遗憾我不能设计成这样,但这是我迄今为止得出的结论。