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

Android NDK开发method GetStringUTFChars’could not be resolved相关推荐

  1. 【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )

    文章目录 一. JNI 方法解析 二. JNIEnv *env 参数解析 三. C 语言 环境中 JNIEnv *env 参数解析 四. C ++ 环境中 JNIEnv *env 参数解析 总结 : ...

  2. Android NDK开发从0到1

    本文的开发环境为 Windows,其他平台操作类似 其实说到 NDK 就不得不提 JNI ( Java Native Interface ) ,JNI 是专门用来与本地代码进行交互而提供的一个接口.通 ...

  3. Android NDK开发(三)——常见错误集锦以及LOG使用,androidndk

    Android NDK开发(三)--常见错误集锦以及LOG使用,androidndk 转载请注明出处:http://blog.csdn.net/allen315410/article/details/ ...

  4. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调

    Android NDK开发之旅(3):详解JNI数据类型与C/C++.Java之间的互调 (码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/d ...

  5. android fmod,Android ndk开发:fmod语音学习(二)

    在上一篇文章中,介绍以及搭建了FMOD的Android示例,这篇文章是在上一篇文章的基础上写的.所以建议首先读一下我的这篇文章. 本文使用FMOD来实现变声效果,直接使用<Android ndk ...

  6. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  7. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  8. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  9. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

最新文章

  1. 获取本年、本月、本周时间范围_为什么“增值税期末留抵税额本年累计数”很快就被废止了...
  2. 【报表技术】IReport图形化报表开发工具生成PDF文档
  3. vim 配置_「go」 配置vim用于go 开发
  4. PyOpenGL之3D界面详解(三)
  5. 陈天石吴翰清顾嘉唯光速对话(汤晓鸥今天没有晒娃)
  6. 光感是什么_华强北airpods2洛达1536U-001到底升级了什么?
  7. 虚幻开放日2017ppt
  8. Delphi中ListView和TreeView的Item中的内存泄露
  9. 微信小程序连接无法跳转/ can not navigate to tabBar page错误
  10. 查询工商单位注册信息 平台
  11. java基础篇(二) ----- java面向对象的三大特性之继承
  12. 【python基础】windows下python环境版本更新教程
  13. Openpose官方编译及其训练模型
  14. 农村信用社计算机岗位考什么条件,说说农村信用社考试考什么
  15. @ select 函数使用说明
  16. 如何用计算机名安装打印机,如何添加打印机(如何在电脑上安装打印机?)
  17. 华为机试题练习(一)
  18. linux学习之linux百问,不断更新
  19. Android 获取联系人姓名与电话号码
  20. 日拱一卒,热爱可抵岁月漫长

热门文章

  1. Jquery validate验证表单只验证第一个input元素
  2. jvm有哪些内存区域
  3. csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表
  4. Magento 安装后台登不上的解决方法
  5. Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
  6. C语言编码小球斜抛运动,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)
  7. activex for chrome 网银助手_这 10 款插件让你的 Chrome 更好用
  8. c语言程序存为bin程序,对文件进行加密与解密(c语言)-bin文件打开
  9. java 空语句_Java空语句怎么写才正确?这样的Java基础知识才是你需要的
  10. $cfg_dbtype = mysql_Druid连接池二(学习笔记)