Android NDK开发method GetStringUTFChars’could not be resolved
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相关推荐
- 【Android NDK 开发】JNI 方法解析 ( JNIEnv *env 参数 )
文章目录 一. JNI 方法解析 二. JNIEnv *env 参数解析 三. C 语言 环境中 JNIEnv *env 参数解析 四. C ++ 环境中 JNIEnv *env 参数解析 总结 : ...
- Android NDK开发从0到1
本文的开发环境为 Windows,其他平台操作类似 其实说到 NDK 就不得不提 JNI ( Java Native Interface ) ,JNI 是专门用来与本地代码进行交互而提供的一个接口.通 ...
- Android NDK开发(三)——常见错误集锦以及LOG使用,androidndk
Android NDK开发(三)--常见错误集锦以及LOG使用,androidndk 转载请注明出处:http://blog.csdn.net/allen315410/article/details/ ...
- Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调
Android NDK开发之旅(3):详解JNI数据类型与C/C++.Java之间的互调 (码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/d ...
- android fmod,Android ndk开发:fmod语音学习(二)
在上一篇文章中,介绍以及搭建了FMOD的Android示例,这篇文章是在上一篇文章的基础上写的.所以建议首先读一下我的这篇文章. 本文使用FMOD来实现变声效果,直接使用<Android ndk ...
- Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发
Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )
文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
最新文章
- 获取本年、本月、本周时间范围_为什么“增值税期末留抵税额本年累计数”很快就被废止了...
- 【报表技术】IReport图形化报表开发工具生成PDF文档
- vim 配置_「go」 配置vim用于go 开发
- PyOpenGL之3D界面详解(三)
- 陈天石吴翰清顾嘉唯光速对话(汤晓鸥今天没有晒娃)
- 光感是什么_华强北airpods2洛达1536U-001到底升级了什么?
- 虚幻开放日2017ppt
- Delphi中ListView和TreeView的Item中的内存泄露
- 微信小程序连接无法跳转/ can not navigate to tabBar page错误
- 查询工商单位注册信息 平台
- java基础篇(二) ----- java面向对象的三大特性之继承
- 【python基础】windows下python环境版本更新教程
- Openpose官方编译及其训练模型
- 农村信用社计算机岗位考什么条件,说说农村信用社考试考什么
- @ select 函数使用说明
- 如何用计算机名安装打印机,如何添加打印机(如何在电脑上安装打印机?)
- 华为机试题练习(一)
- linux学习之linux百问,不断更新
- Android 获取联系人姓名与电话号码
- 日拱一卒,热爱可抵岁月漫长
热门文章
- Jquery validate验证表单只验证第一个input元素
- jvm有哪些内存区域
- csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表
- Magento 安装后台登不上的解决方法
- Android 四大组件之——Acitivity(四) Activity是如何加载显示内容的?
- C语言编码小球斜抛运动,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)
- activex for chrome 网银助手_这 10 款插件让你的 Chrome 更好用
- c语言程序存为bin程序,对文件进行加密与解密(c语言)-bin文件打开
- java 空语句_Java空语句怎么写才正确?这样的Java基础知识才是你需要的
- $cfg_dbtype = mysql_Druid连接池二(学习笔记)