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
http://blog.csdn.net/kandyer/article/details/9097203
Android NDK开发method GetStringUTFChars’could not be resolved的更多相关文章
- Android NDK开发
Android NDK 开发教程(极客学院) 一.Android NDK环境搭建 使用最新ndk,直接抛弃cygwin,以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin( ...
- Android NDK 开发(四)java传递数据到C【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41845701 前面几篇文章介绍了Android NDK开发的简单概念.常见错误及处 ...
- Android NDK 开发(三)--常见错误锦集合Log的使用【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41826511 Android NDK开发经常因某些因素会出现一些意想不到的错误, ...
- Android NDK 开发(二) -- 从Hlello World学起【转】
转载请注明出处:http://blog.csdn.net/allen315410/article/details/41805719 上篇文章讲述了Android NDK开发的一些基本概念,以及NDK ...
- 跟我学Android NDK开发(一)
Android NDK 开发跟其它开发一样,首先需要配置好开发环境,本文以 Ubuntu系统为例介绍如何进行 Android NDK 开发环境的配置. 1. 简介 什么是 Android NDK 呢? ...
- Android NDK开发Hello Word!
在之前的博客中已经为大家介绍了,如何在win环境下配置DNK程序,本篇我将带大家实现一个简单的Hello jni程序,让大家真正感受一下NDK开发的魅力.这里我们选择使用C+JAVA开发Android ...
- Android NDK开发初识
神秘的Android NDK开发往往众多程序员感到兴奋,但又不知它为何物,由于近期开发应用时,为了是开发的.apk文件不被他人解读(反编译),查阅了很多资料,其中有提到使用NDK开发,怀着好奇的心理, ...
- android NDK开发环境搭建
android NDK开发环境搭建 2012-05-14 00:13:58 分类: 嵌入式 基于 Android NDK 的学习之旅-----环境搭建 工欲善其事必先利其器 , 下面介绍下 Eclip ...
- !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
http://hujiaweibujidao.github.io/blog/2013/11/18/android-ndk-and-opencv-development-3/ Android Ndk a ...
随机推荐
- linux网络编程之二-----多播(组播)编程
多播编程实例 服务器端 下面是一个多播服务器的例子.多播服务器的程序设计很简单,建立一个数据包套接字,选定多播的IP地址和端口,直接向此多播地址发送数据就可以了.多播服务器的程序设计,不需要服务器加入 ...
- Mysql创建、删除用户、用户管理等相关:转载http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 ...
- tomcat中http与https协议socket工厂
- python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd
官方文档 只是支持win32, 不支持win64 所以很麻烦 民间高人,集中做了一堆辅助库,下载后,用python安装目录下的scripts中,pip和easy_install就可以安装了 pytho ...
- 指令汇B新闻客户端开发(三) 下拉刷新
现在我们继续这个新闻客户端的开发,今天分享的是下拉刷新的实现,我们都知道下拉刷新是一个应用很常见也很实用的功能.我这个应用是通过拉ListView来实现刷新的,先看一张刷新的原理图 从图中可知,手指移 ...
- Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》
如果想要获取系统手机应用的详细信息,那么下边代码可以直接作为模板使用.笔者对每一行代码都做了注解,供您参考.直接上代码: package com.example.itydl.engines; impo ...
- expect 简单使用
简单的登陆脚本 这样就不用每次都输入ssh命令了,使用密码还是有些不安全,谨慎使用. #!/usr/bin/expect -f #filename: auto_login.sh #author: or ...
- UNIX网络编程——非阻塞connect:时间获取客户程序
#include "unp.h" int connect_nonb(int sockfd, const SA *saptr, socklen_t salen, int nsec) ...
- 任务执行器——Executor
上节说到接收器Acceptor在接收到socket后会有一系列简单的处理,其中将socket扔进线程池是最重要的一步,线程池是一个怎样东西?其原理在前面的"线程池原理"章节已经说明 ...
- ECMAScript 6之Set和Map数据结构
Set 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, ...