Android JNI之數據類型
阿新 • • 發佈:2017-09-04
vm t mit com ges tablet 類型 sig 完成 靜態註冊
JNI中數據類型的意義在於橋接Java數據類型與C數據類型。
簡單數據類型:
Java Type | Native Type | Description |
---|---|---|
boolean | jboolean | unsigned 8 bits |
byte | jbyte | signed 8 bits |
char | jchar | unsigned 16 bits |
short | jshort | signed 16 bits |
int | jint | signed 32 bits |
long | jlong | signed 64 bits |
float | jfloat | 32 bits |
double | jdouble | 64 bits |
void | void | N/A |
引用類型:
特征類型(Signatures):
看到Signatures是不是有點眼熟,在我的Android JNI之靜態註冊中一帶而過的javah自動生成頭文件,註意看javah不僅完成了方法名的轉換,而且在方法註釋中標註了該方法的Signature,下面說一下這個對應關系。
Type Signature | Java Type |
---|---|
Z | boolean |
B | byte |
C | char |
S | short |
I | int |
J | long |
F | float |
D | double |
L fully-qualified-class ; | fully-qualified-class |
[ type | type[] |
( arg-types ) ret-type | method type |
舉個例子,對於Java方法
long f (int n, String s, int[] arr);
其對應的特征值就是(ILjava/lang/String;[I)J
PS:這個特征值在動態註冊的時候很重要,這關系到你在Java類中聲明的native方法能否正確找到對應的native方法
Android JNI之數據類型