动态注册
当我们执行System.loadLibrary时。
static {
System.loadLibrary("native-lib");
}
cpp文件首先将调用JNI_Onload方法(需要自己写)
int JNI_OnLoad(JavaVM *vm, void *r){
return JNI_VERSION_1_6;
}
所以我们也可以在这个方法进行jni的初始化工作。
最常见的的操作就是动态注册方法。
(记得动态方法至少也得加原来的那两个参数,不然传递过来的值什么会出现乱码)
void cppMethod(JNIEnv *env, jobject thiz){
}
//声明哪个类需要动态注册。
static const char *mClassName="com/example/jnitwo/MainActivity";
static const JNINativeMethod method[]={
{
"javaMethod","()V",(void*)cppMethod}
};
JavaVM *vm;
int JNI_OnLoad(JavaVM *vm, void *r){
::vm=vm;
//获得JNIEnv。nullptr取代NULL给指针赋值,表示指针还没初始化。
JNIEnv *env= nullptr;
//小于0则失败,等于0成功
jint i = vm->GetEnv((void **