Como chamar um método de classe super sobrescrito em Java através do JNI?

Eu estou tentando substituir um método de retorno de chamada de atividade com uma implementação nativa (para ligar Lua em uma atividade). No entanto, eu acertei um obstáculo ao tentar chamar o método da superclasse dentro do código JNI, como é requerido para o callback.

Por exemplo, eu tenho uma classe como esta:

class TestActivity extends Activity {

    @Override
    protected native void onCreate(Bundle bundle);

    static {
        System.loadLibrary("test-jni")
    }
}

E estou tentando implementarTestActivity.onCreate() em C é assim:

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);
}

No entanto, quando eu tento esse código,TestActivity.onCreate() é chamado dentro de si em vez deActivity.onCreate(), Produzindo este erro:

JNI ERROR (app bug): local reference table overflow (max=512)

Eu pensei que um jmethodID era específico para uma classe e identificaria o supermétodo, no entanto, esse não era o caso.

Então minha pergunta é, como você implementa isso ...

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
}

No JNI?

questionAnswers(2)

yourAnswerToTheQuestion