我是一名有用的助手,可以为您翻译文本。
我试图使用本地实现(将Lua钩入活动)来覆盖活动回调方法。但是,在JNI代码中调用超类方法时遇到了问题,因为回调需要这样做。
例如,我有一个像这样的类:
在JNI中?
我试图使用本地实现(将Lua钩入活动)来覆盖活动回调方法。但是,在JNI代码中调用超类方法时遇到了问题,因为回调需要这样做。
例如,我有一个像这样的类:
class TestActivity extends Activity {
@Override
protected native void onCreate(Bundle bundle);
static {
System.loadLibrary("test-jni")
}
}
我正在尝试用 C 语言实现 TestActivity.onCreate()
:
void Java_test_TestActivity_onCreate(JNIEnv* env, jobject obj, jobject bundle)
{
// Get class, super class, and super class method ID...
jclass objcls = (*env)->GetObjectClass(env, obj);
jclass sprcls = (*env)->GetSuperclass(env, objcls);
jmethodID methid = (*env)->GetMethodID(env, sprcls, "onCreate", "(Landroid/os/Bundle;)V");
// Call super class method...
(*env)->CallVoidMethod(env, obj, methid, bundle);
}
然而,当我尝试这段代码时,TestActivity.onCreate()
被它本身调用,而不是Activity.onCreate()
,从而导致以下错误:
JNI错误(应用程序错误):本地引用表溢出(最大值= 512)
我认为jmethodID是特定于类的,并且会识别超级方法,但事实并非如此。
因此,我的问题是,如何实现这一点...
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
}
在JNI中?