通过“本地代码”,我理解您想要构建另一个使用第一个共享库的C模块。
您需要使用Android NDK本地链接系统。如果第二个模块不知道如何获取第一个模块的头文件以及共享库的存在,则无法编译第二个模块。
标准方式
第二个模块编译时需要源代码。
在第一个共享库的Android.mk中使用LOCAL_C_INCLUDES
、EXPORT_C_INCLUDES
和LOCAL_MODULE = first-module-name
。
在第二个模块的Android.mk中,使用LOCAL_SHARED_LIBRARIES = libfirst-module-name
。不要忘记“lib”。
您的第二个模块需要知道使用第一个库的头文件路径,因此在构建时无法避免在本地拥有代码。
其他可能的解决方案:还有一个我从未使用过的$(call import-module,<tag>)
[doc]。
有关此页面上这些编译器标志的所有文档:http://www.kandroid.org/ndk/docs/ANDROID-MK.html
预构建方式
仅在第二个模块编译时需要.so和头文件
这在Android NDK PREBUILTS documentation.中完全描述。
第一个共享库:
include $(CLEAR_VARS)
LOCAL_MODULE := foo-prebuilt
LOCAL_SRC_FILES := libfoo.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
使用第一个模块的第二个模块:
include $(CLEAR_VARS)
LOCAL_MODULE := foo-user
LOCAL_SRC_FILES := foo-user.c
LOCAL_SHARED_LIBRARIES := foo-prebuilt
include $(BUILD_SHARED_LIBRARY)