Android NDK开发method GetStringUTFChars’could not be resolved
发布日期:2021-06-30 21:49:32 浏览次数:2 分类:技术文章

本文共 1505 字,大约阅读时间需要 5 分钟。

Android NDK开发method GetStringUTFChars’could not be resolved

 

图1

最近用到android的ndk,但在eclipse中提示method GetStringUTFChars’could not beresolved这样的错误,但奇怪的是我也增加了图1的代码到android-ndk-r10b\samples\hello-jni\jni\hello-jni.c中却没有这个编译错误,我分别右击编译出错的AppCenter和hello-jni工程,发现AppCenter工程属性多了C/C++ Build和C/C++ General,如下图:

图2

解决办法是右键工程 property->C/C++ General->CodeAnalysis—>配置当前工程(或者workspace)->使 method cannot be resolved  不选中(即此项不进行报错 )

 

这样就可以编译成功了,但我在做一些测试又改回编译OK的状态,却有另一个编译错误:

no matchingfunction for call to '_JNIEnv::GetStringUTFChars(JNIEnv*&, _jstring*&,

        jboolean*)'

改为下面的代码就可以了

const char*path_utf = env->GetStringUTFChars(path, &iscopy);

 

可以为什么在anroid NDK中自带的例子没有这个问题呢?因为Android NDK带的jni例子都是使用C定义JNI接口,但是在项目中,因为Native代码是用C++编写的。

JNIEnv *env参数的使用有下面的差别:

所有JNI接口的第一个参数是JNIEnv *env, 在C中,使用方法是

(*env)->NewStringUTF(env,"Hello from JNI!");

但在C++中,其调用方法是

env->NewStringUTF("Hellofrom JNI!");

 

我们来看jni.h的相关内容:

#if defined(__cplusplus)

typedef _JNIEnvJNIEnv;

typedef _JavaVMJavaVM;

#else

typedef const struct JNINativeInterface* JNIEnv;

typedef const struct JNIInvokeInterface* JavaVM;

#endif

可以看到,对于C和C++,定义有所不同,主要原因是C不支持类,所以采用了一种变通的方法,下面给出JNIEnv分别对应C和C++的定义:

(1)  C

/* JNI spec says this returns const jbyte*, but that'sinconsistent */

const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);

 

(2)  C++

struct _JNIEnv {

……….

const char*GetStringUTFChars(jstring string, jboolean* isCopy)

{

returnfunctions->GetStringUTFChars(this, string, isCopy); }

………………

}

 

参考链接:

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

 

 

转载地址:https://loongembedded.blog.csdn.net/article/details/40897819 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:在android C/C++ native编程(ndk)中使用logcat
下一篇:Android+Eclipse修改包路径

发表评论

最新留言

很好
[***.229.124.182]2024年05月04日 07时19分17秒