【问题标题】:Android NDK - How to build static libraries just once?Android NDK - 如何只构建一次静态库?
【发布时间】:2014-06-30 23:06:52
【问题描述】:

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

我们的夜间构建会检查干净目录中源代码管理中的所有文件并构建所需的一切。

我正在研究如何优化我们的夜间构建。由于第三方代码不会改变(可能每六个月一次),我想只构建一次并检查生成的库。我猜这些库会有一个“.a”扩展名。几乎所有的构建将简单地检查这些库并将它们链接起来以创建我的最终 core.so。

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

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

【问题讨论】:

    标签: android android-ndk


    【解决方案1】:

    您正在寻找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
    

    【讨论】:

    • 感谢您的帮助。如何创建预构建的静态库?预建的静态库存放在哪个目录?
    • 预建库的重点是您可以随心所欲地创建它,并将其存储在您想要的任何地方(因此您可以参考自己检查它们)。听起来您想使用当前构建过程中的.as?
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多