JNI 本机静态方法拦截



在我的项目中,我想使用JNI代理来拦截java-static-native方法的结果。

我的基本方法是,在绑定时,将所有静态方法重新绑定到我的拦截器方法。拦截器方法将接受可变参数数,并在调用时将它们转发给相应的静态函数。

这是一种合适的方法吗?现在在我的实现中,我努力将可变参数从拦截器函数转发到实际函数......

(C++ 转发函数调用(

有没有人对此有更好的方法的想法?还是我以过于复杂的方式做某事?

va_arg不会

给你参数的类型信息。 充其量你会得到参数计数,如果你所有的函数都有不同的参数计数(除了JNIEnv*jclass(,那么你就可以让它工作。

如果要截获特定方法,则可以构建截获方法表。 只需使用 JavaH 生成存根,如果需要,可以使用重命名,然后构建 JNINativeMethod 表。

static JNINativeMethod JVM_Methods[] =
{
   // grab function names and signatures from JavaH stubs
   {"OnDeepLink",    "(Ljava/lang/String;)V",    (void*)& JNI_OnDeepLink},
   ...
};
int JVM_Methods_Count = N;
// register your overrides
jint nRes = g_env->RegisterNatives(activity, JVM_Methods, JVM_Methods_Count);

另外,我有一个小技巧,在注册 C 函数后,我将回调到活动/类并设置它们链接的布尔值。 我正在动态链接,所以我需要在执行调用之前检查它们是否已设置。

相关内容

  • 没有找到相关文章

最新更新