1. 程式人生 > >JNI中java類型的簡寫

JNI中java類型的簡寫

mat string類 基本 obj 組類型 pan star cme strong

在JNI中,當我們使用GetFieldID/GetStaticFieldID或GetMethodID/GetStaticMethodID及定義JNINativeMethod等時,我們需要表示成員變量的類型,或函數傳入參數或返回的類型。JNI把Field的類型,或函數傳入參數或返回值的類型進行簡寫以char*的形式進行表示。

對於成員變量,直接用java類型的簡寫表示成員變量的類型就可以 比如:"I"表示該成員變量是Int類型 "Ljava/lang/String;"表示該成員變量是String類型 示例1: jfieldID str = (env)->GetFieldID(objectClass,"name","Ljava/lang/String;");
jfieldID ival = (env)->GetFieldID(objectClass,"serial","I"); 對於成員函數,是以"(*)+"形式表示函數的有哪些傳入參數,傳入參數的類型,返回值的類型。"()" 中的字符表示傳入參數,後面的則代表返回值。 例如: "()V" 就表示void Func(); "(II)V" 表示 void Func(int, int); "(Ljava/lang/String;Ljava/lang/String;)I".表示 int Func(String,String)
示例2: static JNINativeMethod gPowerManagerServiceMethods[] = { /* name, signature, funcPtr */ { "nativeInit", "()V", (void*) android_server_PowerManagerService_nativeInit }, { "nativeSetPowerState", "(ZZ)V", (void*) android_server_PowerManagerService_nativeSetPowerState }, { "nativeStartSurfaceFlingerAnimation", "(I)V",
(void*) android_server_PowerManagerService_nativeStartSurfaceFlingerAnimation }, }; 關於類型簡寫,首先請參照下表。 表A

Java 類型

符號

Boolean

Z

Byte

B

Char

C

Short

S

Int

I

Long

L

Float

F

Double

D

Void

V

objects對象

以"L"開頭,以";"結尾,中間是用"/" 隔開的包及類名。

比如:Ljava/lang/String;

如果是嵌套類,則用$來表示嵌套。

例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

另外數組類型的簡寫,則用"["加上如表A所示的對應類型的簡寫形式進行表示就可以了, 比如[I表示 int [];[L/java/lang/objects;表示Objects[],另外。引用類型(除基本類型的數組外)的標示最後都有個";"

JNI中java類型的簡寫