9

在今天之前,我将 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 等。
我尝试向 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();
}

发光.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_ */

日志.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_ */

发光.c

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

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

安卓.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

4 回答 4

29

我已经在我的变量中尝试了android-ndk-r8b 。项目编译无误。然而日食“说”C:\Android\android-ndk-r8bPATH
Unresolved inclusion: <jni.h>

解决了

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

于 2012-09-25T14:04:33.840 回答
3

您可以通过选择项目的属性来做到这一点

Properties -> C/C++ General -> Preprocessor Include..-> Entries -> Setting Entries -> CDT User Setting Entries

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

ndk/platforms/android-[version]/[arch]/usr/include
于 2014-04-28T17:54:07.540 回答
3

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

  1. 不需要任何环境变量,只需在 Preferences > Android > NDK 下指向 NDK 位置。
  2. 将项目移到工作区之外。从项目中删除下一个文件/文件夹:

.settings
.classpath
.cproject
.project
项目.properties

  1. 重新导入您的项目。Eclipse > New > Other > Android > Android Project from Existing Code > 然后将文件夹指向您的项目,让 Eclipse 检测到它,选中“将项目复制到工作区”,然后单击确定/下一步,无论如何。
  2. 清洁项目。
  3. 右键单击项目 > Android 工具 > 添加本机支持
  4. 重建,可能重新启动工作区。

这也解决了 Eclipse 4.3 以前忽略的构建系统和用户定义的编译器标志的问题。现在依赖于这个标志的宏折叠工作正常。

如果更通用:NDK 插件可以为您正确定义正确的包含以及正常工作所需的任何其他内容,但是您需要清除项目中的垃圾,最简单的方法是重新导入项目。

于 2014-05-05T15:05:28.017 回答
2

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

属性->C/C++ 常规->路径和符号。

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

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

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

于 2014-07-31T06:39:40.383 回答