安卓中JNI接口签名如何生成

签名	java类型
V	void
Z	boolean
I	int
J	long
D	double
F	float
B	byte
C	char
S	short
[I	int[]
[F	float[]
[B	byte[]
[C	char[]
[S	short[]
[D	double[]
[J	long[]
[Z	boolean[]
L用/分割包的完整类名; Ljava/lang/String;	Object

例如: void set(String str); 签名:”(Ljava/lang/String;)V”

可以用javap -s "ClassFile" 命令查看方法签名

  • 调用静态方法使用 CallStaticXXXMethod/V/A 函数,XXX 代表返回值的数据类型。如:CallStaticIntMethod
  • 调用实例方法使用 CallXXXMethod/V/A 函数,XXX 代表返回的数据类型,如:`CallIntMethod
  • 获取一个实例方法的 ID,使用 GetMethodID 函数,传入方法名称和方法签名
  • 获以一个静态方法的 ID,使用 GetStaticMethodID 函数,传入方法名称和方法签名
  • 获取构造方法 ID,方法名称使用””
  • 获取一个类的 Class 实例,使用 FindClass 函数,传入类描述符。JVM 会从 classpath 目录下开始搜索。
  • 创建一个类的实例,使用 NewObject 函数,传入 Class 引用和构造方法 ID
  • 删除局部变量引用,使用 DeleteLocalRef, 传入引用变量
  • 方法签名格式:(形参参数列表)返回值类型。注意:形参参数列表之间不需要用空格或其它字符分隔
  • 类描述符格式:L 包名路径/类名;,包名之间用/分隔。如:Ljava/lang/String;
  • 调用 GetMethodID 获取方法 ID 和调用 FindClass 获取 Class 实例后,要做异常判断

在填写签名的时候,很多同学都不知道怎么弄。其实也很简单,比如是void类型的,则签名信息”()V”来表示,如果是void(string b ,int a)这样带参数的则是 “(Ljava/lang/String;I)V” 等等,或者 通过javap -s命令生成 ;

该文章属于:计算机技术网原创

转载请注明标题:安卓中JNI接口签名如何生成-计算机技术网

转载请注明出处:https://www.ctvol.com/asreverse/34034.html

(1)
上一篇 2020年4月19日
下一篇 2020年4月19日

精彩推荐