Android添加本机支持 - 未解析的jni.h,android / log.h等

时间:2012-09-25 13:43:33

标签: android c android-ndk java-native-interface

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

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)

4 个答案:

答案 0 :(得分:29)

我在C:\Android\android-ndk-r8b变量中使用PATH尝试了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

答案 1 :(得分:3)

您可以通过选择项目的属性

来完成此操作

属性 - &gt; C / C ++一般 - &gt;预处理器包括..-&gt;参赛作品 - &gt;设置条目 - &gt; CDT用户设置条目

添加 - &gt;包含目录 - &gt;文件系统路径,并输入包含

的路径
ndk/platforms/android-[version]/[arch]/usr/include

答案 2 :(得分:3)

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

  1. 不需要任何环境变量,只需在“首选项”下指向NDK位置&gt; Android&gt; NDK
  2. 将项目移到工作区外。从项目中删除下一个文件/文件夹:
  3.   

    .settings
    .classpath
    .cproject
    .project
    project.properties

    1. 重新导入您的项目。 Eclipse&gt;新&gt;其他&gt; Android&gt;现有代码中的Android项目&gt;然后使用您的项目指向文件夹,让Eclipse检测它,选中“将项目复制到工作区”,然后单击“确定/下一步”,无论如何。
    2. 清理项目。
    3. 右键点击项目&gt; Android工具&gt;添加原生支持
    4. 重建,可能重启工作区。
    5. 此问题也解决了Eclipse 4.3之前忽略的构建系统和用户定义的编译器标志。现在,依赖于这个标志的宏折叠工作正常。

      如果更通用:NDK插件可以正确地为你定义包含和其他任何工作所需的工作,但你需要从破碎的垃圾中清理你的项目,最简单的方法是重新导入项目。

答案 3 :(得分:2)

如果您使用的是Eclipse Kepler,则添加NDK的路径包括

属性 - &gt; C / C ++一般 - &gt;路径和符号。

在我的NDK版本上,所需的包含路径是:

C:\ Program Files(x86)\ Android \ android-sdk \ NDK \ android-ndk-r10 \ platforms \ android-L \ arch-arm \ usr \ include。

它会询问您是否要重建。之后错误就消失了。