gpt4 book ai didi

android - 如何将我的 NDK 项目拆分为 lib 和 app

转载 作者:行者123 更新时间:2023-11-30 03:57:58 24 4
gpt4 key购买 nike

我有一个基于 NDK 的项目(主要用 C++ 编写),我想将其源代码分成两部分:“lib”(与其他项目共享)和“app”(特定于当前项目的文件)。

现在我的 Android.mk 如下所示:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyProj

MY_LIB_SOURCES := \
libfile1.cpp \
libfile2.cpp

MY_APP_SOURCES := \
appfile1.cpp \
appfile2.cpp

LOCAL_SRC_FILES += $(MY_LIB_SOURCES)
LOCAL_SRC_FILES += $(MY_APP_SOURCES)

LOCAL_STATIC_LIBRARIES := android_native_app_glue

include $(BUILD_SHARED_LIBRARY)

$(call import-module,android/native_app_glue)

拆分的唯一原因是我想添加/删除 lib 源文件一次,因为现在我必须为所有需要来自 MY_LIB_SOURCES 的源的项目更改 Android.mk。

我是否必须创建一个单独的项目来生成共享库?或者它应该是一个静态库?或者可能只是 #include 以某种方式将枚举 MY_LIB_SOURCES 的文件放入每个应用程序的 Android.mk 中?

最佳答案

我们通常为库源创建一个单独的文件夹,例如

project
jni
appfile1.cpp
appfile2.cpp
Android.mk (1)

my_lib
libfile1.cpp
libfile2.cpp
Android.mk (2)

这是第一个(应用程序)Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyProj

MY_APP_SOURCES := \
appfile1.cpp \
appfile2.cpp

LOCAL_SRC_FILES += $(MY_APP_SOURCES)

LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_STATIC_LIBRARIES += MyLib

include $(BUILD_SHARED_LIBRARY)

include $(LOCAL_PATH)/../../my_lib/Android.mk
$(call import-module,android/native_app_glue)

这是第二个()Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyLib

MY_LIB_SOURCES := \
libfile1.cpp \
libfile2.cpp

LOCAL_SRC_FILES += $(MY_LIB_SOURCES)

include $(BUILD_STATIC_LIBRARY)

按照惯例,MyLib 使用 Andorid.mk 名称;您可以使用其他文件名,并相应地更改 include 语句(第一个 Android.mk 文件的第 17 行)。

您也可以使用相同的 $(call import-module)语法,比如

$(call import-module,my_lib)

但要这样做,您必须提供包含 $(LOCAL_PATH)/../../NDK_MODULE_PATH 环境变量。

您的库将为包含它的每个应用程序(项目)重新构建 - 使用第一个简单的 include 方法,或使用 $(call import-module)方法。您可以提供 prebuilt静态库,但这是另一回事。

关于android - 如何将我的 NDK 项目拆分为 lib 和 app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27679372/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com