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

标签 android c++ android-ndk

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

相关文章:

android - 如何为使用 MySQL 数据库的 Android 应用程序创建 REST 服务?

android - 如何用双簧管正确播放解码后的内存 PCM?

android - 如何获取 RecyclerView 项目计数?

c++ - 如何知道一个c++源文件是否有main函数?

c++ - operator= 的返回类型 - 引用还是值?

android ndk c函数返回奇怪的值

c++ - 如何使用 Android Studio 2.2.3 调试外部 native 库的 C++ 源代码?

android - Android-如何在Maven构建中使用AAR文件

c++ - c++ 中是否有与 glibc mtrace() 函数类似的函数?

android - 使用 GDB 调试 Android native 代码非常慢