1

我找不到 Android NDK模块导入功能的工作示例。以下 Android.mk 文件似乎是正确的,并且内部模块构建和执行没有错误。但是,构建外部模块失败并显示以下错误消息:

Android NDK: jni/inner/Android.mk:inner: LOCAL_MODULE_FILENAME 不应包含文件扩展名
Android NDK: jni/inner/Android.mk:inner: LOCAL_MODULE_FILENAME 不得包含文件扩展名
/home/caleb/dev/android-ndk- r8e/build/core/build-shared-library.mk:30: * Android NDK: Aborting 。停止。

内部包含的 Android.mk 文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := inner
LOCAL_MODULE_FILENAME := libinner
LOCAL_SRC_FILES := inner-module.c

include $(BUILD_SHARED_LIBRARY)

外部,包含 Android.mk 文件:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := outer

$(call import-module,inner)

LOCAL_SHARED_LIBRARIES += inner

include $(BUILD_SHARED_LIBRARY)
4

2 回答 2

4

尝试将 import-module 的调用放在外部文件的末尾。在引用“内部”之前不必放置它,NDK 文档实际上建议您将它放在最后。

于 2013-11-11T15:57:13.187 回答
2

你正在做的事情有一些问题,所以这里是事情的样子。

内部包含的 Android.mk 文件:

# save away the previous local path
INNER_SAVED_LOCAL_PATH := $(LOCAL_PATH)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := inner
LOCAL_MODULE_FILENAME := libinner
LOCAL_SRC_FILES := inner-module.c

include $(BUILD_SHARED_LIBRARY)
# at this point LOCAL_MODULE_FILENAME will have been auto
#  set to libinner.so or similar by the call to BUILD_SHARED_LIBRARY

# restore previous local path
LOCAL_PATH := $(INNER_SAVED_LOCAL_PATH)

外部,包含 Android.mk 文件:

LOCAL_PATH := $(call my-dir)

$(call import-module,inner)
# at this point
#  a) we've still got the correct LOCAL_PATH as we didn't trash it in
#     the included Android.mk file
#  b) LOCAL_MODULE_FILENAME is still set to libinner.so which if not
#     unset will cause BUILD_SHARED_LIBRARY to complain

include $(CLEAR_VARS)
# we've now got a clean slate

LOCAL_MODULE := outer

# the build system has 'remembered' the inner module
LOCAL_SHARED_LIBRARIES += inner

include $(BUILD_SHARED_LIBRARY)

我不确定这是否是这样做的方法,但它对我有用:)

于 2014-08-26T15:41:42.227 回答