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问题

http://www.android100.org/html/201308/09/3935.html

jni 调用c和c++的区别.

http://blog.csdn.net/kandyer/article/details/9097203

更多相关文章

  1. Android中ExpandableListView的使用
  2. TabWidget/TabHost的两种使用方法
  3. android,NativeActivity使用
  4. Android(安卓)logcat内核信息
  5. Android内核的编译与裁剪
  6. 【原创】Proton在Android上的编译
  7. Android(安卓)Studio动态自定义编译输出的apk文件名
  8. Android上Sensor移植的总结
  9. 如何编译 MTK 的模拟器(android)

随机推荐

  1. 请收好这一份全面 & 详细的Android学习指
  2. Android日志系统分析之日志设备驱动程序
  3. 【Android】Android之USB
  4. 创建Android库的方法及Android(安卓).aar
  5. Android本地视频播放器开发--视频解码
  6. Andriod编程基础(一):Andriod的优势及光明
  7. 开发可统计单词个数的Android驱动程序(1)
  8. Android应用程序的类型
  9. android弹力效果菜单、组件化项目、电影
  10. android小说阅读、MVP + RxJava + Retrof