头文件实例
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lilacouyang_firstjni_JniMethod */
#ifndef _Included_com_lilacouyang_firstjni_JniMethod
#define _Included_com_lilacouyang_firstjni_JniMethod
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lilacouyang_firstjni_JniMethod // Native方法的类名称。
* Method: getNativeString // Native 方法名称
* Signature: ()Ljava/lang/String; // 方法的标识,一个标识符,主要供在 JNI 操作 java对象的方法使用的。
// Signature一般是两部分构成,一个方法的参数,另一个是返回类型。
// 方法参数在括号里面,返回类型在后面
*/
JNIEXPORT jstring JNICALL Java_com_lilacouyang_firstjni_JniMethod_getNativeString
(JNIEnv *, jclass);
/*
* Class: com_nedu_jni_helloword_HeaderFile
* Method: doInt
* Signature: (DFZ[C)I
*/
JNIEXPORT jint JNICALL Java_com_nedu_jni_helloword_HeaderFile_doInt__DFZ_3C
(JNIEnv *, jclass, jdouble, jfloat, jboolean, jcharArray);
#ifdef __cplusplus
}
#endif
#endif
基本类型对应关系
规则
- 方法参数或者返回值为java中的对象时,必须以“L”加上其路径,不过此路径必须以“/”分开,自定义的对象也使用本规则,不在包中时直接“L”加上类名称。
- 方法参数或者返回值为数组时类型前加上[,例如[I表示int[],[[[D表示 double[][][],即几维数组就加几个[。
- 方法组成分析:
JNIEXPORT jstring JNICALL Java_com_lilacouyang_firstjni_JniMethod_getNativeString
(JNIEnv *, jclass)
- JNIEXPORT 和 JNICALL:JNI 的关键字,表示此函数是要被 JNI 调用的;
- jstring:方法的返回类型;
- Java:为 JNI 中标识此方法来源于 java 的标识头;
- com_lilacouyang_firstjni_JniMethod_getNativeString:方法所在类的包名+类名+方法名
- (JNIEnv *, jclass):参数,它们有一个共同的特点,包含 JNIEnv *――它是一个接口指针,
用于定位函数表中的函数!在 JNI 规范中一般称 为 “Interface Pointer”。
JNI 中的操作过程是面向过程的!后面的jobject 是 一个指向该类的指针,
类似与 C 语言中的 this。这个第二个参数是变化的,当该方法为类的实例方法时为 jobject;
当该方法为类方法(即静态方法)时该参数为 jclass,指向该类的 class。