从Android NDK manifest文件中引用相对路径资源



我目前有麻烦,包括NDK清单文件的资源,我确信这是一个快速修复错误。在大型库中,项目和操作系统之间共享大量文件。因此,为了使文件与其他项目保持同步,并避免在每次更新时使用最新的API更新每个单独的项目,需要使用相对路径引用一大堆本地头文件和源代码文件。

在Eclipse中,我已经单击并拖动了项目中本地文件夹结构中的当前应用程序所需的文件(没有复制它们,而是通过使用相对路径)。

      

/projectFolder/jni/externalProjectFiles/src/包括之前

在Eclipse中使用这个文件夹结构,我有一个Android。

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有时会对我颐指气使。

EDIT:似乎Eclipse(这是一个了不起的IDE)在它的项目设置中对链接文件的引用后面没有任何粘合剂。如果我将引用文件拖拽到项目中,则没有物理文件放入这些文件夹中以表示链接文件的存在。这些信息显然只存储在项目设置中。这对安卓系统没有帮助。可文件。

这意味着任何脚本或makefile都没有任何关于应该包含哪些文件的引用。不幸的是,我将不得不从makefile本身单独引用文件夹和文件。我可能会在项目中留下引用,作为其他程序员对它们存在的暗示。很遗憾,我不能那样设计,但这是我目前得到的结论。

最后,我决定采用的方法是在makefile中分别包含文件的相对路径。这不是最干净的解决方案,但它有效,并为以后的工作提供了一个体面的环境。

...
LOCAL_C_INCLUDES += $(COMMON_COMPUTATION_PATH)
LOCAL_C_INCLUDES += $(COMMON_DATASET_PATH)
...
LOCAL_SRC_FILES += $(COMMON_COMPUTATION_PATH)/matrixRT.cpp $(COMMON_COMPUTATION_PATH)/multiplRT.cpp
LOCAL_SRC_FILES += $(COMMON_COMPUTATION_PATH)/multiplSqRT.cpp $(COMMON_COMPUTATION_PATH)/multiplSq1978RT.cpp
...

从之前在iOS应用程序中已经链接了文件的库开始,我可以将这些资源拖到Eclipse项目中的本地文件夹中。然后从PROJ_LOC中选择"链接到文件"。由于这两个项目都有相同的相对路径到我将要使用的所有文件,这就像一个魅力,并节省了我从寻找和放弃我需要的单个文件。

由于共享文件只是这些目录中所需文件的一小部分,因此我无法使用通配符创建对源文件的单个文件夹引用。然而,我相信最终最好是要求一个移动软件的组织文件夹结构,这样我们就可以只引用移动项目中需要的文件。

所以最后,我不能使用链接的文件作为清单文件的引用。如果它适用于您,user1368342已经提到可以在清单文件中创建和使用操作系统级别的链接文件。但是,出于跨多个操作系统平台的可移植性原因,我决定不走这条路。

至少通过这样的设置,用户可以看到包含在正在构建的项目库中的链接文件。当文件更改和更新时,他们还可以在屏幕上和清单中获得更新,以及处理直接从项目中编译它所产生的任何错误的能力。

缺点是,当需要引入一个新文件时,它需要同时添加到项目和清单中,而不是在一个单独的位置。但是,这对我来说是一个可以接受的解决方案。希望任何遇到类似问题的人都能发现这个方法很有用。

正如在评论中提到的,我在使用Eclipse引用时也遇到过一次问题。我在操作系统级别使用了符号链接。

问题可能出现,如果你版本一个项目使用符号链接(但我相信它仍然值得一试)。在我的例子中,我有一个版本化的主项目(包含所有物理文件),符号链接被用来编译一个没有版本化的库。

最新更新