动态添加本机挂钩

时间:2019-08-21 11:21:42

标签: java java-native-interface

是否有使用JNI动态添加本机挂钩的方法?我的意思是,我想覆盖一个类(或新类)中的某些方法,以便该覆盖调用我的本机代码,而无需为此编写任何Java代码。

1 个答案:

答案 0 :(得分:0)

如果您引用的是native方法,也许注册可能是您的答案。

例如,在这里,我正在注册本机方法

JNIEXPORT jint JNICALL addOne(JNIEnv *env, jclass obj, jint a) {
  return a + 1;
}
...
...
static JNINativeMethod methods[] = {
  {"addOne",    "(I)I", (void *)&addOne}
};
...
...
(*env)->RegisterNatives(env, cls_Main,
                        methods, sizeof(methods)/sizeof(methods[0]));

将分配给班级

public class Main {

  public static native int addOne(int a);

  ...
  ...

}

完整示例:https://github.com/mkowsiak/jnicookbook/tree/master/recipeNo052