Eclipse Ndk开发中的Method 'NewStringUTF' could not be resolved问题

李昱 发布于 2013/02/03 03:33
阅读 12K+
收藏 0
最近需要用到android的ndk,但是在eclipse中,一直提示Method 'NewStringUTF' could not be resolved,诸如此类的错误。
可问题是,jni.h等一系列的依赖库,我都已经导入了,并且也能正常的使用build来编译出动态库文件。但是sb的就是eclipse的cdt,仍旧会不停的提示这类的错误,导致整个项目没办法编译过去。

后来,我先问了baidu,然后又问了google,最终折腾了两天也没办法很好解决这个问题,只好苦逼的使用code::block来写c的jni代码,然后关闭eclipse的code 检查功能,最终才使得项目可以完整编译过去。

后来我思考了一下,并做了一些实验,发现这个估计是adt本身的一个bug,或者说是一个信号??首先,我使用adt的add native support library 来使得jni可以合并到项目中。这时候我发现默认生成的是cpp文件。。c++??这个问题之前我一直忽略了,所以我干脆使用c++来写这个库,结果我发现在cpp文件中,无论你是按照c++语法来写,还是c语法来写,最终结果都是正常的。不会出现这种好似没有导入的错误。 这不得不让我感觉是否google下一步的ndk开发,主要是支持c++了???

可是更加苦逼的是,我仍旧没有好的解决办法,总不能之前的代码在用c++写一遍吧?要不就是继续关闭cdt的语法分析检查,委曲求全的来继续开发?这的确是一个苦逼的问题。

后来,我实在没办法只好去android的官网去看看是否又解决的办法,嘿,别说还真让我找到了。
android本身有一个定制的eclipse版本,我晚上的时候仅仅只是报着死马当活马医的想法下载下来了,结果却发现在这个定制eclipse版本中,居然不会在有问题了?这不得不说是一个非常好的事情,我可以继续在eclipse下工作了,毕竟这个ide是我最喜欢的ide。

可是另一方面,我仍旧是对这个问题感到困惑。我从eclipse的bug提交中发现早在2011年就有人反馈这个bug了,最终他自己关闭了这个bug,说已经解决了,但是如何解决却没有说。我想是否是从那时候开始就一直有这个问题呢?

最后说下我的开发环境:
ubuntu 12.04桌面版
eclipse 4.2.1/4.3(都不能用,或出现上文中我所说的问题)
Eclipse IDE with built-in  ADT 21.01(正常,终于解决了使用ndk开发的问题了)
下载地址:http://eveloper.android.com/intl/zh-CN/sdk/index.html#download

ps。不知道windows上开发的朋友,是否也会遇到类似的问题?李昱希望本文能对在linux下开发的朋友起到一定的帮助,毕竟我翻了baidu,google几百页了,也没有找到完美解决的方案。当然,如果您直接使用c++做jni的开发,那么这个问题应该不会影响到你的。
加载中
1
鸟粪

Go to the project's Properties -> C/C++ General -> Code Analysis. Click the "Use project settings" radio button (or "Configure Workspace Settings..." button). Disable (uncheck) the "Method cannot be resolved" checkbox. 

在这里找到的http://stackoverflow.com/questions/15899813/eclipse-method-newstringutf-could-not-be-resolved

p
prefect00
这个方法能解决!完美
0
cut
cut
估计是你项目里既有*.c文件也有*.cpp文件,一般这样的项目会概率性出问题,有时清理下再重新生成下就行,jni给java的接口100%是c的,用cpp的话要加extern c上去修饰那个接口函数
adong7639
adong7639
正解,测试可以解决问题
0
李昱
李昱

跟这个没关系的哦,在ubuntu下,的确会有这个问题,这个是cdt的bug,官方已经回复了。


0
不及阁大学士
不及阁大学士
cdt的bug,用3.7的eclipse就没问题
0
OTooo
OTooo
windows里面也是一样....
0
飞同小可
飞同小可
这个的确是一个问题
0
jangwee1
jangwee1
我的环境是ubuntu14.04 + eclipse .后来我发现是include 文件不全导致的吧~~因为%JAVA_HOME/include下面还有一个linux/include,这个也要包含进去,因为 jni.h里面 : 

#include "jni_md.h"


返回顶部
顶部