如何将我的 NDK 项目拆分为库和应用程序
How to split my NDK project into lib and app
我有一个基于 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环境变量。/../.
您的库将针对包含它的每个应用程序(项目)重新生成 - 使用第一个朴素包含方法或$(call import-module)
方法。您可以提供预构建的静态库,但这是另一回事。
android.mk 分为两个部分:
LOCAL_PATH := $(call my-dir)
## The lib ##
include $(CLEAR_VARS)
LOCAL_MODULE := my_lib
SRC_LIB := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(SRC_LIB:$(LOCAL_PATH)/%=%)
include $(PREBUILT_SHARED_LIBRARY)
## The App ##
include $(CLEAR_VARS)
LOCAL_MODULE := my_app
LOCAL_CPP_EXTENSION := .cxx .cpp .cc
LOCAL_SRC_FILES :=
appfile1.cpp
appfile2.cpp
LOCAL_STATIC_LIBRARIES := android_native_app_glue
LOCAL_SHARED_LIBRARIES := my_lib
LOCAL_LDLIBS += -landroid
include $(BUILD_EXECUTABLE)
$(call import-module,android/native_app_glue)
如果你想要静态库,你只需要将include $(PREBUILT_SHARED_LIBRARY)
更改为include $(PREBUILT_STATIC_LIBRARY)
,LOCAL_SHARED_LIBRARIES := my_lib
更改为LOCAL_STATIC_LIBRARIES += my_lib
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 根据所选应用程序为 macOS 配置 VPN 拆分隧道
- 使用Qt将应用程序的功能拆分为插件
- 如何将我的 NDK 项目拆分为库和应用程序
- 将项目拆分为库和应用程序