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 <options> <classes>
其中, 可能的选项包括:
-help --help -? 输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示最终常量
-classpath <path> 指定查找用户类文件的位置
-cp <path> 指定查找用户类文件的位置
-bootclasspath <path> 覆盖引导类文件的位置
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
}
网友评论