我目前在包含 NDK 清单文件中的资源时遇到问题,我确信这是一个快速修复错误。大型库中的项目和操作系统之间共享大量文件。因此,为了使文件与其他项目保持同步,并避免在每次更新时使用最新的 API 更新每个单独的项目,需要使用相对路径引用一大堆本机头文件和源代码文件。
在 Eclipse 中,我在项目的本地文件夹结构中单击并拖动了当前应用程序所需的文件(不复制它们,而是使用相对路径)。
/项目文件夹 /jni /外部项目文件 /src /包括
使用 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 中包含第一个标头时,它会打印错误"No such file or directory"。
#include "externalFile.h"
我正在采取的方法是可能的解决方案吗?
我是否必须在 Android.mk 文件本身中为这些文件提供相对路径?这比引用引用文件的本地文件夹更麻烦。
从理论上讲,听起来好像我可以通过这种方式通过 NDK 创建一个库。但是,也许我没有正确设置项目。任何助手都会有所帮助;JNI 有时会惹恼我。
编辑: 似乎 Eclipse(这是一个了不起的 IDE)在其项目设置中保存的链接文件的引用后面没有任何胶水。如果我将引用的文件拖到项目中,则没有物理文件放入这些文件夹以表示链接文件的存在。该信息显然仅存储在项目设置中。这对 Android.mk 文件没有帮助。
这意味着任何脚本或 makefile 都没有关于应该包含哪些文件的任何参考。不幸的是,我将不得不从 makefile 本身单独引用文件夹和文件。我可能会将项目中的引用作为其他程序员对其存在的暗示。不幸的是我不能那样设计它,但这是我迄今为止得到的结论。