JNI数据类型在C中的映射
2014-10-10 14:31
253 查看
1、一个JNI代码示例
首先,我们来看一个比较完整的jni代码示例,这段代码在前面的一篇文章中也有提到过,我们再次以他为例说明JNI中的数据类型:#include <string.h> #include <jni.h> // 这里表示返回的是字符串类型 jstring // Java中的包名/Java中的类名/Java调用的方法名/参数列表 Java_com_example_testjni_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz ){ // 下面是一段比较简洁的,对自身系统判断,出于哪一种架构模式 // 主要有x86和arm架构 #if defined(__arm__) #if defined(__ARM_ARCH_7A__) #if defined(__ARM_NEON__) #define ABI "armeabi-v7a/NEON" #else #define ABI "armeabi-v7a" #endif #else #define ABI "armeabi" #endif #elif defined(__i386__) #define ABI "x86" #elif defined(__mips__) #define ABI "mips" #else #define ABI "unknown" #endif // 返回一个字符串 return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI "."); }
上面这段代码的意思是,获取手机当前平台的版本,主要有四个版本可以选择,armeabi-v7,armeabi,x86,mips等。
2、基本数据类型
JNI中的数据类型也主要分为两种:基本数据类型与引用数据类型,如下面的两幅图所示。2.1 基本数据类型
2.2 引用数据类型
2.3 特殊宏定义
在JNI中,C代码部分是符合C语言规范的,可以使用宏定义定义常量,例如:#define JNI_OK (0) /* no error */ #define JNI_ERR (-1) /* generic error */ #define JNI_EDETACHED (-2) /* thread detached from the VM */ #define JNI_EVERSION (-3) /* JNI version error */
不明白宏定义的同学,应该去翻翻C语言的书。
3、特殊情况
在C中,所有其它JNI引用类型,都被定义为与jobject一样。例如:typeof jobject jclass;
在C++中,提供了虚构类,加强子类的关系。
class _jobject {}; class _jobject : public _jobject{}; typeof _jobject *jobject; typeof _jobject *jclass;
相关文章推荐
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- NDK开发 - JNI数据类型与Java数据类型映射关系
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- (4.1.27.5) JNI/NDK开发指南(二)——JNI数据类型及与Java数据类型的映射关系
- JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明
- [转]jni数据类型映射、域描述符说明
- JNI学习积累之二 ---- 数据类型映射、域描述符说明