2012-07-26 121 views
16

试图用jni c代码构建一个简单的helloWorld android/java应用程序。我在Windows 7上使用Eclipse Indigo。在非空间路径中安装了ndk r8,并使用ndk-build.cmd最终构建了c库。然而,JAVAH生成的头文件中有未解决的错误,类型'jint'无法解析,而JNIEnv,jclass

  • 类型“jint”无法解析
  • 类型“JNIEnv的”无法解析
  • 类型“JCLASS”无法解析

昨天没有看到jni.h包含,但今天早上重新启动后,该错误消失了。我还有一个未解决的JNIEXPORT和JNICALL错误,但是#定义它们似乎解决了这个问题。卡住上面的最后3个。 已搜索谷歌和堆栈溢出的答案,但只要有人发现一个解决方案,他们不会说什么解决方案是:(

我已经检查了包含在项目属性中的Java和c/c + +透视图。似乎是包含我想要的jni.h目录,我使用的是android-14 for arm平台,目标是4.0.3 IceCream Sanwich(令人困惑的是API 15?!)。我将尝试使用的AVD用于测试这一点。 我已经试过关闭/重新打开该项目,从Eclipse中删除和重新导入,但没有已经奏效。

我丢失了一些包括?哪一些,我应该在哪里设置呢? 真的很感谢你的帮助,

+2

#include 使用jint和JNIEnv所需的唯一标头是jni.h.但是,你必须在extern“C”中使用它们。可能会发布你的代码的一部分可以帮助 – codetiger 2012-07-26 10:10:17

+0

如果代码与ndk-build一起构建,那么你的问题就是使用eclipse。在菜单中的某处需要指向ndk包含,或者直接禁用ndk插件,所以它不在意。 – 2012-07-26 12:35:51

+1

我不知道如何粘贴一个代码块,而不会像纯文本一样出来。只需说这是一个非常简单的自动生成的头文件,用于将两个数字相乘的函数。 @chris我应该在哪里禁用ndk插件? – Gatica 2012-07-30 14:53:33

回答

16

最近我遇到了同样的问题。在我的情况下,问题是我将Eclipse项目转换为C++项目,但我使用了C类型。因此,要解决这个问题,只是删除行<nature>org.eclipse.cdt.core.ccnature</nature>.project文件从项目目录:

<natures> 
<nature>com.android.ide.eclipse.adt.AndroidNature</nature> 
<nature>org.eclipse.jdt.core.javanature</nature> 
<nature>org.eclipse.cdt.core.cnature</nature> 
<nature>org.eclipse.cdt.core.ccnature</nature> 
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature> 
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature> 
<nature>edu.umd.cs.findbugs.plugin.eclipse.findbugsNature</nature> 
</natures> 

然后重新启动您的Eclipse。欲了解更多信息,你可以阅读this

+1

您可以在Navigator视图中看到.project文件并将其编辑为Eclipse的项目文件编辑器。 – 2013-05-02 14:17:36

+0

有同样的问题,这个答案解决了它。首先,我认为OpenCV以某种方式引发了这些问题,但eclipes是原因。谢谢,这样节省时间! – vRallev 2013-09-03 13:13:13

+0

谢谢!一段时间后,但忘了更新。 我重新导入了该项目,并应用修复,然后它的工作。 – Gatica 2014-05-21 14:37:20

7

尽量只在#include指令前添加一个#undef __cplusplus,像这样:

#undef __cplusplus 
#include <string.h> 
#include <jni.h> 

这将迫使Eclipse来考虑NDK对象的non-c++定义。

+0

我认为在Eclipse(开普勒),ADT和CDT中存在自动索引的各种问题。我尝试了很多,但这解决了我的问题,因为我们的大部分代码都是C而不是CPP。 – Cookster 2014-08-25 22:20:00

19

右键单击项目,然后转到属性属性。

转至C/C++常规 - >路径和符号

包括 - > GNU C添加此等价的:

%ndkroot%\platforms\android-8\arch-arm\usr\include

您可能要指向NDK的其他平台的版本,只是改变了路径的Android的8部分。

+0

谢谢,这也解决了VS2012。 :) – Tom 2014-05-31 02:26:53

+0

这也可以在EclipseMars,android-ndk-r10e中解决它。谢谢! :) – lfree 2015-07-22 13:23:56

+0

我必须使用这个http://stackoverflow.com/a/16891713/2198418 – 2016-03-21 08:54:15

相关问题