JNI方法签名规则(转载)
2014-09-25 10:36
357 查看
《Android的设计与实现:卷Ⅰ》第2章框架基础JNI,本章以Log系统的JNI实例为引线,贯穿了JNI技术的主要方面,让读者对JNI有足够的认识,具备深入学习框架层代码的基础。本节为大家介绍JNI方法签名规则。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
2.4.3 JNI方法签名规则
有了数据类型之间的对应关系,JNI就可以正确识别并转换Java类型。那JNI又是如何识别Java的方法呢?
Java支持方法重载,仅靠函数名是无法唯一确定一个方法的。于是JNI提供了一套签名规则,用一个字符串来唯一确定一个方法。其规则如下:
(参数1类型签名参数2类型签名……参数n类型签名)返回值类型签名
以上签名字符串之间均没有空格。
类型签名又有一些规则,如表2-3所示。
表2-3 JNI类型签名规则
(续)
注意 类的签名规则是:“L+全限定类名+;” 三部分组成,其中全限定类名以”/”分隔,而不是用“.”或者“_”分隔。
例如,Java 方法:
long fun (int n, String str, int[] arr);
其方法签名:
(ILjava/lang/String;[I)J
括号里面的内容分成三部分,之间没有空格,即“I”、“Ljava/lang/String;”和“[I”,分别代表 int、String和int[]。括号外面是返回值类型签名,J代表long型。
回到Log系统的例子,JNINativeMethod结构体中第二个元素便是方法签名信息, 代码如下:
static JNINativeMethod gMethods[] = {
{ "isLoggable", "(Ljava/lang/String;I)Z",(void*)
android_util_Log_isLoggable },
{ "println_native","(IILjava/lang/String;Ljava/lang/String;)I",(void*)
android_util_Log_println_native },
};
可以看出isLoggable函数有两个参数,一个是String类型,另一个是int类型,返回值为boolean类型。
至此,我们已经可以正确识别类型信息和函数信息。可如何操作对象并访问它们的成员变量和方法呢?下一节继续介绍。
AD:2014WOT全球软件技术峰会北京站 课程视频发布
2.4.3 JNI方法签名规则
有了数据类型之间的对应关系,JNI就可以正确识别并转换Java类型。那JNI又是如何识别Java的方法呢?
Java支持方法重载,仅靠函数名是无法唯一确定一个方法的。于是JNI提供了一套签名规则,用一个字符串来唯一确定一个方法。其规则如下:
(参数1类型签名参数2类型签名……参数n类型签名)返回值类型签名
以上签名字符串之间均没有空格。
类型签名又有一些规则,如表2-3所示。
表2-3 JNI类型签名规则
(续)
注意 类的签名规则是:“L+全限定类名+;” 三部分组成,其中全限定类名以”/”分隔,而不是用“.”或者“_”分隔。
例如,Java 方法:
long fun (int n, String str, int[] arr);
其方法签名:
(ILjava/lang/String;[I)J
括号里面的内容分成三部分,之间没有空格,即“I”、“Ljava/lang/String;”和“[I”,分别代表 int、String和int[]。括号外面是返回值类型签名,J代表long型。
回到Log系统的例子,JNINativeMethod结构体中第二个元素便是方法签名信息, 代码如下:
static JNINativeMethod gMethods[] = {
{ "isLoggable", "(Ljava/lang/String;I)Z",(void*)
android_util_Log_isLoggable },
{ "println_native","(IILjava/lang/String;Ljava/lang/String;)I",(void*)
android_util_Log_println_native },
};
可以看出isLoggable函数有两个参数,一个是String类型,另一个是int类型,返回值为boolean类型。
至此,我们已经可以正确识别类型信息和函数信息。可如何操作对象并访问它们的成员变量和方法呢?下一节继续介绍。
相关文章推荐
- android JNI调用过程中的方法签名规则
- JNI方法签名规则
- JNI方法签名规则
- 对JNI方法签名规则讲的很好的文章
- JNI方法签名规则
- JNI方法签名规则
- JNI/NDK开发指南(二)——JVM查找java native方法的规则
- Applet数字签名,授予访问本地资源的方法(转载)
- JNI里的数据类型 和签名方法
- Android中JNI的使用方法(转载)
- Chap9:如何编写jni方法(转载)
- 本地方法(JNI)——编码签名
- 【转】对于JNI方法名,数据类型和方法签名的一些认识
- Java方法签名与JNI,反射
- JNI调用本地库 打包后的使用dll的方法 [转载]
- Android有关JNI 学习(两)为JNI方法名称,数据类型和方法签名的一些知识
- 技术转载:Jni学习四:如何编写jni方法
- 技术转载:Jni学习四:如何编写jni方法
- C# 匿名方法和拉姆达表达式 (2012-04-27 23:27:15)转载▼ 标签: 杂谈 匿名方法本质上是一传递给委托的代码块,是使用委托的另一种方法。 规则: 1、匿名方法中不能使用跳转语句跳
- JNI中方法签名