Android Jni分析2
JVM查找Native方法有两种方式:
静态注册:按照JNI规范的命名规则进行查找。
java_类路径_方法名(路径用下划线分隔)
动态注册:调用JNIEnv提供的RegisterNatives函数,将本地函数注册到JVM中。
静态注册:
我们先来了解JNI中的属性描述符和函数签名的概念。
JNI属性描述符也就是变量类型在JNI中的表示方式,它是由属性的声明类型决定的。例如使用"I"表示int属性,使用"F"表示float属性,使用"D"表示double属性,
使用"Z"表示boolean属性等。对于引用各类型属性的描述符,比如java.lang.String,需要以字母"L"开头, 解析来是JNI类描述符并使用一个分号结束,Java中完整类名中的"."被"/"替换掉了。
因此,对于java.lang.String类型需要使用以下形式的属性描述符: Ljava/lang/String;。
数组类型的描述符由"["以及数组元素类型的描述符组成,例如,[I表示整型数组的属性描述符,以此类推。
我们可以使用javap工具从class文件生成属性描述符。
与属性描述符类似,函数也有函数描述符,通常我们又称为函数签名,一个函数描述符由他的参数类型和返回值类型组成,参数类型在前,且使用一对括号括起来,
参数类型是以他们在函数声明中的顺序罗列的,多个参数类型之间是没有分隔符,如果一个方法没有参数,使用一对空的括号表示即可。函数的返回值类型紧跟在包裹参数类型的右括号后边。
例如(I)V代指接收一个整型参数且返回值为空的函数。()D代指的是没有输入参数,返回值是一个double类型的函数
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论