Android NDK - 如何只构建一次静态库?

时间:2014-06-30 23:06:53

标签: android android-ndk

在我的Android应用程序中,我有很多构建为静态库的开源C ++项目。从本质上讲,Android.mk将所有库构建为静态,并将它们全部链接以创建我的最终core.so库。

我们的每晚构建会在干净的目录中检出源代码管理中的所有文件,并构建所需的所有内容。

我正在研究如何优化我们的夜间构建。由于第三方代码没有改变(可能每六个月一次),我想只构建一次并检查生成的库。我猜这些libs会有一个" .a"延期。 nighly build将简单地检查这些lib并链接它们以创建我的最终core.so。

基本上,我希望我可以将现有的Android.mk分成两个不同的 - 一个用于构建静态库,另一个用于构建Android代码可以使用的最终共享库。

我想知道这是否可行。问候。

1 个答案:

答案 0 :(得分:2)

您正在寻找prebuilt library support

假设您的静态库声明如下所示:

include $(CLEAR_VARS)
 LOCAL_MODULE := foo
 LOCAL_SRC_FILES := foo/foo.c
 LOCAL_EXPORT_CFLAGS := -DFOO=1
include $(BUILD_STATIC_LIBRARY)

你可以使用预建的代替:

include $(CLEAR_VARS)
 LOCAL_MODULE := foo
 LOCAL_SRC_FILES := libs/foo.a
include $(PREBUILT_STATIC_LIBRARY)

并在您的核心库中包含相同的内容:

include $(CLEAR_VARS)
 LOCAL_MODULE := myCore
 LOCAL_SRC_FILES := core/core.c
 LOCAL_STATIC_LIBRARIES := foo
include $(BUILD_SHARED_LIBRARY)

所以你可以有一个单独的Android.mk,或者只使用一个条件变量。

ifeq ($(USE_PREBUILT_LIBS),)
 # declare with BUILD_STATIC_LIBRARY
else
 # declare with PREBUILT_STATIC_LIBRARY
endif