包括头文件android jni

时间:2014-01-28 13:07:03

标签: android android-ndk include java-native-interface include-path

我正在尝试在android上使用pjsip ..在./configure-android和make dep和make命令之后,生成了静态库中的13个。

我使用了在jni文件夹中复制的include文件夹。 jni文件夹中android.mk的内容如下:

        LOCAL_PATH := $(call my-dir)
        include $(CLEAR_VARS)
        LOCAL_MODULE := libpj-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpj-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjlib-util-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjlib-util-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjmedia-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../voiper/pjsip_lib/libpjmedia-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjmedia-audiodev-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjmedia-audiodev-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjmedia-codec-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjmedia-codec-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjmedia-videodev-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjmedia-videodev-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjnath-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjnath-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjsdp-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjsdp-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjsip-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjsip-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjsip-simple-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjsip-simple-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjsip-ua-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjsip-ua-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjsua2-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjsua2-arm-unknown-linux-androideabi.a
        LOCAL_MODULE := libpjsua-arm-unknown-linux-androideabi
        LOCAL_SRC_FILES := ../pjsip_lib/libpjsua-arm-unknown-linux-androideabi.a
        include $(PREBUILT_STATIC_LIBRARY)
        include $(CLEAR_VARS)
        LOCAL_MODULE := dummy_pjsip_jni_module
        LOCAL_SRC_FILES := dummy_pjsua.c
        LOCAL_EXPORT_C_INCLUDES += ./include
        LOCAL_C_INCLUDES += ./include
        LOCAL_STATIC_LIBRARIES :=  libpj-arm-unknown-linux-androideabi libpjlib-util-arm-unknown-linux-androideabi libpjmedia-arm-unknown-linux-androideabi libpjmedia-audiodev-arm-unknown-linux-androideabi  libpjmedia-codec-arm-unknown-linux-androideabi libpjmedia-videodev-arm-unknown-linux-androideabi libpjnath-arm-unknown-linux-androideabi libpjsdp-arm-unknown-linux-androideabi libpjsip-arm-unknown-linux-androideabi libpjsip-simple-arm-unknown-linux-androideabi libpjsip-ua-arm-unknown-linux-androideabi libpjsua2-arm-unknown-linux-androideabi libpjsua-arm-unknown-linux-androideabi
        include $(BUILD_SHARED_LIBRARY)

我写了一个简单的单行c文件,其中只包含一个包含文件夹的头文件。然后我从项目目录运行ndk-build,并且没有为include文件夹中存在的头文件获取此类文件。没有application.mk ..我缺少什么?

修改

'。'代表当前目录.." include"文件夹在jni文件夹中

1 个答案:

答案 0 :(得分:2)

这里有几个问题:

1)每个预建的静态库都应该有自己的模块定义,即你的Android.mk应该是这样的:

include $(CLEAR_VARS)
LOCAL_MODULE := libpj
LOCAL_SRC_FILES := libpj-arm-unknown-linux-androideabi.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := libpjlib-util
LOCAL_SRC_FILES := libpjlib-util-arm-unknown-linux-androideabi.a
include $(PREBUILT_STATIC_LIBRARY)

... etc

请注意,模块名称不必与文件路径完全相同,这使得其余部分更加清晰。

2)那个'。'将在构建时引用您调用ndk-build的当前目录,您需要使用$(LOCAL_PATH)/ include来引用正确的包含路径(假设您的Android.mk在jni /下)。即:

include $(CLEAR_VARS)
LOCAL_MODULE := dummy_pjsip_jni_module
LOCAL_SRC_FILES := dummy_pjsua.c
LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_STATIC_LIBRARIES :=  libpj libpjlib-util libpjmedia libpjmedia-audiodev \
      libpjmedia-codec libpjmedia-videodev libpjnath \
      libpjsdp libpjsip libpjsip-simple libpjsip-ua \
      libpjsua2 libpjsua
include $(BUILD_SHARED_LIBRARY)