JNI数据类型和类型签名

1.JNI数据类型

1.1 基本数据类型(java类型:JNI类型)

int:jint
byte:jbyte
long:jlong
double:jdouble
fload:jfload
short:jshort
boolean:jboolean
char:jchar

1.2 对象类型

class:jclass
throwable:jthrowable
string:jstring
除jclass, jthrowable, jstring 其他都是jobject表示。

1.3 数组类型

char[]:jcharArray
byte[]:jbyteArray
int[]:jintArray
float[]:jfloatArray
long[]:jlongArray
double[]:jdoubleArray
boolean[]:jbooleanArray
object[]:jobjectArray

2.JNI类型签名描述

1.1 基本类型签名

byte B
beal: Z
long: J
int:I
float: F
double:D
short:S

1.2 对象类型签名

引用对象:L<对象包名>/<类名>;
String: Ljava/lang/String;
Object:Ljava/lang/Object;
MediaPlayer:Landroid/media/MediaPlayer;

1.3 数组类型签名

byte[] :[B
int[]: [I
short[]:[S
float[]:[F
double[]:[D
boolean[]:[Z
long[]:[J
String[]:[Ljava/lang/String;

3.类型签名实例

3.1 域

java变量:
String s;
JNI域:
Ljava/lang/String;

java变量:
String s[];
JNI域:
[Ljava/lang/String;

3.2 函数

native方法:
public void native fromJni(String msg, int i);
JNI函数:
(Ljava/lang/String;I)V

native方法:
public int[] native fromJni(String[] msg, int[] i);
JNI函数:
([Ljava/lang/String;[I)[I

3.3 数组

Java int[] i 对应 JNI [I
Java String[] ss 对应JNI [Ljava/lang/String;
Java boolean[] 对应JNI [Z
Java float[][] fs 对应JNI [[F
.......
其实不用记住,使用javap -s 对应的build文件对应的native的class
例如:javap -s MainActivity.class

 nativeapp javap 
用法: javap  
其中, 可能的选项包括:
  -help  --help  -?        输出此用法消息
  -version                 版本信息
  -v  -verbose             输出附加信息
  -l                       输出行号和本地变量表
  -public                  仅显示公共类和成员
  -protected               显示受保护的/公共类和成员
  -package                 显示程序包/受保护的/公共类
                           和成员 (默认)
  -p  -private             显示所有类和成员
  -c                       对代码进行反汇编
  -s                       输出内部类型签名
  -sysinfo                 显示正在处理的类的
                           系统信息 (路径, 大小, 日期, MD5 散列)
  -constants               显示最终常量
  -classpath         指定查找用户类文件的位置
  -cp                指定查找用户类文件的位置
  -bootclasspath     覆盖引导类文件的位置
nativeapp javap -s MainActivity.class
Compiled from "MainActivity.java"
public class jni.chowen.com.nativeapp.MainActivity extends android.support.v7.app.AppCompatActivity {
  public jni.chowen.com.nativeapp.MainActivity();
    descriptor: ()V

  protected void onCreate(android.os.Bundle);
    descriptor: (Landroid/os/Bundle;)V

  protected void onResume();
    descriptor: ()V

  public native void passBitmap(java.lang.Object);
    descriptor: (Ljava/lang/Object;)V

  public native int add(int, int);
    descriptor: (II)I

  public native java.lang.String stringFromJNI();
    descriptor: ()Ljava/lang/String;

  public native java.lang.String stringFromJNI2();
    descriptor: ()Ljava/lang/String;

  public native java.lang.String fromJaveToNative(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;

  public native java.lang.String signture(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/String;

  public native void throwException(java.lang.String);
    descriptor: (Ljava/lang/String;)V

  public java.lang.String getPackageN();
    descriptor: ()Ljava/lang/String;

  public void fromNativeJNI();
    descriptor: ()V

  public void fromNativeJNI2(java.lang.String);
    descriptor: (Ljava/lang/String;)V

  public static void fromNativeJNI3(java.lang.String);
    descriptor: (Ljava/lang/String;)V

  public static void fromNativeJNI4();
    descriptor: ()V

  public int getValue();
    descriptor: ()I

  public void modifyValue(int);
    descriptor: (I)V

  static {};
    descriptor: ()V
}

你可能感兴趣的:(JNI数据类型和类型签名)