开发jni经常需要在jni层调用java层的方法,或者创建引用,这个时候就需要用到java的属性或者方法的签名,详细介绍如下:
一 . java中8种基本数据类型签名:
Java数据类型 签名 jni数据类型
char C jchar
byte B jbyte
short S jshort
int I jint
long J jlong
double D jdouble
float F jfloat
boolean Z jboolean
二.java中8种包装类数据类型签名:
Character Ljava/lang/Character;
Byte Ljava/lang/Byte;
Short Ljava/lang/Short;
Integer Ljava/lang/Integer;
Long Ljava/lang/Long;
Double Ljava/lang/Double;
Float Ljava/lang/Float;
Boolean Ljava/lang/Boolean;
三.类类型签名:
java类型 |
jni类型 |
签名 |
Object |
jobject |
Ljava/lang/Object; |
String |
jstring |
Ljava/lang/String; |
L$; $在实际使用过程中需要替换成类的全路径,并且需要把 . 替换为/
四.方法签名:
($1)$2 $1是每个参数的签名,中间不需要空格或者分割符
$2是方法的返回值签名
五.
Java类型 |
C++类型 |
签名 |
Array |
jarray |
[elementType |
Object[] |
jobjectArray |
[Ljava/lang/Object; |
boolean[] |
jbooleanArray |
[z |
byte[] |
jbyteArray |
[B |
char[] |
jcharArray |
[C |
short[] |
jshortArray |
[S |
int[] |
jintArray |
[I |
long |
jlongArray |
[J |
float[] |
jfloatArray |
[F |
double[] |
jdoubleArray |
[D |
1)数组签名
[$ $是每个数据类型的签名,其中不定长参数也用此方式处理
2)特殊类型
Map Ljava/util/Map;
List Ljava/util/List;
六:最后补充一个void和泛型
Void Ljava/lang/Void;
T Ljava/lang/Object;
七.需要注意的地方
1).类型的数据签名后面都有分号;而基本数据类型后面没有分号;
2).基本数据类型的包装类也是类类型,故也用类方式来处理
3).自定义类,不要忘记了最前面的L
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。