我有一个基于 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/