使用Android NDK和C文件,Eclipse ADT“无法解决”

我的NDK项目的Eclipse索引器出了问题。 那里有很多类似的线程,但似乎都没有触及相同的问题来源。 我有一个OpenGL ES应用程序,我需要移植到Android上纯粹用C编写,我想作为NativeActivity运行,最好没有附加Java。 在经过大量重写后,代码使用ndk-build编译得很好,但是从IDE中出现了很多错误,例如Type 'GLfloat' could not be resolved 。 一个APK生成,我可以用adb和all安装它,但我希望能够使用IDE,特别是用于调试。

如果我在上下文菜单中为#include 这样的行选择’Open Declaration’,那么Eclipse能够显示该文件,我看到GLfloat定义在那里,但是当我将#include hover在任何东西上时我都没有信息在那个文件中所以我猜索引器只是以某种方式跳过它? 不在Android NDK目录中的头文件被编入索引就好了,例如jni文件夹和jni/png等子文件夹中的文件。 我在C/C++ Build -> Environment下定义了NDKROOT根,这是一个具有本机function并使用CDT视图的项目。

我注意到的一件事是,当我最初设置项目时,我有一个.cpp文件,索引器提供Android NDK信息没有问题,但是一旦我将其更改为.c ,错误就开始出现了。 我的印象是Android NDK是与C一起使用的,只有基本的C ++支持,但在样本中查看,我只看到一堆.cpp文件,所以我很困惑。 我已经尝试在我的Android.mk设置LOCAL_CPP_EXTENSION += .c但是这会导致Eclipse在构建期间挂起。 我还没有尝试过的最后一件事就是重命名所有文件,以便用C ++编译器编译,但我不明白为什么这应该是必要的,我有一些第三方库,比如zlib包括来源,我是而不是小提琴。

Android.mk

 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) define all-cpp-files-under $(patsubst ./%, %, \ $(shell cd $(LOCAL_PATH) ; \ find $(1) -name "*.c" -and -not -name ".*") \ ) endef LOCAL_MODULE := MyProject LOCAL_SRC_FILES := $(call all-cpp-files-under, .) LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv2 -lOpenSLES LOCAL_STATIC_LIBRARIES := android_native_app_glue LOCAL_C_INCLUDES += $(LOCAL_PATH)/jansson LOCAL_C_INCLUDES += $(LOCAL_PATH)/zlib LOCAL_C_INCLUDES += $(LOCAL_PATH)/png include $(BUILD_SHARED_LIBRARY) $(call import-module,android/native_app_glue) 

Application.mk

 APP_PLATFORM := android-9 APP_ABI := all 

这可能不是解决问题的正确方法,但您可以找到文件${WORKSPACE_LOC}/.metadata/.plugins/com.android.ide.eclipse.ndk/${ProjName}.pathinfo 。 它是一个文本文件,格式简单。 首先,尝试删除此文件,然后重建项目。 如果这没有帮助,您可以添加

 i,d:/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.6/include i,d:/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.6/include-fixed i,D:/Android/android-ndk-r9/platforms/android-14/arch-arm/usr/include 

手动(上面的示例适用于Windows)。

更新更好的解决方法是设置ADT以正确使用索引器 ,请参阅Android NDK构建,无法解析方法Eclipse成功编译但仍然会出现语义错误

右键单击jni文件夹并进入属性单击c / c ++ general并在include文件夹中包含下面的文件存在于你的ndk中请导入并且必须单击apply

 d:/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.6/include i,d:/android/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.6/include-fixed i,D:/Android/android-ndk-r9/platforms/android-14/arch-arm/usr/include