base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could no
2016-05-09 23:05
645 查看
Android NDK带的jni例子都是使用C定义JNI接口,但是在项目中,因为Native代码是用C++编写的,所以我就使用C++定义JNI接口,但是初学者总会遇到很多问题:
jni中的常见问题:
1、base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could not be resolved
其中这个问题是跟你jni配置时到底是.cpp还是.c文件及如图所示:
和
解决问题的办法:
1》使用c++来写代码,文件名就必须【cpp】后缀:
C++ code must have .cpp extension.,必须cpp后缀,c后缀不行;
2》使用c来写代码,文件名就必须【c】后缀;
2》调用的代码这么来写:
//return (*env)->NewStringUTF(env, "Hello from JNI !");//如果是用C语言格式就用这种方式
//return env->NewStringUTF((char *)"Hello from JNI !");//C++用这种格式
错误的办法:
网上有一种方法是如下,但这方方法明显是骗小孩子的,哪有用忽略这种东西的,不推荐
正确的办法:
问题是就是上面第二点,因此
这是如果想深究原因可以查看<jni.h>
1、用.cpp文件定义的
const char* GetStringUTFChars(jstring string, jboolean* isCopy)
{ return functions->GetStringUTFChars(this, string, isCopy); }
2、用.c文件定义
const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
jni中的常见问题:
1、base operand of '->' has non-pointer type 'JNIEnv {aka _JNIEnv}'和Method 'GetStringUTFChars' could not be resolved
其中这个问题是跟你jni配置时到底是.cpp还是.c文件及如图所示:
和
解决问题的办法:
1》使用c++来写代码,文件名就必须【cpp】后缀:
C++ code must have .cpp extension.,必须cpp后缀,c后缀不行;
2》使用c来写代码,文件名就必须【c】后缀;
2》调用的代码这么来写:
//return (*env)->NewStringUTF(env, "Hello from JNI !");//如果是用C语言格式就用这种方式
//return env->NewStringUTF((char *)"Hello from JNI !");//C++用这种格式
错误的办法:
网上有一种方法是如下,但这方方法明显是骗小孩子的,哪有用忽略这种东西的,不推荐
正确的办法:
问题是就是上面第二点,因此
这是如果想深究原因可以查看<jni.h>
1、用.cpp文件定义的
const char* GetStringUTFChars(jstring string, jboolean* isCopy)
{ return functions->GetStringUTFChars(this, string, isCopy); }
2、用.c文件定义
const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android NDK开发之:配置环境的详解
- Android开发的IDE、ADT、SDK、JDK、NDK等名词解释
- Android提高之使用NDK把彩图转换灰度图的方法
- Android使用Jni实现压力锅数据检测效果示例
- JAVA中JNI的简单使用分享
- c++ mk文件出错Jni调用产生java.lang.UnsatisfiedLinkError错误解决方法
- 解析Java的JNI编程中的对象引用与内存泄漏问题
- 探讨:如何在NDK中呼叫Java的class
- 安卓应用开发通过java调用c++ jni的图文使用方法
- Java调用c++库
- Android App 增量更新实例(Smart App Updates)
- 每周总结20130814——Android NDK环境的搭建和使用,YUV420SP格式图像的处理
- Java调用动态链接库
- Mac下用Android Studio运行NDK samples
- Android NDK pthreads详细使用
- Android Studio中NDK开发傻瓜教程(CMake)