Android ndk ndk在主项目源代码树外构建库

Android ndk ndk在主项目源代码树外构建库,android-ndk,Android Ndk,我想用ndk建立一个第三方库avahi。avahi已经有android端口(带有有效的android.mk) 我所做的: 我已经成功地创建了一个项目,并将所有源代码复制到jni/文件夹中,然后运行ndk build。它建立了利巴瓦希 我想做的是: 我不想将所有源代码复制到jni/文件夹中,而是将其存储在项目源代码树外的文件夹中。我该怎么办?我已经研究了NDK文档/导入模块,但没有任何内容与我的案例类似 ndk新手,欢迎任何建议 你说得对,导入模块不是这样的。从本机代码引用avihi库的方式仍然是

我想用ndk建立一个第三方库avahi。avahi已经有android端口(带有有效的android.mk)

我所做的: 我已经成功地创建了一个项目,并将所有源代码复制到jni/文件夹中,然后运行ndk build。它建立了利巴瓦希

我想做的是: 我不想将所有源代码复制到jni/文件夹中,而是将其存储在项目源代码树外的文件夹中。我该怎么办?我已经研究了NDK文档/导入模块,但没有任何内容与我的案例类似


ndk新手,欢迎任何建议

你说得对,导入模块不是这样的。从本机代码引用avihi库的方式仍然是本地共享库(请参见NDK示例)。但是在您的
jni/Android.mk
文件中,您可以使用
include
命令来创建另一个文件。此命令非常类似于C中的
#include
语句。此文件不需要位于项目树中。以相同的样本为例,以下是它的工作原理:

原件:

更改后的文件将如下所示:

ZOO_LOCAL_PATH := $(call my-dir)
include ~/projects/bar/jni/Android.mk
LOCAL_PATH := $(ZOO_LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)
以及外部栏/jni/Android.mk,如下所示:

ZOO_LOCAL_PATH := $(call my-dir)
include ~/projects/bar/jni/Android.mk
LOCAL_PATH := $(ZOO_LOCAL_PATH)

include $(CLEAR_VARS)
LOCAL_MODULE := zoo
LOCAL_SRC_FILES := zoo/zoo.c
LOCAL_SHARED_LIBRARIES := bar
include $(BUILD_SHARED_LIBRARY)
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo/foo.c
LOCAL_CFLAGS := -DFOO=2
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/foo
LOCAL_EXPORT_CFLAGS := -DFOO=1
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := bar
LOCAL_SRC_FILES := bar/bar.c
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bar
LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)
现在,bar.c和foo.c两个文件都可以保存在动物园项目的树之外