2012-09-25 28 views
9

在今天之前,我使用Eclipse 3.8与Sequoyah插件为Android NDK项目。 但是今天,我决定用Eclipse和NDK更新Eclipse到Juno版本。
我非常高兴,然后我看到ADT安装中的Android Native Tools,它将执行像Sequoyah一样的工作,但具有调试功能。
我创建了新的Android项目来测试它。
添加Android Native支持使用Android.mk,.cpp文件创建jni文件夹,与Sequayah一样。 然后,我首先得到解决jni.h。我遇到Sequoyah类似的错误,所以我重建索引并重新启动Eclipse。重新启动后,它不会消失。
我去路径和符号在C/C++属性。 但有一些需要内置的包括。
(NDK PATH)/平台/ Android的8 /弓臂/ usr/include目录 - 有jni.h,log.h等
我tryed增加额外dublicate包括对jni.h,清洁工程,重新启动,重建索引,将.ccp更改为.c,它仍然未解决。我在错误日志中没有错误,但在jni函数编辑器中出现语法错误。Android添加原生支持 - 未解决的jni.h,android/log.h等

NativeLib.java

package com.aristarhys.glow; 

public class NativeLib 
{ 
private static final String NATIVE_LIB = "glow"; 
static 
{ 
    System.loadLibrary(NATIVE_LIB); 
} 
    private NativeLib(){}; 
    public static native void test(); 
} 

glow.h

#ifndef GLOW_H_ 
#define GLOW_H_ 

#include <jni.h> //unresolved 
//syntax error 
JNIEXPORT void JNICALL Java_com_aristarhys_glow_NativeLib_test(JNIEnv* env, jclass cls); 
#endif /* GLOW_H_ */ 

log.h

#ifndef LOG_H_ 
#define LOG_H_ 

#include <android/log.h> //unresolved 

#define INFO_TAG "[INFO]" 
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, INFO_TAG, __VA_ARGS__) 

#endif /* LOG_H_ */ 

glow.c

#include "glow.h" 
#include "log.h" 

//syntax error 
JNIEXPORT void JNICALL Java_com_aristarhys_glow_NativeLib_test(JNIEnv* env, jclass cls) 
{ 
LOGI("HI"); 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := glow 
LOCAL_SRC_FILES := glow.c 
LOCAL_LDLIBS := -llog 
include $(BUILD_SHARED_LIBRARY) 
+0

已知的Eclipse问题。不会妨碍您编译。 –

+0

尝试这个帖子: [已解决NDK] [1] [1]:http://stackoverflow.com/questions/11504258/how-to-remove-native-support-from-an -android-project-in-eclipse-because-eclipse/28313132#28313132 –

回答

29

我已经在我的PATH变量试图android-ndk-r8bC:\Android\android-ndk-r8b。 编译没有错误的项目。
但是日食 “说:” 这Unresolved inclusion: <jni.h>

解决

NDK Project->New->Folder->Advanced->Link to alternate location(Linked Folder) 浏览路径(例如):C:\Android\android-ndk-r8b\platforms\android-8\arch-arm\usr\include

+0

我想创建一个JNI项目。我想要使​​用** CURL(curl/curl.h)**包含在Cygwin中。因此,我创建了组合的Android和C/C++项目,因为此库可用作Cygwin标头。但我仍然得到**致命错误:curl/curl.h:没有这样的文件或目录**错误。可能是什么问题呢?我们可以在Android JNI项目中引用外部Cygwin库吗? – MobiDev

+0

看这里:http://code.google.com/p/ra-sqlite/source/browse/ra.sqlite/jni/android/raSqlite。mk希望它可以帮助你找出问题('cf_includes:= $(addprefix -Ijni/android /,$(cf_includes_local))') –

3

您可以通过选择属性项目

属性做到这一点 - > C/C++ General - > Preprocessor Include .. - >作品集 - >设置条目 - > CDT用户设置项

添加 - > include目录 - >文件系统路径,并输入路径包括

ndk/platforms/android-[version]/[arch]/usr/include 
+0

好的做法是使用enviropment变量NDK_ROOT,所以路径可以是这样的: $ { NDK_ROOT} \ platforms \ android-5 \ arch-arm \ usr \ include 此外,我发现只有当我选中“包含系统标题”复选框时,这才适用于我。 –

3

我经常解决类似的问题,这可能是在移动或重命名项目的工作文件夹时发生。

  1. 不需要任何环境变量,只需在首选项> Android> NDK下指出NDK位置即可。
  2. 在工作区外移动项目。从项目旁边的文件/文件夹删除:

.settings
.classpath
.cproject
.project
project.properties

  • 重新导入项目。 Eclipse>新建>其他>安卓>从现有代码的Android项目>然后指向您的项目的文件夹,让Eclipse检测到它,检查“复制项目到工作区”,然后单击确定/下一步,无论如何。
  • 清洁工程。
  • 右键单击项目> Android工具>添加本地支持
  • 重建,可能重新启动工作区。
  • 此问题也解决了Eclipse 4.3以前忽略的编译系统和用户定义的编译器标志。现在依赖于这个标志的宏折叠工作正常。

    如果更一般:NDK插件可以正确定义你的权利包括和其他任何需要良好工作,但你需要从破碎的垃圾清理你的项目,最简单的方法是重新导入项目。

    2

    如果使用的是Eclipse开普勒路径添加NDK包括

    属性 - > C/C++通用>路径和符号。

    对我的版本NDK的

    包含路径需要的是:

    C:\ Program Files文件(x86)的\ Android的\ Android的SDK \ NDK \ Android的NDK-R10 \平台\ Android的-L \ arch-臂的\ usr \包括。

    它会问你是否要重建。之后,错误消失。