有没有办法使用 JNI 动态添加本机钩子?我的意思是,我想覆盖类(或新类(中的某些方法,以便覆盖调用我的本机代码,而无需为此编写任何 Java 代码。
如果您指的是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/recipes/recipeNo052