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开发

    Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...

  2. Android NDK 开发(四)java传递数据到C【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处 ...

  3. Android NDK 开发(三)--常见错误锦集合Log的使用【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511  Android NDK开发经常因某些因素会出现一些意想不到的错误, ...

  4. Android NDK 开发(二) -- 从Hlello World学起【转】

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719  上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...

  5. 跟我学Android NDK开发(一)

    Android NDK 开发跟其它开发一样,首先需要配置好开发环境,本文以 Ubuntu系统为例介绍如何进行 Android NDK 开发环境的配置. 1. 简介 什么是 Android NDK 呢? ...

  6. Android NDK开发Hello Word!

    在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...

  7. Android NDK开发初识

    神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...

  8. android NDK开发环境搭建

    android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...

  9. !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结

    http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...

随机推荐

  1. hive中的NULL(hive空值处理)

    HIVE表中默认将NULL存为\N,可查看表的源文件(hadoop fs -cat或者hadoop fs -text),文件中存储大量\N, 这样造成浪费大量空间.而且用java.python直接进入 ...

  2. Swift:一个简单的货币转换器App在iOS10中的分析和完善

    这本不算是一个完整的货币转换App,只不过是一个小巧的学习性质的程序.该App覆盖了如下几个知识点: 多国语言的支持 通过网络Api接口读取数据 最后我们来修复一个原来代码中的一个小错误作为完美的收尾 ...

  3. Scala:集合类型Collection和迭代器

    http://blog.csdn.net/pipisorry/article/details/52902549 Scala Collection Scala 集合分为可变的和不可变的集合. 可变集合可 ...

  4. Scheme call/cc 研究

    目前尚不清楚实质,但已经能够从形式上理解它的某些好处,有个很简单的连乘函数可以说明: 为了展示究竟发生了什么,我包装了下乘法函数,将其变为mul. 我们将比较product和xproduct的区别. ...

  5. Java学习之继承中的执行顺序详解

    代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...

  6. 【Android应用开发】Android 蓝牙低功耗 (BLE) ( 第一篇 . 概述 . 蓝牙低功耗文档 翻译)

    转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/50515359 参考 :  -- 官方文档 : https://develope ...

  7. java中&和&&的区别 位运算

    1.1. 逻辑与的运算符功能 1.1.1. 测试&& public static void main(String[] args) { int x=5; if (x==6 && ...

  8. iOS开发之Xcode常用调试(Debug)技巧总结

    一.Xcode调试技巧之:NSLog 上面也提到了,在我们日常的开发过程中最常见的Debug方式就是打Log.而在OC语言中,打Log是采用NSLog方法.但是NSLog效率低下,具体原因可以看这篇博 ...

  9. 4.1、Android Stuido配置你的Build Variant

    每个版本的build variant代表了你可以构建的每一个版本.虽然你未直接配置build variants,你可以通过配置build type和product flavor. 比如,一个demo的 ...

  10. 单幅图像的深度学习,对NYU数据集进行划分

    针对分割问题,官方已经划分好了:http://cs.nyu.edu/~silberman/projects/indoor_scene_seg_sup.html import numpy as np i ...