1.什么是JNI,什么是NDK。
jni的全称是java native interface (java本地接口),它是一个标准,是C/C++ 和 java 通信的一个桥梁,ndk它是一个配合jni的开发工具包。
2.JNI的优缺点
优点:运算效率高,安全性高(C/C++的代码不容易被反编译),可以运用大量优秀的C/C++语言库
缺点:对开发人员的要求高,在一定程度上限制了java的跨平台能力,JNI虽然依附于JVM但是有一部分是脱离JVM运行的。
3.JNI中方法格式
Java_com_liyahong_jni_1first_MainActivity_stringFromJNI(JNIEnv *env, jobject jobj)
由上面的例子可以看出,其固定格式为:
Java_包名_类名_方法名(JNIENV* env, jobject jobj)
4.不同情况下的native函数,对jobject的定义
1) 当native函数不是静态的时候,jobject对应的是java中调用该函数的对象(也就是this)
2) 当native函数是静态的时候, jobject对应的是调用此函数的class对象(类对象)
5.JNI的基本数据类型和引用类型
c数据类型 JNI数据类型 解释
uint8_t jboolean; /* unsigned 8 bits */
int8_t jbyte; /* signed 8 bits */
uint16_t jchar; /* unsigned 16 bits */
int16_t jshort; /* signed 16 bits */
int32_t jint; /* signed 32 bits */
int64_t jlong; /* signed 64 bits */
float jfloat; /* 32-bit IEEE 754 */
double jdouble; /* 64-bit IEEE 754 */
jobject 任何java对象,包括没有对应类的java对象
jclass java中的class对象
jstring 字符串类对象
jarray 对应任何类型的数组
_jobjectArray * jobjectArray;
_jbooleanArray * jbooleanArra
_jbyteArray * jbyteArray;
_jcharArray * jcharArray;
_jshortArray * jshortArray;
_jintArray * jintArray;
_jlongArray * jlongArray;
_jfloatArray * jfloatArray;
_jdoubleArray * jdoubleArray;
_jthrowable * jthrowable;
_jobject * jweak;
6.JNI中java类型的签名对照表
java类型 签名
boolean Z
byte B
char C
short S
int I
long J
float F
double D
void V
object L完整的类名; 例如 Ljava/lang/String;
array [数组的数据类型 例如:int[] [I double[][] [[D
method (参数类型)返回值类型 例如:int getNumber(int a, int b) -> (II)I
我们了解完JNI基础之后,下一篇将学习通过JNI调用java的方法和属性以及javap的使用:传送门