使用NDK构建Android本机代码

使用NDK构建Android本机代码,android,android-ndk,Android,Android Ndk,我正在尝试使用NDK在Android构建系统中构建一个Android本机模块。 我的模块在使用Android模块make命令构建时正确构建,没有任何错误。 但是当我尝试使用NDK构建设置时,我遇到了android系统包含文件的问题。 我的模块结构是: android | external | MyModule | jni --&g

我正在尝试使用NDK在Android构建系统中构建一个Android本机模块。 我的模块在使用Android模块make命令构建时正确构建,没有任何错误。 但是当我尝试使用NDK构建设置时,我遇到了android系统包含文件的问题。 我的模块结构是:

android
       |
       external
              |
              MyModule
                     |
                     jni --> Android.mk
                     mysharedobj --> Android.mk
我的本机模块包括许多android模块,例如

#include <JNIHelp.h>
#include "android_runtime/AndroidRuntime.h"
#include <gui/Surface.h>
#include <gui/ISurface.h>
-->为了解决JNIHelp.h include错误,我在Android.mk中添加了以下行

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/../../../libnativehelper/include/nativehelper
LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/../../../libnativehelper/include/nativehelper \
    $(LOCAL_PATH)/../../../system/core/include \
在这之后,又出现了一个错误

jni/../../../libnativehelper/include/nativehelper/JNIHelp.h:27:24: fatal error: cutils/log.h: No such file or directory compilation terminated.
-->为了解决上述错误,我修改了Android.mk

LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/../../../libnativehelper/include/nativehelper
LOCAL_C_INCLUDES += \
    $(LOCAL_PATH)/../../../libnativehelper/include/nativehelper \
    $(LOCAL_PATH)/../../../system/core/include \
在此之后,又出现了一个错误

/home/user/android-ndk-r8e/platforms/android-3/arch-arm/usr/include/linux/uio.h:18:8: error: redefinition of 'struct iovec'
jni/../../../system/core/include/cutils/uio.h:33:8: error: previous definition of 'struct iovec'
如何成功构建使用android系统包含文件的本机模块?
请帮助我。

您应该使用
LOCAL\u LDLIBS
而不是将ndk依赖项添加到
LOCAL\u C\u INCLUDES
。下面的示例来自my Android.mk:

LOCAL_LDLIBS := -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib -L$(LOCAL_PATH) -llog -lz -lm

签出文档以查看您应根据需要添加哪些LIB。

我不确定,但请尝试在您的本地标签上添加标志-DHAVE\u SYS\u UIO\u H

LOCAL_CFLAGS += -DHAVE_SYS_UIO_H