1、JNIDynamicLoad.java
package com.example.demo.jni;
/**
* author : huangyi
* date : 2020/2/9
* desc :jni动态注册
*/
public class JNIDynamicLoad {
static {
System.loadLibrary("dynamic-lib");
}
public native int sum(int x, int y);
public native String getNativeString();
}
2、jni_dynamic_load.cpp
#include <base.h>
#include <jvm.h>
#define JAVA_CLASS "com/example/demo/JNIDynamicLoad"
jstring getMessage(JNIEnv *env, jobject jobj) {
return env->NewStringUTF("this is msg");
}
jint plus(JNIEnv *env, jobject jobj, int x, int y) {
return x + y;
}
static JNINativeMethod gMethods[] = {
{"getNativeString", "()Ljava/lang/String;", (void *) getMessage},
{"sum", "(II)I", (void *) plus}
};
int registerNativeMethods(JNIEnv *env, const char *name, JNINativeMethod *methods, jint nMethods) {
jclass jcls;
jcls = env->FindClass(name);
if (jcls == nullptr) {
return JNI_FALSE;
}
if (env->RegisterNatives(jcls, methods, nMethods) < 0) {
return JNI_FALSE;
}
return JNI_TRUE;
}
JNIEXPORT int JNICALL JNI_OnLoad(JavaVM *vm, void * reserved) {
JNIEnv *env;
if (vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6) != JNI_OK) {
return JNI_FALSE;
}
//setJvm(vm);
registerNativeMethods(env, JAVA_CLASS, gMethods, 2);
LOGD("jni onload call");
return JNI_VERSION_1_6;
}