頭文件實例
/* 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。