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関数を登録した後、私は活動/クラスにコールバックし、それらがリンクされているブール値を設定しますちょっとしたトリックを持っています。私は動的にリンクしているので、コールを実行する前に設定されているかどうかを確認する必要があります。
Aspectj https://eclipse.org/aspectj/ –