美文网首页java
JNI方法签名规则

JNI方法签名规则

作者: 岁月静好忄 | 来源:发表于2019-08-01 12:47 被阅读0次

本文讲解不使用javah命令怎么将.java文件生成相对应的.h文件

首先看看签名表

java类型 类型签名
byte B
short S
int I
long J
float F
double D
char C
boolean Z
void V
数组 例如:int[]签名为:[I
L全限定名;,比如String, 其签名为Ljava/lang/String;(注意后面有个分号)
_ _1
/ _
; _2
[ _3

例子(主要为同名函数的类型签名)

java代码

public class TestJni
{
    /*验证同名函数*/
    public native long print(byte b,int i);
    public native long print(long l, double d);
    
    /*验证下划线*/
    public native void print_m();
    public native void print_m(long m);
    
    /*验证"/"和";"*/
    public native int print();
    public native short print(String s);
}

生成的h头文件(代码中有注释说明)

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestJni */

#ifndef _Included_TestJni
#define _Included_TestJni
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     TestJni
 * Method:    print
 * Signature: (BI)J
 */
/*BI分别表示参数byte,int的签名*/
JNIEXPORT jlong JNICALL Java_TestJni_print__BI 
  (JNIEnv *, jobject, jbyte, jint);

/*
 * Class:     TestJni
 * Method:    print
 * Signature: (JD)J
 */
/*JD分别表示参数long,double的签名*/
JNIEXPORT jlong JNICALL Java_TestJni_print__JD
  (JNIEnv *, jobject, jlong, jdouble);

/*
 * Class:     TestJni
 * Method:    print_m
 * Signature: ()V
 */
/*_1表示_的签名*/
JNIEXPORT void JNICALL Java_TestJni_print_1m__
  (JNIEnv *, jobject);

/*
 * Class:     TestJni
 * Method:    print_m
 * Signature: (J)V
 */
JNIEXPORT void JNICALL Java_TestJni_print_1m__J
  (JNIEnv *, jobject, jlong);

/*
 * Class:     TestJni
 * Method:    print
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_TestJni_print__
  (JNIEnv *, jobject);

/*
 * Class:     TestJni
 * Method:    print
 * Signature: (Ljava/lang/String;)S
 */
/*Ljava/lang/String;表示String的签名,然后在函数中"/"变成"_",";"变成"_2"*/
JNIEXPORT jshort JNICALL Java_TestJni_print__Ljava_lang_String_2
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

在知道规则后,那么代码的生成只不过是字符串的拼接了,剩下的交给你们自己练手吧

相关文章

  • JNI方法签名规则

    本文讲解不使用javah命令怎么将.java文件生成相对应的.h文件 首先看看签名表 例子(主要为同名函数的类型签...

  • jni生成方法签名

    1、native方法签名生成 编写jni经常写一些jni方法签名是很枯燥,而且经常用错,熟悉语法固然是好事,但有时...

  • Jni方法签名

    1、GetFieldID是得到java类中的参数ID,GetMethodID得到java类中方法的ID,它们只能调...

  • jni新手笔记四:jni数据类型

    基础类型 复杂类型 jni对象的的签名规则为 L类路径; ,例如jstring的签名为 Ljava/lang/St...

  • JNI基础(8): JNI调用Java方法

    8.1 JNI调用Java类的成员方法和静态方法 首先需要了解一下java方法在jni中签名格式。简单来说: (参...

  • JNI基础(7): JNI访问和修改Java类

    7.1 java中的基本类型和引用类型的签名规则 jni中 java类的签名为: L + 包名 + 类名,再将原来...

  • 1. java的数据类型的签名

    开发jni经常需要在jni层调用java层的方法,或者创建引用,这个时候就需要用到java的属性或者方法的签名,详...

  • JNI类型签名和方法签名

    一、基本数据类型 二、引用数据类型 注意:1、引用数据类型则不能直接使用,需要根据JNI函数进行相应的转换后,才能...

  • JNI,NDK编程专题

    JNI编程注册方式 JVM 查找 native 方法有两种方式: 1)、按照 JNI 规范的命名规则(静态注册) ...

  • Java 生成 JNI 头文件

    介绍两个生成jni头文件的方法,一般是用函数签名类型来做native 实现 1. 使用 javac 生成 JNI ...

网友评论

    本文标题:JNI方法签名规则

    本文链接:https://www.haomeiwen.com/subject/yelqdctx.html