c JNI调用java函数

时间:2014-08-31 15:28:46

标签: java android c android-ndk

我在c jni中的第一个功能代码是

void fun1()
{
   jmethodID java_fun = (*global_env)->GetMethodID(global_env,cls_Env, "test1", "()V");
   (*global_env)->CallVoidMethod(global_env,(*global_obj), java_fun);
}

我的第二个是

void fun2(int x)
{
   jmethodID java_fun = (*global_env)->GetMethodID(global_env,cls_Env, "test2", "([I)V");
   (*global_env)->CallVoidMethod(global_env,(*global_obj), java_fun,(int)x);
}

在我的java端,第一个c函数的代码是

private void test1()
{
    System.out.printf("test1");
    callfunction();
}
void callfunction()
{
   System.out.printf("how i can get here??");

}

第一个问题是如何从C调用中获取callfunction()?

现在第二个c函数的第二个java代码是

public int var1;
private void test2(int x)
{
    System.out.printf("test2");
    var1=x;
}

第二个问题是如何在java端从c侧保存我的数据?

由于

2 个答案:

答案 0 :(得分:1)

fun2()中有一个拼写错误:它应该显示为GetMethodID(global_env, cls_Env, "test2", "(I)V"); [错误)。

如果您想直接从C拨打callfunction(),请使用

GetMethodID(global_env, cls_Env, "callfunction", "()V");

答案 1 :(得分:0)

Q1:

void fun1()
{
   jmethodID java_fun = (*global_env)->GetMethodID(global_env, cls_Env, "test1", "()V");
   (*global_env)->CallVoidMethod(global_env, global_obj, java_fun);

}

Q2:
 void test2(int x)
{
    System.out.printf("test2");
    var1=x;
}

void fun2()
{
   int i = 2;
   jmethodID java_fun = (*global_env)->GetMethodID(global_env, cls, "test2", "(I)V");
   (*global_env)->CallVoidMethod(global_env, global_obj, java_fun, i);

}

请检查此link