在我的Android应用程序中,我有很多构建为静态库的开源C ++项目。从本质上讲,Android.mk将所有库构建为静态,并将它们全部链接以创建我的最终core.so库。
我们的每晚构建会在干净的目录中检出源代码管理中的所有文件,并构建所需的所有内容。
我正在研究如何优化我们的夜间构建。由于第三方代码没有改变(可能每六个月一次),我想只构建一次并检查生成的库。我猜这些libs会有一个" .a"延期。 nighly build将简单地检查这些lib并链接它们以创建我的最终core.so。
基本上,我希望我可以将现有的Android.mk分成两个不同的 - 一个用于构建静态库,另一个用于构建Android代码可以使用的最终共享库。
我想知道这是否可行。问候。
答案 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